     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();
+		}
     }
     
     /**

            scroller.minViewportInset = 0;
            scroller.measuredSizeIncludesScrollBars = false;
            scroller.ensureElementIsVisibleForSoftKeyboard = false;
            addChild(scroller);
        }
        

            textDisplay.addEventListener(Event.CHANGE, textDisplay_changeHandler);
            textDisplay.addEventListener(FlexEvent.VALUE_COMMIT, textDisplay_changeHandler);
            
			textDisplay.left = getStyle("paddingLeft");
			textDisplay.top = getStyle("paddingTop");
			textDisplay.right = getStyle("paddingRight");
			textDisplay.bottom = getStyle("paddingBottom");
			
            // wrap StyleableTextComponent in Group for viewport
            textDisplayGroup = new Group();
            textDisplayGroup.clipAndEnableScrolling = true;
            textDisplayGroup.addElement(textDisplay);
        }
