 
     /**
      *  @private
+     *  Holds the last recorded value of the textFlow generation.  Used to
+     *  determine whether to return immediately from damage event if there 
+     *  have been no changes.
+     */
+    private var lastGeneration:uint = 0;    // 0 means not set
+        
+    /**
+     *  @private
      *  True if TextOperationEvent.CHANGING and TextOperationEvent.CHANGE 
      *  events should be dispatched.
      */

        _text = null;
        _content = null;        
        _textFlow = _textContainerManager.getTextFlow();
        
        // We don't need to call invalidateProperties()
        // because the hostFormat and the _textFlow are still valid.

     */
    private function textContainerManager_damageHandler(event:DamageEvent):void
    {
        // The following textContainerManager functions can trigger a damage
        // event:
        //    setText/setTextFlow
        //    set hostFormat
        //    set compositionWidth/compositionHeight
        //    set horizontalScrollPosition/veriticalScrollPosition
        //    set textLineCreator
        //    updateContainer or compose: always if TextFlowFactory, sometimes 
        //        if flowComposer

        // If no changes, don't recompose/update.  The TextFlowFactory 
        // createTextLines dispatches damage events every time the textFlow
        // is composed, even if there are no changes. 
        if (_textFlow && _textFlow.generation == lastGeneration)
            return;

        if (ignoreDamageEvent || event.damageLength == 0)
            return;

