         transitionGroup = new Group();
         transitionGroup.autoLayout = false;
         transitionGroup.includeInLayout = false;
-        addComponentToContainer(transitionGroup, actionBarSkin);
         transitionGroup.width = actionBar.width;
         transitionGroup.height = actionBar.height;
+        addComponentToContainer(transitionGroup, actionBarSkin);
         
         // Construct our parallel effect.
-        var effect:Parallel = new Parallel();
+        var actionBarEffect:Parallel = new Parallel();
         
         // Calculate the slide distance based on direction.
         switch (actionBarTransitionDirection)

                transitionGroup.removeElement(cachedActionGroup);
                actionBar.actionGroup.cacheAsBitmap = false;
            }
            
            // Restore title group and title content to their original state.
            if (actionBar && actionBar.titleGroup && actionBar.titleGroup.visible)
                actionBar.titleGroup.cacheAsBitmap = false;
            
            if (actionBar && actionBar.titleDisplay
                && (actionBar.titleDisplay is DisplayObject)
                && DisplayObject(actionBar.titleDisplay).visible)
            {
                DisplayObject(actionBar.titleDisplay).cacheAsBitmap = false;
            }
            
            // Restore title group and title content to their original home.
            if (actionBar && verticalTransition)
            {
                var titleComponent:UIComponent = actionBar.titleGroup;
                if (!titleComponent || !titleComponent.visible)
                    titleComponent = actionBar.titleDisplay as UIComponent;
                
                if (titleComponent)
                {
                    transitionGroup.removeElement(titleComponent);
                    addComponentToContainer(titleComponent, actionBar.skin);
                }
            }
            
            // Restore navigation group to their proper home.
            if (endView.navigationContent && actionBar && verticalTransition)
            {
                transitionGroup.removeElement(actionBar.navigationGroup);
                if (actionBar.titleDisplay)
                {
                    var childIndex:uint = actionBar.skin.getChildIndex(actionBar.titleDisplay as DisplayObject);
                    addComponentToContainerAt(actionBar.navigationGroup, actionBar.skin, childIndex);
                }
                else
                    addComponentToContainer(actionBar.navigationGroup, actionBar.skin);
            }
            
            // Restore action group to their proper home.
            if (endView.actionContent && actionBar && verticalTransition)
            {
                transitionGroup.removeElement(actionBar.actionGroup);
                if (actionBar.titleDisplay)
                {
                    childIndex = actionBar.skin.getChildIndex(actionBar.titleDisplay as DisplayObject);
                    addComponentToContainerAt(actionBar.actionGroup, actionBar.skin, childIndex);
                }
                else
                    addComponentToContainer(actionBar.actionGroup, actionBar.skin);
            }
            
            removeComponentFromContainer(transitionGroup, actionBar.skin);
            
            if (actionBar)
            {
                actionBar.skin.scrollRect = null;
                
                // Force actionBar to update content group positions after

        {
            if (endView.navigationContent)
            {
                // Initialize the transformation offests
                transformOffsets = new TransformOffsets();
                transformOffsets[animatedProperty] = slideDistance;
                slideTargets.push(transformOffsets);
                
                actionBar.navigationGroup.postLayoutTransformOffsets = transformOffsets;
                actionBar.navigationGroup.cacheAsBitmap = true;
                actionBar.navigationGroup.alpha = 0;
                fadeInTargets.push(actionBar.navigationGroup);
                
                // We reparent the titleComponent into the transition group so
                // that the items are properly clipped when animating vertically
                if (verticalTransition)
                    transitionGroup.addElementAt(actionBar.navigationGroup, 0);
            }
            
            if (endView.actionContent)
            {
                // Initialize the transformation offests
                transformOffsets = new TransformOffsets();
                transformOffsets[animatedProperty] = slideDistance;
                slideTargets.push(transformOffsets);
                
                actionBar.actionGroup.postLayoutTransformOffsets = transformOffsets;
                actionBar.actionGroup.cacheAsBitmap = true;
                actionBar.actionGroup.alpha = 0;
                fadeInTargets.push(actionBar.actionGroup);
                
                // We reparent the titleComponent into the transition group so
                // that the items are properly clipped when animating vertically
                if (verticalTransition)
                    transitionGroup.addElementAt(actionBar.actionGroup, 0);
            }
        }
        
        // Add transform offsets to slide target array
        
        // Ensure bitmaps are rendered prior to invocation of our effect.
        transitionGroup.validateNow();
        
        
        // Setup fade out targets
        if (cachedTitleGroup)
        {
            // Initialize the transformation offests
            transformOffsets = new TransformOffsets();
            slideTargets.push(transformOffsets);
            
            cachedTitleGroup.postLayoutTransformOffsets = transformOffsets;
            fadeOutTargets.push(cachedTitleGroup.displayObject);
        }
        
        if (cachedNavigationGroup)
        {
            // Initialize the transformation offests
            transformOffsets = new TransformOffsets();
            slideTargets.push(transformOffsets);
            
            cachedNavigationGroup.postLayoutTransformOffsets = transformOffsets;
            fadeOutTargets.push(cachedNavigationGroup.displayObject);
        }
        
        if (cachedActionGroup)
        {
            // Initialize the transformation offests
            transformOffsets = new TransformOffsets();
            slideTargets.push(transformOffsets);
            
            cachedActionGroup.postLayoutTransformOffsets = transformOffsets;
            fadeOutTargets.push(cachedActionGroup.displayObject);
        }
        
        // If no fade effects we aren't animating anything so return null
        if (fadeInTargets.length == 0 && fadeOutTargets.length == 0)
            return null;
        
        // Create fade in effect
        if (fadeInTargets.length > 0)
        {
            var fadeInEffect:Fade = new Fade();
            fadeInEffect.targets = fadeInTargets;
            fadeInEffect.duration = duration;
            fadeInEffect.alphaFrom = 0;
            fadeInEffect.alphaTo = 1;
            actionBarEffect.addChild(fadeInEffect);
        }

        // Create fade out effect
        if (fadeOutTargets.length > 0)
        {
            var fadeOutEffect:Fade = new Fade();
            fadeOutEffect.targets = fadeOutTargets;
            fadeOutEffect.duration = duration;
            fadeOutEffect.alphaFrom = 1;
            fadeOutEffect.alphaTo = 0;
            actionBarEffect.addChild(fadeOutEffect);
        }        
        
        // Create slide in effect
        var vector:Vector.<MotionPath> = new Vector.<MotionPath>();
        vector.push(new SimpleMotionPath(animatedProperty, null, null, -slideDistance));
        
        var moveEffect:Animate = new Animate();
        moveEffect.targets = slideTargets;
        moveEffect.motionPaths = vector;
        moveEffect.easer = new spark.effects.easing.Sine(.7);
        moveEffect.duration = duration;
        moveEffect.addEventListener(EffectEvent.EFFECT_UPDATE, actionBarMoveEffect_effectUpdateHandler);
        moveEffect.addEventListener(EffectEvent.EFFECT_END, actionBarMoveEffect_effectEndedHandler);
        actionBarEffect.addChild(moveEffect);
        
        return actionBarEffect;
    }
    
    /**
