         return fontContext;
     }
 
-    /**
-     *  @private
-     *  The editingMode is set to READ_SELECT if not already READ_SELECT or
-     *  READ_WRITE.
-     *  When done call releaseSelectionManager().
-     */
-    private function getSelectionManager():ISelectionManager
-    {
-        priorEditingMode = editingMode;
-        
-        if (editingMode == EditingMode.READ_ONLY)
-            editingMode = EditingMode.READ_SELECT;
-
-        return SelectionManager(_textContainerManager.beginInteraction());
-    }
-
-    /**
-     *  @private
-     */
-    private function releaseSelectionManager():void
-    {
-        _textContainerManager.endInteraction();
-        
-        editingMode = priorEditingMode;
-    }
-
-    /**
-     *  @private
-     *  The editingMode is set to READ_WRITE.
-     *  When done call releaseEditManager().  Should only be used by API calls.
-     */
-    private function getEditManager():IEditManager
-    {
-        // This triggers a damage event if the interactionManager is
-        // changed. 
-                
-        priorEditingMode = editingMode;
-        
-        if (editingMode != EditingMode.READ_WRITE)
-            editingMode = EditingMode.READ_WRITE;
-        
-        var editManager:IEditManager =
-            EditManager(_textContainerManager.beginInteraction());
-            
-        // Combine all the edits from one API call into one operation so it 
-        // can be undone as a single operation.  It will also prevent this from
-        // possibibly being combined with the last operation.
-        editManager.beginCompositeOperation(); 
-        
-        return editManager;           
-    }
-
-    /**
-     *  @private
-     *  Should only be used by API calls.
-     */
-    private function releaseEditManager(editManager:IEditManager):void
-    {
-        editManager.endCompositeOperation();
-                    
-        _textContainerManager.endInteraction();
-
-        editingMode = priorEditingMode;
-    }
-        
     /**
      *  @private
      *  Return true if there is a width and height to use for the measure.

    {
         // Make sure all properties are committed before doing the operation.
        validateNow();
        
        var editManager:IEditManager = getEditManager();
        
        // Assign each specified attribute to one of three format objects,
        // depending on whether it is container-, paragraph-,

     * 
     *  This is used when text is either inserted or appended via the API.
     */
    private function handleInsertText(newText:String, isAppend:Boolean=false):void
    {
        // Make sure all properties are committed and events dispatched
        // before doing the append.
        validateNow();

        if (isAppend)
        {
            // Set insertion pt to the end of the current text.
            _selectionAnchorPosition = text.length;
            _selectionActivePosition = _selectionAnchorPosition;
        }
        else
        {
            // Insert requires a selection, or it is a noop.
            if (_selectionAnchorPosition == -1 || _selectionActivePosition == -1)
                return;
        }

        // This will update the selection after the operation is done.
        var success:Boolean =
            _textContainerManager.insertTextOperation(
                newText, _selectionAnchorPosition, _selectionActivePosition);
                
        if (success)
            dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));                                   
    }

    /**
