 
     /** Plays the movie from its current frame. The movie will loop forever.  */
     public function loop () :Movie {
-        _playing = true;
+        _state = PLAYING;
         _stopFrame = NO_FRAME;
         return this;
     }

                    (_frame <= _stopFrame ? _stopFrame - _frame : _numFrames - _frame + _stopFrame);
                var framesElapsed :int = int(actualPlaytime * _frameRate) - _frame;
                if (framesElapsed >= framesRemaining) {
                    _playing = false;
                    newFrame = _stopFrame;
                    _stopFrame = NO_FRAME;
                }

    public function playTo (position :Object) :Movie {
       _stopFrame = extractFrame(position);
       // don't play if we're already at the stop frame
       _state = (_frame != _stopFrame ? PLAYING : STOPPED);
       return this;
    }

    /** Stops playback if it's currently active. Doesn't alter the current frame or stop frame. */
    public function stop () :Movie {
        _state = STOPPED;
        return this;
    }

    /** Stops playback of this movie, but not its children */
    public function playChildrenOnly () :Movie {
        _state = PLAYING_CHILDREN_ONLY;
        return this;
    }

    /** Advances the playhead by the give number of seconds. From IAnimatable. */
    public function advanceTime (dt :Number) :void {
        if (dt < 0) throw new Error("Invalid time [dt=" + dt + "]");
        if (_state == STOPPED) return;

        if (_state == PLAYING && _numFrames > 1) {
            _playTime += dt;
            var actualPlaytime :Number = _playTime;
            if (_playTime >= _duration) _playTime %= _duration;
