         // so that animations run again.
         if (disableNextControlAnimation)
             disableNextControlAnimation = false;
+        
+        // Call base class' commitProperties after the above so that state changes
+        // as a result of overlayControls are caught.  This should be okay because
+        // TabbedViewNavigator doesn't need any properties in its base class being
+        // validated to complete the above code
+        super.commitProperties();
+        
+        // Dispatch the index change event after super.commitProperties() has changed
+        // so the callbacks can deal with state changes performed by commitProperties.
+        if (changeEvent)
+            dispatchEvent(changeEvent);
     }
     
     /**

            // Dispatch selection change event
            if (hasEventListener(IndexChangeEvent.CHANGE))
            {
                var e:IndexChangeEvent = new IndexChangeEvent(IndexChangeEvent.CHANGE, false, false);
                e.oldIndex = oldIndex;
                e.newIndex = _selectedIndex;
                
                dispatchEvent(e);
            }
        }
        
        if (tabBarVisibilityChanged)
            commitVisibilityChanges();
        

                navigator.setActive(true);
                navigator.visible = true;
                navigator.includeInLayout = true;

                // 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
