         return _playing;
     }
     
+    /**
+     *  @private
+     *  Sets the playing variable to true or false and dispatches 
+     *  the appropriate event.  We don't check to compare it to 
+     *  the last value because we want this event to dispatch every 
+     *  time.  This way when the playPauseButton is toggled in VideoPlayer, 
+     *  this binding event has the last word as to whether we are actually 
+     *  playing or paused (Someone could click the play button, but if there's 
+     *  no source, we want to still show the play button rather than toggle it 
+     *  as ToggleButton's do naturally).
+     */
+    private function setPlaying(value:Boolean):void
+    {
+        _playing = value;
+        dispatchEvent(new Event("playingChanged"));
+    }
+    
     //----------------------------------
     //  source
     //----------------------------------

                
                seek(startTime);
                
        if (isNaN(duration))
                    mx_internal::videoPlayer.play(null);
        else
                    mx_internal::videoPlayer.play(null, false, duration);
    }
            else
            {
                // if we've played this video before or we don't 


            mx_internal::videoPlayer.play2(flvSource);
        }
        else if (source is String && String(source).length != 0)
        {
            // The progressive case
            var sourceString:String;
