     
     //--------------------------------------------------------------------------
     //
-    //  Overridden event handlers: UIComponent
+    //  Event handlers
     //
     //--------------------------------------------------------------------------
 
     /**
      *  @private
-     */
-    protected function focusInHandler(event:FocusEvent):void
-    {        
+     *  Need to be careful since this is the container for TextContainerManager
+     *  and TextContainerManager adds it's own focusInHandler to the container.  
+     *  RichEditableTextContainerManager overrides focusInHandler and calls
+     *  this.
+     */
+    mx_internal function focusInHandler(event:FocusEvent):void
+    {
+        trace("focusIn handler");
+        if (_editable)
+        {
+            // If no selection, give it one so that there is an insertion
+            // cursor and text can be input.
+            if (enabled)
+            {
+                if (!getSelectionManager().hasSelection())
+                {
+                    setSelection(int.MAX_VALUE, int.MAX_VALUE);
+                    
+                    // This is ugly but it's the only way to get tabbing into
+                    // the control to allow input without a mouse click.
+                    var controller:ContainerController = 
+                                        textFlow.flowComposer.getControllerAt(0);
+                    controller.tlf_internal::requiredFocusInHandler(event);
+                }
+                releaseSelectionManager();
+            }
+            
+            if (enabled &&
+                selectionAnchorPosition == -1 && selectionActivePosition == -1)
+            {
+                //setSelection(int.MAX_VALUE, int.MAX_VALUE);
+                
+                // This is ugly but it's the only way to get tabbing into
+                // the control to allow input without a mouse click.
+                //var controller:ContainerController = 
+                //                    textFlow.flowComposer.getControllerAt(0);
+                //controller.tlf_internal::requiredFocusInHandler(event);
+            }
+            
+            if (enabled)
+                getSelectionManager();
+                
+            if (_imeMode != null)
+            {
+                IME.enabled = true;
+                prevMode = IME.conversionMode;
+                // When IME.conversionMode is unknown it cannot be
+                // set to anything other than unknown(English)      
+                try
+                {
+                    if (!errorCaught &&
+                        IME.conversionMode != IMEConversionMode.UNKNOWN)
+                    {
+                        IME.conversionMode = _imeMode;
+                    }
+                    errorCaught = false;
+                }
+                catch(e:Error)
+                {
+                    // Once an error is thrown, focusIn is called 
+                    // again after the Alert is closed, throw error 
+                    // only the first time.
+                    errorCaught = true;
+                    var message:String = ResourceManager.getInstance().getString(
+                        "controls", "unsupportedMode", [ _imeMode ]);          
+                    throw new Error(message);
+                }
+            }            
+        }
+        
         if (focusManager && multiline)
             focusManager.defaultButtonEnabled = false;
 
-        if (_imeMode != null && _editable)
-        {
-            IME.enabled = true;
-            prevMode = IME.conversionMode;
-            // When IME.conversionMode is unknown it cannot be
-            // set to anything other than unknown(English)      
-            try
-            {
-                if (!errorCaught &&
-                    IME.conversionMode != IMEConversionMode.UNKNOWN)
-                {
-                    IME.conversionMode = _imeMode;
-                }
-                errorCaught = false;
-            }
-            catch(e:Error)
-            {
-                // Once an error is thrown, focusIn is called 
-                // again after the Alert is closed, throw error 
-                // only the first time.
-                errorCaught = true;
-                var message:String = ResourceManager.getInstance().getString(
-                    "controls", "unsupportedMode", [ _imeMode ]);          
-                throw new Error(message);
-            }
-        }            
     }
 
     /**

    /**
     *  @private
     */
    private var _inputManager:InputManager; /*** public? ***/
            
    /**
     *  @private
     *  The TLF InputManager instance that displays,
     *  scrolls, and edits the text in this component.
     */
	mx_internal function get inputManager():InputManager
	{
		return _inputManager;
	}

        if (event.operation is PasteOperation)
            handlePasteOperation(PasteOperation(event.operation));

        // ToDo: this may not be needed if Vellum goes back to dispatching
        // this event on editManager.insertText()/appendText().
        inputManager_selectionChangeHandler(null);
        
        // Since the text may have changed, set a flag which will
        // cause the 'text' getter to call extractText() to extract
        // the text by walking the TextFlow.
