      */
     public function play():void
     {
-        // close old video if it was open
-        if (sourceLastPlayed != null && sourceLastPlayed != this.source)
-        {
-            videoPlayer.close();
-            videoPlayer.clear();
-        }
+        // can't call any methods before we've initialized
+        if (!initialized)
+            return;
         
         // check for 2 cases: streaming video or progressive download
         if (source is StreamingVideoSource)

            return;
        
        _source = value;
        sourceChanged = true;
        dispatchEvent(new Event("sourceChanged"));
        invalidateProperties();
    }
    
    //----------------------------------

    
    /**
     *  @private
     *  Since this is a GraphicElement, there's no "initialized" flag.
     *  We do different things in the source setter based on if we 
     *  are initialized or not.
     */
    private var initialized:Boolean = false;
    
    /**
     *  @private
     */
    override protected function commitProperties():void
    {
        super.commitProperties();
        
        initialized = true;
        
        if (sourceChanged)
        {
            sourceChanged = false;
            
            setUpSource();
        }
    }
    
    /**
     *  @private
     */
    private var videoPlayerProperties:Object;
    
    /**
     *  @private
     */
    private function createUnderlyingVideoPlayer():void
    {
        // if old one, destroy it
        if (videoPlayer)
        {
            videoPlayerProperties = {autoRewind: videoPlayer.autoRewind,
                                     scaleMode: videoPlayer.scaleMode};
        
            videoPlayer.close();
            videoPlayer.clear();
            
            videoPlayer.removeEventListener(fl.video.VideoEvent.AUTO_REWOUND, videoPlayer_autoRewoundHandler);
            videoPlayer.removeEventListener(fl.video.VideoEvent.CLOSE, videoPlayer_closeHandler);
            videoPlayer.removeEventListener(fl.video.VideoEvent.COMPLETE, videoPlayer_completeHandler);
            videoPlayer.removeEventListener(fl.video.MetadataEvent.METADATA_RECEIVED, videoPlayer_metaDataReceivedHandler);
            videoPlayer.removeEventListener(fl.video.VideoEvent.PLAYHEAD_UPDATE, videoPlayer_playHeadUpdateHandler);
            videoPlayer.removeEventListener(ProgressEvent.PROGRESS, dispatchEvent);
            videoPlayer.removeEventListener(fl.video.VideoEvent.READY, videoPlayer_readyHandler);
            videoPlayer.removeEventListener(fl.video.VideoEvent.STATE_CHANGE, videoPlayer_stateChangeHandler);
    
            videoPlayerContainer.removeChild(videoPlayer);
        }
        
        // create new video player
        videoPlayer = new VideoPlayer();
        
        if (videoPlayerProperties)
        {
            videoPlayer.autoRewind = videoPlayerProperties.autoRewind;
            videoPlayer.scaleMode = videoPlayerProperties.scaleMode;
        
            videoPlayerProperties = null;
        }
        
        videoPlayer.addEventListener(fl.video.VideoEvent.AUTO_REWOUND, videoPlayer_autoRewoundHandler);
        videoPlayer.addEventListener(fl.video.VideoEvent.CLOSE, videoPlayer_closeHandler);
        videoPlayer.addEventListener(fl.video.VideoEvent.COMPLETE, videoPlayer_completeHandler);
        videoPlayer.addEventListener(fl.video.MetadataEvent.METADATA_RECEIVED, videoPlayer_metaDataReceivedHandler);
        videoPlayer.addEventListener(fl.video.VideoEvent.PLAYHEAD_UPDATE, videoPlayer_playHeadUpdateHandler);
        videoPlayer.addEventListener(ProgressEvent.PROGRESS, dispatchEvent);
        videoPlayer.addEventListener(fl.video.VideoEvent.READY, videoPlayer_readyHandler);
        videoPlayer.addEventListener(fl.video.VideoEvent.STATE_CHANGE, videoPlayer_stateChangeHandler);

        videoPlayerContainer.addChild(videoPlayer);
        
        dispatchEvent(new Event("playheadTimeChanged"));
        dispatchEvent(new Event("totalTimeChanged"));
    }
    
    /**
