         videoPlayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, videoPlayer_mediaPlayerStateChangeHandler);
         videoPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, dispatchEvent);
         videoPlayer.addEventListener(LoadEvent.BYTES_LOADED_CHANGE, dispatchEvent);
-        videoPlayer.addEventListener(TimeEvent.DURATION_CHANGE, dispatchEvent);
+        videoPlayer.addEventListener(TimeEvent.DURATION_CHANGE, videoPlayer_durationChangeHandler);
         videoPlayer.addEventListener(TimeEvent.COMPLETE, dispatchEvent);
         
         addChild(videoContainer);

     */
    private function videoPlayer_mediaSizeChangeHandler(event:DisplayObjectEvent):void
    {
        invalidateSize();
        
        // if we're loading up the video, then let's finish the load in here
        if (inLoadingState2)
        {
            if (videoPlayer.canSeek && videoPlayer.canSeekTo(0))
            {
                inLoadingState3 = true;
                
                // Don't call pause and seek inside this handler because OSMF is 

                // event (see SDK-27028).
                callLater(pauseAndSeekCallBack);
            }
            else if (duration < 0)
            {
                // Work around for negative durations - FM-1009
                // We want to seek to the first frame but we can't because the
                // duration of the video is reported as negative. As a work around,
                // listen for the first time change event and then pause the video.
                //trace("videoPlayer_mediaSizeChangeHandler: negative duration - wait for first current time change event");
                videoPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, videoPlayer_currentTimeChangeHandler);
            }
            else
            {
                //trace("videoPlayer_mediaSizeChangeHandler: waiting for media to become seekable");
