     private function textDisplay_keyHandler(event:KeyboardEvent):void
     {
         // update scroll position when caret changes
-        if (!isNaN(hostComponent.explicitHeight) &&
-            (event.keyCode == Keyboard.UP
+        if ((event.keyCode == Keyboard.UP
                 || event.keyCode == Keyboard.DOWN
                 || event.keyCode == Keyboard.LEFT
                 || event.keyCode == Keyboard.RIGHT))
         {
-            invalidateDisplayList();
-            invalidateCaretPosition = true;
-        }
+			if (isScrollingActive())
+			{
+	            invalidateDisplayList();
+	            invalidateCaretPosition = true;
+			}
+        }
+		
+		// Change event is not always sent when delete key is pressed, so
+		// invalidate the size here
+		if (event.keyCode == Keyboard.BACKSPACE)
+		{
+			invalidateSize();
+		}
     }
     
     /**

        if (textDisplay.scrollV > 1)
            textDisplay.scrollV = 1;
        
        // grab old measured textDisplay height before resizing it
        var oldPreferredTextHeight:Number = getElementPreferredHeight(textDisplay);
        
        // keep track of oldUnscaledWidth so we have a good guess as to the width 
        // of the textDisplay on the next measure() pass
        oldUnscaledWidth = unscaledWidth;

     */
    private function textDisplay_changeHandler(event:Event):void
    {
		invalidateSize();
		if (isScrollingActive())
		{
	        invalidateDisplayList();
	        invalidateCaretPosition = true;   
		}
    }
    
    /**
