             // lastSnappedElement was set as a side-effect of the call to getSnappedPosition above.  
             orientationChangeSnapElement = lastSnappedElement;
         }
-    }
-    
-    /**
-     *  @private 
-     */
-    private function orientationChangeHandler(event:Event):void
-    {
-        if (getStyle("interactionMode") == InteractionMode.TOUCH)
-        {
-            // When the orientation (landscape/portrait) changes, then the valid
-            // scroll position ranges may have changed.
-            checkScrollPosition();
-        }
+    
+        // Force the viewport layout to clear its cache of element
+        // dimensions so it can be repopulated with correct values
+        // after the orientation change is complete.
+        if (viewportLayout)
+            viewportLayout.clearVirtualLayoutCache();
     }
     
     //--------------------------------------------------------------------------

        if (getStyle("interactionMode") == InteractionMode.TOUCH)
        {
            // If the viewport dimensions have changed, then we may need to update the
            // scroll ranges per the new viewport size.
            // Note that the orientationChangeHandler serves the same purpose, but on
            // some platforms (i.e. Android) the runtime sends the "orientationChange"
            // event before the new viewport dimensions are set.
            determineScrollRanges();
        }
    }
    

            // clipped/obscured by the soft keyboard
            var topLevelApp:Application = FlexGlobals.topLevelApplication as Application;
            var eltBounds:Rectangle;
            var adjustForSoftKeyboard:Boolean = topLevelApp && 
                                                (!topLevelApp.resizeForSoftKeyboard) &&
                                                (stage && stage.softKeyboardRect.height > 0);
            
