      */
     protected function createActionBarShowEffect():IEffect
     {
-        return createActionBarVisibilityEffect();
+        return createActionBarVisibilityEffect(true);
     }
     
     /**
      *  @private
      */   
-    private function createActionBarVisibilityEffect():IEffect
-    {
-        var effect:IEffect;
-        var finalEffect:Parallel = new Parallel();
+	private function createActionBarVisibilityEffect(showAnimation:Boolean):IEffect
+	{
+		var effect:IEffect;
+		var finalEffect:Parallel = new Parallel();
         
         // Grab initial values
         actionBarProps = { target:actionBar, start:captureAnimationValues(actionBar) };
         contentGroupProps = { target:contentGroup, start:captureAnimationValues(contentGroup) };
         
-        // Update actionBar layout properties
-        if (actionBarVisibilityInvalidated)
-            actionBar.visible = actionBar.includeInLayout = !actionBarProps.start.visible;
-        
-        // Calculate final positions.  This method will force a validation
-        calculateFinalUIPositions();
-        
-        // The actionbar will be visible if we are animating it
-        if (actionBar.visible)
-        {
-            var animate:Animate = new Animate();
-            animate.target = actionBar;
-            animate.duration = ACTION_BAR_ANIMATION_DURATION;
-            animate.motionPaths = new Vector.<MotionPath>();
-            animate.motionPaths.push(new SimpleMotionPath("y", actionBarProps.start.y, actionBarProps.end.y));
-            
-            actionBar.includeInLayout = false;
-            actionBar.cacheAsBitmap = true;
-            
-            effect = animate;
-            effect.target = actionBar;
-            
-            finalEffect.addChild(effect);
-        }
-        
-        effect = createContentVisibilityEffect(actionBar.visible, contentGroupProps);
+        // Update actionBar layout properties so we can capture the final state of
+        // of the navigator
+        actionBar.visible = actionBar.includeInLayout = showAnimation;
+        
+        // Calculate final positions and position actionBar.  This method will force a validation
+        prepareActionBarForAnimation(showAnimation);
+		
+        // Create animation for action bar 
+        var animate:Animate = new Animate();
+        animate.target = actionBar;
+        animate.duration = ACTION_BAR_ANIMATION_DURATION;
+        animate.motionPaths = new Vector.<MotionPath>();
+        animate.motionPaths.push(new SimpleMotionPath("y", actionBarProps.start.y, actionBarProps.end.y));
+        
+        // Add action bar effect to final parallel effect
+        effect = animate;        
+        finalEffect.addChild(effect);
+		
+        // Create animation for content group
+        effect = createContentVisibilityEffect(contentGroupProps);
         effect.target = contentGroup;
-        
         finalEffect.addChild(effect);
         
         return finalEffect;

        
        // Update the end position of the animation based on whether the
        // actionBar is showing/hiding and if it is animating up or down.
        if (actionBarVisibilityInvalidated)
        {
            if (animateActionBarUp)
            {
                if (actionBarProps.start.visible)
                    actionBarProps.end.y = -actionBar.height;
                else
                    actionBarProps.start.y = -actionBar.height;
            }
            else
            {
                if (actionBarProps.start.visible)
                    actionBarProps.end.y = this.height;
                else
                    actionBarProps.start.y = this.height;
            }
            
            actionBar.visible = true;
        }
    }
    
    /**

     *  @playerversion AIR 2.5
     *  @productversion Flex 4.5
     */
	private function visibilityAnimation_completeHandler(event:EffectEvent):void
	{
        event.target.removeEventListener(EffectEvent.EFFECT_END, visibilityAnimation_completeHandler);
        
        // Clear flags and temporary properties
		actionBarVisibilityEffect = null;
		actionBarVisibilityInvalidated = false;
        
        if (actionBarProps)
        {
            // Update the actionBar visibility, includeInLayout and cacheAsBitmap flags		
    		actionBar.visible = actionBar.includeInLayout = !actionBarProps.start.visible;
            actionBar.cacheAsBitmap = actionBarProps.start.cacheAsBitmap;
    		actionBarProps = null;
        }
        
        if (contentGroupProps)
        {
		    contentGroup.includeInLayout = contentGroupProps.start.includeInLayout;
		    contentGroup.cacheAsBitmap = contentGroupProps.start.cacheAsBitmap;
    		contentGroupProps = null;
        }
    }
    
    /**
