                 if (insertOp.deleteSelectionState != null && !insertOp.deleteSelectionState.tlf_internal::selectionManagerOperationState) {
                     //OVERRIDING INSERT
                     if (isSeparator(ac)) {
-                        outputText = super.text.substring(0, insertOp.originalSelectionState.anchorPosition + 1) + insertOp.text + super.text.substring(insertOp.originalSelectionState.activePosition + 2);
+                        outputText = super.text.substring(0, insertOp.originalSelectionState.anchorPosition + 1) + insertOp.text + super.text.substring(insertOp.originalSelectionState.activePosition + 1);
                     } else {
                         outputText = super.text.substring(0, insertOp.originalSelectionState.anchorPosition) + insertOp.text + super.text.substring(insertOp.originalSelectionState.activePosition);
                     }

                an = ac = selectionActivePosition - offset;
            }
            //copy
            else if(event.operation is CopyOperation)
            {
                return; // avoid to remove all text on copy operation
            }


    import flashx.textLayout.operations.InsertTextOperation;
    import flashx.textLayout.tlf_internal;

    import mx.utils.StringUtil;

    import spark.components.RichEditableText;
    import spark.components.TextInput;
    import spark.events.TextOperationEvent;

    use namespace tlf_internal;

    /**
