     protected function play0 () :void
     {
         pause0();
-        _chan = _sound.play(_lastPosition * 1000, _loop ? int.MAX_VALUE : 0,
-            new SoundTransform(_volume));
-        if (_chan == null) {
+        _chan = _sound.play(_lastPosition * 1000, 0, new SoundTransform(_volume));
+        if (_chan != null) {
+            _chan.addEventListener(Event.SOUND_COMPLETE, handlePlaybackComplete);
+
+        } else {
             Log.getLog(this).warning("All sound channels are in use; " +
                 "unable to play sound.");
         }


    /**
     */
    protected function handleSoundComplete (event :Event) :void
    {
        handlePositionCheck(null); // also updates duration
        _isComplete = true;
    }

    protected function handleError (event :IOErrorEvent) :void

    // from AudioPlayer
    public function unload () :void
    {
        pause0();
        if (_sound != null) {
            try {
                _sound.close();
