                         else if (viewport.horizontalScrollPosition + width < eltBounds.right + focusThickness)
                             viewport.horizontalScrollPosition = eltBounds.right + focusThickness - width;
                     }
-                    snapContentScrollPosition();
+                
+                    // Do not snap vertically when increasing the 
+                    // verticalScrollPosition for the soft keyboard
+                    snapContentScrollPosition(true, !adjustForSoftKeyboard);
                 }
                 
                 if (doValidateNow && viewport is UIComponent)

     *  @private
     *  Snap the scroll positions to valid values.
     */
    private function snapContentScrollPosition():void
    {
        viewport.horizontalScrollPosition = getSnappedPosition( 
            Math.min(Math.max(minHorizontalScrollPosition, viewport.horizontalScrollPosition), maxHorizontalScrollPosition),
            HORIZONTAL_SCROLL_POSITION);

        viewport.verticalScrollPosition = getSnappedPosition( 
            Math.min(Math.max(minVerticalScrollPosition, viewport.verticalScrollPosition), maxVerticalScrollPosition),
            VERTICAL_SCROLL_POSITION);
    }
    
    /**

                // We only care about focusThickness if we are positioning the whole element 
                if (!elementLocalBounds)
                {
                    if (!eltBounds)
                        eltBounds = layout.getChildElementBounds(element);
                    
                    var focusThickness:Number = 0;
                
                    if (element is IStyleClient)
