 
         switch (event.info.code) {
         case "NetStream.Play.Stop":
-            // rewind to the beginning
-            _netStream.seek(0);
-            _netStream.pause();
-            updateState(MediaPlayerCodes.STATE_PAUSED);
+            if (_state == MediaPlayerCodes.STATE_PLAYING) {
+                handlePositionCheck(); // if we never got metadata, retrieve final position as dur
+                // rewind to the beginning
+                _netStream.seek(0);
+                _netStream.pause();
+                updateState(MediaPlayerCodes.STATE_PAUSED);
+            }
             break;
 
         case "NetStream.Seek.Notify":
-            MethodQueue.callLater(handlePositionCheck, [ null ]);
+            MethodQueue.callLater(handlePositionCheck);
             break;
         }
     }

    public function unload () :void
    {
        _metadata = null;
        _sizeChecker.reset();
        _positionChecker.reset();
        _vid.attachNetStream(null);

    {
        if ("duration" in info) {
            _duration = Number(info.duration);
            _gotDurationFromMetadata = true;
            if (!isNaN(_duration)) {
                dispatchEvent(new ValueEvent(MediaPlayerCodes.DURATION, _duration));
            }
