     private function tabBar_indexChanging(event:IndexChangeEvent):void
     {
         if (!indexCanChange(event.newIndex))
+        {
             event.preventDefault();
+            
+            // Clear changing flag
+            changingEventDispatched = false;
+        }
     }
     
     /**

            // Store the old index
            var oldIndex:int = _selectedIndex;
            
            // If the data provider has changed, the navigator elements have
            // already been removed, so the following code doesn't need to run
            if (!selectedIndexAdjusted && !dataProviderChanged && _selectedIndex >= 0 && _selectedIndex < length)
            {
                navigator = getElementAt(_selectedIndex) as ViewNavigatorBase;
                navigator.setActive(false, !maintainNavigationStack);
                navigator.visible = false;
                navigator.includeInLayout = false;
                
                if (navigator.activeView)
                    navigator.activeView.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, 
                                                                view_propertyChangeHandler);
                
                removeNavigatorListeners(navigator);
            }
            
            commitSelection();
            
            if (_selectedIndex >= 0)
            {
                // If there is no focus or the item that had focus isn't 
                // on the display list anymore, update the focus to be
                // the active view or the view navigator
                updateFocus();
                
                navigator = getElementAt(_selectedIndex) as ViewNavigatorBase;
                navigator.setActive(true);
                navigator.visible = true;
                navigator.includeInLayout = true;
                
                addNavigatorListeners(navigator);
                
                // Update the states of the controls on the newly activated view navigator.
                // The updateControlsForView() method will automatically bubble up to all
                // parents of the navigator.
                navigator.updateControlsForView(navigator.activeView);
                
                // Force a validation of the new navigator to prevent a flicker from
                // occurring in cases where multiple validation passes are required
                // to completely validate a view
                if (initialized)
                    currentContentGroup.validateNow();
                
                if (navigator.activeView)
                {
                    navigator.activeView.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, 
                                                            view_propertyChangeHandler);
                }
            }

            selectedIndexAdjusted = false;
            dataProviderChanged = false;
            selectedIndexChanged = false;
            
            // Dispatch selection change event
            if (hasEventListener(IndexChangeEvent.CHANGE))
            {
                changeEvent = new IndexChangeEvent(IndexChangeEvent.CHANGE, false, false);
                changeEvent.oldIndex = oldIndex;
                changeEvent.newIndex = _selectedIndex;
            }
        }

        if (tabBarVisibilityChanged)

        }
        
        mxmlContent = contentArray;

        // The proposed selected index is reset because it is no longer valid
        // since the array of navigators has changed.
