         _proposedSelectedIndex = value;
         selectedNavigatorChanged = true;
         
+        changingEventDispatched = false;
         invalidateProperties();
+    }
+    
+    /**
+     *  @private
+     *  This method determines the navigator can change its selected index.
+     *  This function will be called if the selection changed on the
+     *  tab bar, or if the selectedIndex property has changed.
+     */ 
+    private function indexCanChange(proposedSelection:int):Boolean
+    {
+        changingEventDispatched = true;
+        if (!canRemoveCurrentView())
+            return false;
+        
+        if (hasEventListener(IndexChangeEvent.CHANGING))
+        {
+            var e:IndexChangeEvent = new IndexChangeEvent(IndexChangeEvent.CHANGING, false, true);
+            e.oldIndex = _selectedIndex;
+            e.newIndex = proposedSelection;
+            
+            if (!dispatchEvent(e))
+                return false;
+        }
+        
+        return true;
     }
     
     //----------------------------------

            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);
                
                UIComponent(navigator).invalidateProperties();
            }
            

    // TODO (chiedozi): Follow ListBase setSelectedIndex pattern
    public function set selectedIndex(value:int):void
    {
        if (value < -1 || value >= length) 
        {
            var message:String = ResourceManager.getInstance().getString(
