      */
     private function videoElement_stateChangeHandler(event:fl.video.VideoEvent):void
     {
+        invalidateSkinState();
+        
+        // don't dispatch the event here...this is an internal event
+    }
+    
+   /**
+    *  @private
+    */
+    private function videoElement_playingChangedHandler(event:Event):void
+    {
         if (playPauseButton)
             playPauseButton.selected = playing;
-        
-        invalidateSkinState();
-        
-        // don't dispatch the event here...this is an internal event
     }
     
     /**

import fl.video.VideoState;
import fl.video.flvplayback_internal;

import flash.display.StageDisplayState;
import flash.events.Event;
import flash.events.FullScreenEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.geom.Rectangle;

import mx.core.IVisualElementContainer;
import mx.core.mx_internal;

            videoElement.removeEventListener(spark.events.VideoEvent.PLAYHEAD_UPDATE, videoElement_playHeadUpdateHandler);
            videoElement.removeEventListener(ProgressEvent.PROGRESS, videoElement_progressHandler);
            videoElement.removeEventListener(fl.video.VideoEvent.STATE_CHANGE, videoElement_stateChangeHandler);
            videoElement.removeEventListener("playingChanged", videoElement_playingChangedHandler);
            
            // just strictly for binding purposes
            videoElement.removeEventListener("sourceChanged", dispatchEvent);
