diff --git a/textLayout/src/flashx/textLayout/compose/BaseCompose.as b/textLayout/src/flashx/textLayout/compose/BaseCompose.as
index e8ddb7b..2ad0506 100644
--- a/textLayout/src/flashx/textLayout/compose/BaseCompose.as
+++ b/textLayout/src/flashx/textLayout/compose/BaseCompose.as
@@ -1435,7 +1435,7 @@ package flashx.textLayout.compose
 				
 				// advance to the next element, using the rootElement of the container as a limitNode
 				// to prevent going past the content bound to this container
-				_curElementOffset += _curLine.textLength;
+				_curElementOffset = _curLine.absoluteStart + _curLine.textLength - _curElementStart;
 				if (_curElementOffset >= _curElement.textLength)
 				{
 					// We may have composed ahead over several spans; skip until we match up
diff --git a/textLayout/src/flashx/textLayout/compose/ComposeState.as b/textLayout/src/flashx/textLayout/compose/ComposeState.as
index bdddf85..ce7bddc 100644
--- a/textLayout/src/flashx/textLayout/compose/ComposeState.as
+++ b/textLayout/src/flashx/textLayout/compose/ComposeState.as
@@ -340,6 +340,11 @@ package flashx.textLayout.compose
 			var line:TextFlowLine = _curLineIndex < _flowComposer.numLines ? (_flowComposer as StandardFlowComposer).lines[_curLineIndex] : null;
 			
 			var useExistingLine:Boolean = line && (!line.isDamaged() || line.validity == FlowDamageType.GEOMETRY);
+			// if the line ends with a hyphen, don't use existing line because the player seems to mis-handle
+			// starting the next line.
+			if (useExistingLine && line.textLength > 0 &&
+				line.paragraph.getCharCodeAtPosition(line.absoluteStart + line.textLength - 1) == 0xAD)
+				useExistingLine = false;
 			var numberLine:TextLine;
 			
 			// create numberLine if in a listElement
diff --git a/textLayout/src/flashx/textLayout/compose/FlowComposerBase.as b/textLayout/src/flashx/textLayout/compose/FlowComposerBase.as
index 04bc2a3..b03592a 100644
--- a/textLayout/src/flashx/textLayout/compose/FlowComposerBase.as
+++ b/textLayout/src/flashx/textLayout/compose/FlowComposerBase.as
@@ -296,6 +296,16 @@ package flashx.textLayout.compose
 		 */
 		public function damage(startPosition:int, damageLength:int, damageType:String):void
 		{
+			if (ContainerController.tlf_internal::usesDiscretionaryHyphens)
+			{
+				// damage everything from the beginning.  
+				// The player tends to screw up if you start
+				// composition in the middle and there are lines above broken on
+				// hyphens.
+				damageLength += startPosition;
+				startPosition = 0;
+			}
+			
 			// find the line at damageStart
 			if (_lines.length == 0 || textFlow.textLength == 0)
 				return;
diff --git a/textLayout/src/flashx/textLayout/container/ContainerController.as b/textLayout/src/flashx/textLayout/container/ContainerController.as
index 50161ee..528c26d 100644
--- a/textLayout/src/flashx/textLayout/container/ContainerController.as
+++ b/textLayout/src/flashx/textLayout/container/ContainerController.as
@@ -111,6 +111,8 @@ package flashx.textLayout.container
 	 */
 	public class ContainerController implements IInteractionEventHandler, ITextLayoutFormat, ISandboxSupport
 	{		
+		static tlf_internal var usesDiscretionaryHyphens:Boolean = true;
+		
 		private var _textFlowCache:TextFlow;
 		private var _rootElement:ContainerFormattedElement;
 		
diff --git a/textLayout/src/flashx/textLayout/elements/FlowLeafElement.as b/textLayout/src/flashx/textLayout/elements/FlowLeafElement.as
index 8571ca8..22bfe40 100644
--- a/textLayout/src/flashx/textLayout/elements/FlowLeafElement.as
+++ b/textLayout/src/flashx/textLayout/elements/FlowLeafElement.as
@@ -574,7 +574,7 @@ package flashx.textLayout.elements
 			if (blockProgression == BlockProgression.RL && (parent is TCYElement))
 				return 0;
 			CONFIG::debug { assert(_computedFormat != null,"Missing _computedFormat in FlowLeafElement.getEffectiveLineHeight"); }
-			return TextLayoutFormat.lineHeightProperty.computeActualPropertyValue(_computedFormat.lineHeight, getEffectiveFontSize());
+			return TextLayoutFormat.lineHeightProperty.computeActualPropertyValue(computedFormat.lineHeight, getEffectiveFontSize());
 		}
 		
 		/** @private 
diff --git a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
index f58e1d4..13590a5 100644
--- a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
+++ b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
@@ -33,7 +33,9 @@ package flashx.textLayout.elements
 	import flash.text.engine.TextRotation;
 	import flash.utils.getQualifiedClassName;
 	
+	import flashx.textLayout.tlf_internal;
 	import flashx.textLayout.compose.TextFlowLine;
+	import flashx.textLayout.container.ContainerController;
 	import flashx.textLayout.debug.Debugging;
 	import flashx.textLayout.debug.assert;
 	import flashx.textLayout.formats.BlockProgression;
@@ -48,7 +50,6 @@ package flashx.textLayout.elements
 	import flashx.textLayout.formats.TextJustify;
 	import flashx.textLayout.formats.TextLayoutFormat;
 	import flashx.textLayout.property.Property;
-	import flashx.textLayout.tlf_internal;
 	import flashx.textLayout.utils.CharacterUtil;
 	import flashx.textLayout.utils.LocaleUtil;
 	
@@ -477,6 +478,25 @@ package flashx.textLayout.elements
 		 
 		public function findPreviousAtomBoundary(relativePosition:int):int
 		{
+			if (ContainerController.tlf_internal::usesDiscretionaryHyphens)
+			{
+				var textBlock:TextBlock = getTextBlock();
+				var tl:TextLine = textBlock.getTextLineAtCharIndex(relativePosition);
+				var currentAtomIndex = tl.getAtomIndexAtCharIndex(relativePosition);
+				if (currentAtomIndex == 0)
+				{
+					tl = tl.previousLine;
+					if (!tl)
+						return -1;
+					return tl.textBlockBeginIndex + tl.rawTextLength;
+				}
+				while (--relativePosition)
+				{
+					if (tl.getAtomIndexAtCharIndex(relativePosition) < currentAtomIndex)
+						break;
+				}
+				return relativePosition;
+			}
 			return getTextBlock().findPreviousAtomBoundary(relativePosition);
 		}
 
@@ -500,6 +520,25 @@ package flashx.textLayout.elements
 		 
 		public function findNextAtomBoundary(relativePosition:int):int
 		{
+			if (ContainerController.tlf_internal::usesDiscretionaryHyphens)
+			{
+				var textBlock:TextBlock = getTextBlock();
+				var tl:TextLine = textBlock.getTextLineAtCharIndex(relativePosition);
+				var currentAtomIndex = tl.getAtomIndexAtCharIndex(relativePosition);
+				if (currentAtomIndex == tl.atomCount - 1)
+				{
+					tl = tl.nextLine;
+					if (!tl)
+						return -1;
+					return tl.textBlockBeginIndex;
+				}
+				while (++relativePosition)
+				{
+					if (tl.getAtomIndexAtCharIndex(relativePosition) > currentAtomIndex)
+						break;
+				}
+				return relativePosition;
+			}
 			return getTextBlock().findNextAtomBoundary(relativePosition);
 		}
 		
