             activeTransition.startView = currentView;
             activeTransition.endView = pendingView;
             activeTransition.navigator = this;
-            
-            // Give the transition a chance to prepare before the view updates
+            activeTransition.preInit();
+            
+            ViewTransitionUtil.notifyTransitionPreparation();
+        }
+        
+        if (ViewTransitionUtil.suspendCount > 0)
+        {
+            ViewTransitionUtil.instance.addEventListener("ready", completeTransitionPreparations);
+        }
+        else
+        {
+            completeTransitionPreparations();
+        }
+    }
+    
+    private function completeTransitionPreparations(event:Event = null):void
+    {
+        if (event)
+            event.target.removeEventListener("ready", completeTransitionPreparations);
+        
+        var pendingView:View;
+        if (pendingViewDescriptor)
+        {
+            pendingView = pendingViewDescriptor.instance;
+            pendingView.visible = true;
+        }
+        
+        // Give the transition a chance to prepare before the view updates
+        if (activeTransition)
             activeTransition.captureStartValues();
-        }
 
         // This event is dispatched here to allow developers to incorporate
         // length specific changes into the view navigator transitions

        }
    }

    /**
     *  @private
     *  Starts the view transition.
     */
    private function startViewTransition(event:Event):void
    {
        removeEventListener(Event.ENTER_FRAME, startViewTransition);
        
        // Force the master clock of the animation engine to update its
        // current time so that the overhead of creating the view and preparing
        // the transition is not included in our animation interpolation.
        // See SDK-27793
        Animation.pulse();
        activeTransition.play();
        
        if (hasEventListener(FlexEvent.TRANSITION_START))
            dispatchEvent(new FlexEvent(FlexEvent.TRANSITION_START, false, false));
    }
    
    /**

        if (pendingViewDescriptor)
        {
            pendingView = pendingViewDescriptor.instance;
            pendingView.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, 
                            view_propertyChangeHandler);
        }
