Index: scribus/pageitem_textframe.cpp
===================================================================
--- scribus/pageitem_textframe.cpp	(wersja 17197)
+++ scribus/pageitem_textframe.cpp	(kopia robocza)
@@ -1137,6 +1137,7 @@
 		current.rightMargin = 0.0;
 		current.mustLineEnd = current.colRight;
 		current.restartX = 0;
+		bool disableHyph = false;
 
 		for (int a = firstInFrame(); a < itemText.length(); ++a)
 		{
@@ -1152,7 +1153,17 @@
 			double scaleV = charStyle.scaleV() / 1000.0;
 			double scaleH = charStyle.scaleH() / 1000.0;
 			double offset = hlcsize10 * (charStyle.baselineOffset() / 1000.0);
+			
+			//avoid hyphenation for words with softhyphen at it beginning
+			if (hl->ch == SpecialChars::SHYPHEN && !disableHyph)
+			{
+				if ((a == 0) || !itemText.item(a - 1)->ch.isLetterOrNumber())
+					disableHyph = true;
+			}
+			else if (disableHyph && !hl->ch.isLetterOrNumber())
+				disableHyph = false;
 
+
 			if (chstr.isEmpty())
 				chstr = SpecialChars::ZWNBSPACE;
 			if (style.lineSpacingMode() == ParagraphStyle::AutomaticLineSpacing)
@@ -1735,7 +1746,7 @@
 			double overflowWidth = 0.0;
 			double hyphWidth = 0.0;
 			bool inOverflow = false;
-			if (hl->effects() & ScStyle_HyphenationPossible || hl->ch == SpecialChars::SHYPHEN)
+			if ((hl->effects() & ScStyle_HyphenationPossible || hl->ch == SpecialChars::SHYPHEN) && !disableHyph)
 				hyphWidth = charStyle.font().charWidth('-', hlcsize10) * (charStyle.scaleH() / 1000.0);
 			if ((current.isEndOfLine(style.rightMargin() + hyphWidth)) || current.isEndOfCol(realDesc) || SpecialChars::isBreak(hl->ch, Cols > 1) || (current.xPos - current.maxShrink + hyphWidth) >= current.mustLineEnd)
 			{
@@ -1803,8 +1814,11 @@
 					charEnd = static_cast<int>(ceil(current.xPos - current.maxShrink) + hyphWidth);
 				}
 				if (legacy &&
-						(((hl->ch == '-' || (hl->effects() & ScStyle_HyphenationPossible)) && (current.hyphenCount < m_Doc->HyCount || m_Doc->HyCount == 0))
-						 || hl->ch == SpecialChars::SHYPHEN))
+						((hl->ch == '-')
+						 || (!disableHyph
+							 && ( ((hl->effects() & ScStyle_HyphenationPossible)
+								   && (current.hyphenCount < m_Doc->HyCount || m_Doc->HyCount == 0))
+								  || hl->ch == SpecialChars::SHYPHEN))))
 				{
 					if (hl->effects() & ScStyle_HyphenationPossible || hl->ch == SpecialChars::SHYPHEN)
 					{
@@ -1908,7 +1922,7 @@
 			}
 
 			// hyphenation
-			if (((hl->effects() & ScStyle_HyphenationPossible) || (hl->ch == '-') || hl->ch == SpecialChars::SHYPHEN) && (!outs) && !itemText.text(a-1).isSpace() )
+			if ( !disableHyph && ((hl->effects() & ScStyle_HyphenationPossible) || (hl->ch == '-') || hl->ch == SpecialChars::SHYPHEN) && (!outs) && !itemText.text(a-1).isSpace() )
 			{
 				breakPos = current.xPos;
 				if (hl->ch != '-')
@@ -2074,7 +2088,7 @@
 						current.finishLine(EndX);
 						
 						hyphWidth = 0.0;
-						if ((hl->effects() & ScStyle_HyphenationPossible) || hl->ch == SpecialChars::SHYPHEN)
+						if (!disableHyph && ((hl->effects() & ScStyle_HyphenationPossible) || hl->ch == SpecialChars::SHYPHEN))
 						{
 							// insert hyphen
 							if (current.lastInRowLine)
Index: scribus/hyphenator.cpp
===================================================================
--- scribus/hyphenator.cpp	(wersja 17197)
+++ scribus/hyphenator.cpp	(kopia robocza)
@@ -218,20 +218,22 @@
 		firstC = text.indexOf(wordBoundary, firstC+Ccount);
 		if (firstC < 0)
 			break;
-		if (firstC > 0 && text.at(firstC-1) == SpecialChars::SHYPHEN)
-		{
-			Ccount = 1;
-			continue;
-		}
+//FIX ME: if this not for avoiding hyphenation by inserting SoftHyphen at begin of word uncomment these lines
+//		if (firstC > 0 && text.at(firstC-1) == SpecialChars::SHYPHEN)
+//		{
+//			Ccount = 1;
+//			continue;
+//		}
 		lastC = text.indexOf(whiteSpace, firstC);
 		if (lastC < 0)
 			lastC = signed(text.length());
 		Ccount = lastC - firstC;
-		if (lastC < signed(text.length()) && text.at(lastC) == SpecialChars::SHYPHEN)
-		{
-			++Ccount;
-			continue;
-		}
+//FIX ME: if this not for avoiding hyphenation by inserting SoftHyphen at end of word uncomment these lines
+//		if (lastC < signed(text.length()) && text.at(lastC) == SpecialChars::SHYPHEN)
+//		{
+//			++Ccount;
+//			continue;
+//		}
 		if (Ccount > MinWordLen-1)
 		{
 			found = text.mid(firstC, Ccount).toLower();
