       bcTimer.stop();
       this.bcTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, bcTimerHandler);
 
-      if (state === STATE_TEARDOWN) {
-        dispatchEvent(new ClientEvent(ClientEvent.STOPPED, { currentTime: this.getCurrentTime() }));
-        this.ns.dispose();
-      } else {
+      if (state !== STATE_TEARDOWN) {
         if (this.streamBuffer.length > 0 && this.streamBuffer[this.streamBuffer.length - 1].timestamp - this.ns.time * 1000 < this.ns.bufferTime * 1000) {
           this.ns.bufferTime = 0;
           this.ns.pause();
           this.ns.resume();
         }
 
-        if (!connectionBroken)
+        if (!connectionBroken) {
           ErrorManager.dispatchError(803);
+          dispatchEvent(new ClientEvent(ClientEvent.STOPPED, { currentTime: this.getCurrentTime() }));
+          this.ns.dispose();
+        }
       }
     }
 


      case STATE_TEARDOWN:
        Logger.log('RTSPClient: STATE_TEARDOWN');
        this.bcTimer.stop();
        this.handle.disconnect();
        break;
      }


        "Session: " + session + "\r\n" +
        auth.authorizationHeader("TEARDOWN", authState, authOpts, urlParsed, digestNC++) +
        "\r\n";

      handle.writeUTFBytes(req);
      Logger.log('RTSP OUT:', req);

      prevMethod = sendTeardownReq;
    }
