         _netCon.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
 
         _netCon.connect(null);
-        trace("Not waiting, just using!");
         _netStream = new NetStream(_netCon);
-        _netStream.client = this;
-        //_netStream.client = new Callbacker(this);
+        // pass in refs to some of our protected methods
+        _netStream.client = {
+            onMetaData: metaDataReceived
+        };
+        _netStream.addEventListener(NetStatusEvent.NET_STATUS, handleStreamNetStatus);
+
         _vid.attachNetStream(_netStream);
         _videoChecker.start();
         _netStream.play(url);
-    }
-
+        _paused = false;
+    }
+
+    /**
+     * Stop playing our video.
+     */
     public function shutdown () :void
     {
         _videoChecker.reset();

        redispatchError(event);
    }

    protected function redispatchError (event :Event) :void
    {
        dispatchEvent(new ValueEvent(VIDEO_ERROR, event));
    }

    public function callbackCalled (name :String, args :Array) :*
    {
        trace("Callback: " + name + ", args: " + args);
        return undefined;
    }

    public function onMetaData (obj :Object) :void
    {
        trace("Got metadata..");
        for (var n :String in obj) {
            trace("name " + n + " -> " + obj[n]);
        }
    }

    protected var _vid :Video;

    protected var _netCon :NetConnection;

    protected var _netStream :NetStream;

    /** Checks the video every 100ms to see if the dimensions are now know.
     * Yes, this is how to do it. We could trigger on ENTER_FRAME, but then

        }
    }

    protected function handleStreamNetStatus (event :NetStatusEvent) :void
    {
        if (event.info.code == "NetStream.Play.Stop") {
            _netStream.seek(0);
            _netStream.pause();
            _paused = true;
            redrawPauser();
        }
    }

    protected function handleAsyncError (event :AsyncErrorEvent) :void
    {
        trace("AsyncError: " + event);
