     /**
      *  @private
      */
-    private var zoomTarget:UIComponent;
-    
-    /**
-     *  @private
-     */
     private var scaleEffect:Scale;
     
+    /**
+     *  @private
+     */
+    private var targetShapshot:BitmapImage;
+    
+    /**
+     *  @private
+     */
+    private var cachedNavigatorGroup:Group;
+    
     //--------------------------------------------------------------------------
     //
     //  Properties
     //
     //--------------------------------------------------------------------------
-
+    
     //---------------------------------
     // minimumScale
     //---------------------------------

    override protected function createConsolidatedEffect():IEffect
    {        
        // If we have no cachedNavigator then there is not much we can do.
        if (!cachedNavigator)
            return null;
        
        // Add a group to contain our snapshot view of the navigator while
        // we animate.
        transitionGroup = new Group();
        transitionGroup.includeInLayout = false;
        
        // Add our temporary transition group to our target navigator's parent
        // so we can make it and the original navigator siblings.
        if (mode == ZoomViewTransitionMode.OUT)
            addComponentToContainer(transitionGroup, DisplayObjectContainer(targetNavigator).parent as UIComponent);
        else
            addComponentToContainerAt(transitionGroup, DisplayObjectContainer(targetNavigator).parent as UIComponent,0);
        
        // Position our snapshot above endView.
        cachedNavigator.includeInLayout = false;
        transitionGroup.addElement(cachedNavigator);
    
        // Ensure that appropriate surfaces are cached and snapshots rendered.
        transitionGroup.validateNow();
        transitionGroup.x = transitionGroup.y = 0;
            
        zoomTarget = (mode == ZoomViewTransitionMode.OUT) ? transitionGroup : targetNavigator.skin;
        
        // Initialize our target's transform center.
        zoomTarget.transformX = cachedNavigator.getLayoutBoundsWidth(true) / 2;
        zoomTarget.transformY = cachedNavigator.getLayoutBoundsHeight(true) / 2;
        
        // Ensure our alpha is initialized to 0 prior to the start
        // of our transition so that the view isn't displayed briefly
        // after validation.
        if (mode == ZoomViewTransitionMode.IN)
            zoomTarget.alpha = 0;
                
        // Save view properties for restoration later.
        startViewProps = { targetNavigatorIncludeInLayout:targetNavigator.includeInLayout,
            zoomTargetBlendMode:zoomTarget.blendMode};
        
        // Disable layout for our target navigator.
        targetNavigator.includeInLayout = false;
        
        // Set our blendMode to 'normal' for performance reasons.
        zoomTarget.blendMode = BlendMode.NORMAL;
        
        return createZoomEffect(zoomTarget);
    }
    
    /**

        // depending on the transition mode (in/out).
        var parallel:Parallel = new Parallel;
        parallel.target = zoomTarget;
        
        // Create fade effect to gradually fade our zoom target, we don't fade for the
        // duration of the effect as this degrades overall transition performance, we
        // simply fade near the point of first appearance or disappearance.
