                 
                 if (_displayAsPassword)
                 {
-                    _text = splice(_text, flowTextOperation.absoluteStart,
-                        flowTextOperation.absoluteEnd, "");
+                    if (op is DeleteTextOperation)
+                    {
+                        _text = splice(_text, flowTextOperation.absoluteStart,
+                            flowTextOperation.absoluteEnd, "");
+                    }
+                    else
+                    {
+                        // For security, don't allow passwords to be cut.
+                        event.preventDefault();
+                        return;
+                    }
                 }
             }
             

            // In this case we always maintain _text with the underlying text and
            // display the appropriate number of passwordChars.  If there are any
            // interactive editing operations _text is updated during the operation.
            if (displayAsPassword)
                return;
            
            // Invalidate _text and _content.
            _text = null;
            _content = null;        
            _textFlow = _textContainerManager.getTextFlow();
                        

                
                insertTextOperation.text = textToInsert;
            }
            else if (op is CopyOperation)
            {
                if (_displayAsPassword)
                {
                    // For security, don't allow passwords to be copied.
                    event.preventDefault();
                    return;
                }
            }
            else if (op is PasteOperation)
            {
                // Paste is implemented in operationEnd.  The basic idea is to allow 
