             if (_selectedIndex > -1)
             {
                 navigator = navigators[_selectedIndex];
-                navigator.active = true;
-                navigator.landscapeOrientation = landscapeOrientation;
                 
-                addElement(navigator);
                 navigator.addEventListener(ElementExistenceEvent.ELEMENT_ADD, navigator_elementAddHandler);
                 navigator.addEventListener(ElementExistenceEvent.ELEMENT_REMOVE, navigator_elementRemoveHandler);
                 
+                navigator.active = true;
+                navigator.landscapeOrientation = landscapeOrientation;
+                addElement(navigator);
+                
                 UIComponent(navigator).invalidateProperties();
             }
             

        if (!selectedNavigatorChanged && value == selectedIndex)
            return;
        
        // FIXME (chiedozi): Need to be able to cancel this event
//        if (activeView && !canRemoveCurrentView())
//            cancelIndexChange = true;
        
        if (initialized)
        {
            if (hasEventListener(IndexChangeEvent.CHANGING))
            {
                var e:IndexChangeEvent = new IndexChangeEvent(IndexChangeEvent.CHANGING, false, true);
                e.oldIndex = _selectedIndex;
                e.newIndex = value;
                
                if (!dispatchEvent(e))
                    cancelIndexChange = true;
            }
            
            // If the active view's REMOVING event or the navigator's
            // CHANGING event was canceled, prevent the index change
            if (cancelIndexChange)
            {
                _proposedSelectedIndex = NO_PROPOSED_SELECTION;
                return;
            }

            finalEffect.addChild(effect);
        }
        
        var animate:Animate = new Animate();
        animate.target = contentGroup;
        animate.duration = getStyle("animationDuration");
        animate.motionPaths = new Vector.<MotionPath>();
        animate.motionPaths.push(new SimpleMotionPath("y", contentGroupProps.start.y, 
                                                           contentGroupProps.end.y));
        animate.motionPaths.push(new SimpleMotionPath("height", contentGroupProps.start.height, 
                                                                contentGroupProps.end.height));
 
        contentGroup.includeInLayout = false;
        contentGroup.cacheAsBitmap = true;  
        
        finalEffect.addChild(animate);
        finalEffect.duration = getStyle("animationDuration");
        return finalEffect;
    }
    
    /**
     *  @private
     */
    private function navigator_elementAddHandler(event:ElementExistenceEvent):void
    {
        event.element.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, 
                                                view_propertyChangeHandler);
    }
    
    /**
     *  @private
     */
    private function navigator_elementRemoveHandler(event:ElementExistenceEvent):void
    {
        event.element.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, 
                                                view_propertyChangeHandler);
    }
    
    /**
     *  @private
     */
    override protected function partAdded(partName:String, instance:Object):void
    {
        super.partAdded(partName, instance);
        
        if (instance == tabBar)
        {
            tabBar.dataProvider = this;
            tabBar.addEventListener(IndexChangeEvent.CHANGING, tabBar_indexChanging);
        }
    }
    
    /**
     *  @private
     */ 
    override protected function partRemoved(partName:String, instance:Object):void
    {
        super.partRemoved(partName, instance);
        
        if (instance == tabBar)
        {
            tabBar.dataProvider = null;
            tabBar.removeEventListener(IndexChangeEvent.CHANGING, tabBar_indexChanging);
        }
    }
    
    /**
