     //  Properties
     // 
     //--------------------------------------------------------------------------
+
     //----------------------------------
     //  active
     //----------------------------------
     
     /**
      *  @private
+     *  Only gets called by TabbedViewNavigator.
      */ 
-    override public function set active(value:Boolean):void
-    {
-        super.active = value;
-        
-        if (navigationStack.length == 0)
-        {
-            if (firstView != null)
-            {
-                navigationStack.push(firstView, firstViewData);
-                viewChangeRequested = true;
-                invalidateProperties();
+    override mx_internal function setActive(value:Boolean):void
+    {
+        if (value == active)
+            return;
+        
+        super.setActive(value);
+        
+        if (value)
+        {
+            createTopView();
+            
+            // Need to force a validation on the actionBar
+            invalidateActionBarProperties();
+        }
+        else
+        {
+            if (activeView)
+            {                
+                if ((activeView.destructionPolicy != ContainerDestructionPolicy.NEVER && 
+                    destructionPolicy != ContainerDestructionPolicy.NEVER) ||
+                    !maintainNavigationStack)
+                    destoryViewInstance(navigationStack.topView);
             }
-        }
-        else
-        {
-            // If the navigator isn't initialized, this means the first validation
-            // pass hasn't been completed yet.  The top view will be added in the
-            // next validation pass and doesn't need to be done here.
-            if (initialized)
-            {
-                if (value)
-                {
-                    // FIXME (chiedozi): Need to keep track of current view in the case that stuff 
-                    // changes when navigator isnt active
-                    var view:View = navigationStack.topView.instance;
-                    if (!view)
-                    {
-                        view = createViewInstance(navigationStack.topView);
-                        view.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, view_propertyChangeHandler);
-                    }
-                    
-                    view.active = true;
-                    
-                    if (hasEventListener(Event.COMPLETE))
-                        dispatchEvent(new Event(Event.COMPLETE));
-                }
-                else
-                {
-                    activeView.active = false;
-                    
-    //                if (destructionPolicy == "auto")
-    //                    destoryViewInstance(navigationStack.topView);           
-                }
-            }
+            
+            if (!maintainNavigationStack)
+                navigationStack.popToFirstView();
         }
     }
     

    public function get length():int
    {
        return navigationStack.length;
    }
    
    //----------------------------------

    /**
     *  @private
     */ 
    override mx_internal function createTopView():void
    {
        // Check if the top view already exists
        if (activeView)
            return;
        
        invalidateActionBarProperties();
        
        // If the navigation stack is empty, push on the firstView for the
        // navigator.
        if (navigationStack.length == 0)
        {
            if (firstView != null)
                navigationStack.push(firstView, firstViewData);
        }
        
        // Update the current view reference
        currentViewData = navigationStack.topView;
        
        // Create the view if needed
        var view:View = currentViewData.instance;
        if (!view)
        {
            view = createViewInstance(currentViewData);
            view.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, view_propertyChangeHandler);
        }
    }
    
