     public function playTo (position :Object) :Movie {
        _stopFrame = extractFrame(position);
        // don't play if we're already at the stop frame
-       _playing = (_frame != _stopFrame);
+       _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 {
-        _playing = false;
+        _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 (!_playing) return;
-
-        if (_numFrames > 1) {
+        if (_state == STOPPED) return;
+
+        if (_state == PLAYING && _numFrames > 1) {
             _playTime += dt;
             var actualPlaytime :Number = _playTime;
             if (_playTime >= _duration) _playTime %= _duration;

    public function get numFrames () :int { return _numFrames; }

    /** @return true if the movie is currently playing. */
    public function get isPlaying () :Boolean { return _playing; }

    /** @return true if the movie contains the given label. */
    public function hasLabel (label :String) :Boolean {

    internal var _playerData :MoviePlayerNode;

    private static const NO_FRAME :int = -1;

    private static const STOPPED :int = 0;
    private static const PLAYING_CHILDREN_ONLY :int = 1;
    private static const PLAYING :int = 2;
}
}

