Index: Scribus/scribus/fonts/scface.cpp
===================================================================
--- Scribus/scribus/fonts/scface.cpp	(revision 16858)
+++ Scribus/scribus/fonts/scface.cpp	(working copy)
@@ -9,6 +9,8 @@
 #include "fonts/scface.h"
 #include "text/storytext.h"
 
+#include<QDebug>
+
 ScFace::ScFaceData::ScFaceData() : 
 	refs(0), 
 	usage(0), 
@@ -350,10 +352,8 @@
 	if (ch == SpecialChars::LINEBREAK || ch == SpecialChars::PARSEP 
 		|| ch == SpecialChars::FRAMEBREAK || ch == SpecialChars::COLBREAK 
 		|| ch == SpecialChars::TAB || ch == SpecialChars::SHYPHEN
-		 || ch == SpecialChars::ZWSPACE || ch == SpecialChars::ZWNBSPACE)
+		 || ch == SpecialChars::ZWSPACE || ch == SpecialChars::ZWNBSPACE || ch == SpecialChars::NBSPACE)
 		return CONTROL_GLYPHS + ch.unicode();
-	else if (ch == SpecialChars::NBSPACE)
-		return  m->char2CMap(QChar(' '));
 	else if(ch == SpecialChars::NBHYPHEN)
 		return  m->char2CMap(QChar('-'));
 	else
@@ -367,11 +367,10 @@
 		m->load();
 	}
 	
-	if (ch == SpecialChars::SHYPHEN)
+	if (ch == SpecialChars::SHYPHEN || ch == SpecialChars::NBSPACE)
 		return emulateGlyph(ch);
 
 	uint gl = m->char2CMap(ch);
-	
 	if (gl == 0)
 		return emulateGlyph(ch);
 	else
Index: Scribus/scribus/pageitem.cpp
===================================================================
--- Scribus/scribus/pageitem.cpp	(revision 16858)
+++ Scribus/scribus/pageitem.cpp	(working copy)
@@ -1879,12 +1879,12 @@
 		layout.scaleV = style.scaleV() / 1000.0;
 	}	
 	
-/*	if (layout.glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBSPACE.unicode())) {
+	if (layout.glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBSPACE.unicode())) {
 		uint replGlyph = style.font().char2CMap(QChar(' '));
 		layout.xadvance = style.font().glyphWidth(replGlyph, style.fontSize() / 10) * layout.scaleH;
 		layout.yadvance = style.font().glyphBBox(replGlyph, style.fontSize() / 10).ascent * layout.scaleV;
 	}
-	else if (layout.glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBHYPHEN.unicode())) {
+	/* else if (layout.glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBHYPHEN.unicode())) {
 		uint replGlyph = style.font().char2CMap(QChar('-'));
 		layout.xadvance = style.font().glyphWidth(replGlyph, style.fontSize() / 10) * layout.scaleH;
 		layout.yadvance = style.font().glyphBBox(replGlyph, style.fontSize() / 10).ascent * layout.scaleV;
@@ -1892,8 +1892,8 @@
 	else if (layout.glyph >= ScFace::CONTROL_GLYPHS) {
 		layout.xadvance = 0;
 		layout.yadvance = 0;
-	}
-	else */
+	} */
+	else
 	{
 		layout.xadvance = style.font().glyphWidth(layout.glyph, style.fontSize() / 10) * layout.scaleH;
 		layout.yadvance = style.font().glyphBBox(layout.glyph, style.fontSize() / 10).ascent * layout.scaleV;
@@ -2002,11 +2002,11 @@
 		{
 			p->translate(glyphs.xadvance, 0);
 			drawGlyphs(p, style, *glyphs.more);
-		}			
+		}
 		return;
 	}
 	else if (glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBSPACE.unicode()) ||
-			 glyph == (ScFace::CONTROL_GLYPHS + 32)) 
+			 glyph == (ScFace::CONTROL_GLYPHS + 32))
 		glyph = style.font().char2CMap(QChar(' '));
 	else if (glyph == (ScFace::CONTROL_GLYPHS + SpecialChars::NBHYPHEN.unicode()))
 		glyph = style.font().char2CMap(QChar('-'));
@@ -2028,23 +2028,14 @@
 		// underlines when drawing a white outline
 		if (((style.effects() & ScStyle_Underline) || ((style.effects() & ScStyle_UnderlineWords) && glyph != style.font().char2CMap(QChar(' ')))) && (style.strokeColor() != CommonStrings::None))
 		{
-			double st, lw;
-			if ((style.underlineOffset() != -1) || (style.underlineWidth() != -1))
-			{
-				if (style.underlineOffset() != -1)
-					st = (style.underlineOffset() / 1000.0) * (style.font().descent(style.fontSize() / 10.0));
-				else
-					st = style.font().underlinePos(style.fontSize() / 10.0);
-				if (style.underlineWidth() != -1)
-					lw = (style.underlineWidth() / 1000.0) * (style.fontSize() / 10.0);
-				else
-					lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
-			}
-			else
-			{
-				st = style.font().underlinePos(style.fontSize() / 10.0);
-				lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
-			}
+			double st = style.font().underlinePos(style.fontSize() / 10.0);
+			double lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
+
+			if (style.underlineOffset() != -1)
+				st = (style.underlineOffset() / 1000.0) * (style.font().descent(style.fontSize() / 10.0));
+			if (style.underlineWidth() != -1)
+				lw = (style.underlineWidth() / 1000.0) * (style.fontSize() / 10.0);
+
 			if (style.baselineOffset() != 0)
 				st += (style.fontSize() / 10.0) * glyphs.scaleV * (style.baselineOffset() / 1000.0);
 			QColor tmpC = p->pen();
@@ -2146,23 +2137,14 @@
 		}
 		if ((style.effects() & ScStyle_Strikethrough) && (style.strokeColor() != CommonStrings::None))
 		{
-			double st, lw;
-			if ((style.strikethruOffset() != -1) || (style.strikethruWidth() != -1))
-			{
-				if (style.strikethruOffset() != -1)
-					st = (style.strikethruOffset() / 1000.0) * (style.font().ascent(style.fontSize() / 10.0));
-				else
-					st = style.font().strikeoutPos(style.fontSize() / 10.0);
-				if (style.strikethruWidth() != -1)
-					lw = (style.strikethruWidth() / 1000.0) * (style.fontSize() / 10.0);
-				else
-					lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
-			}
-			else
-			{
-				st = style.font().strikeoutPos(style.fontSize() / 10.0);
-				lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
-			}
+			double st = style.font().strikeoutPos(style.fontSize() / 10.0);
+			double lw = qMax(style.font().strokeWidth(style.fontSize() / 10.0), 1.0);
+
+			if (style.strikethruOffset() != -1)
+				st = (style.strikethruOffset() / 1000.0) * (style.font().ascent(style.fontSize() / 10.0));
+			if (style.strikethruWidth() != -1)
+				lw = (style.strikethruWidth() / 1000.0) * (style.fontSize() / 10.0);
+
 			if (style.baselineOffset() != 0)
 				st += (style.fontSize() / 10.0) * glyphs.scaleV * (style.baselineOffset() / 1000.0);
 			p->setPen(p->brush());
