         trace('Cannot start unless in initial state.');
         return false;
       }
-      sendDescribeReq();
-      state = STATE_DESCRIBE_SENT;
+
+      if (0 === this.methods.length) {
+        /* We don't know the options yet. Start with that. */
+        sendOptionsReq();
+        state = STATE_OPTIONS_SENT;
+      } else {
+        /* Already queried the options (and perhaps got unauthorized on describe) */
+        sendDescribeReq();
+        state = STATE_DESCRIBE_SENT;
+      }
       return true;
     }
 
     public function pause():Boolean
     {
       if (state !== STATE_PLAYING) {
-        trace('Unable to pause a stream if not playing');
-        return false;
-      }
-      sendPauseReq();
-      state = STATE_PAUSE_SENT;
+        trace('Unable to pause a stream if not playing.');
+        return false;
+      }
+
+      try {
+        sendPauseReq();
+        state = STATE_PAUSE_SENT;
+      } catch (err:Error) {
+        trace(err.message);
+        return false;
+      }
+
       return true;
     }
 

      case STATE_INITIAL:
        trace("RTSPClient: STATE_INITIAL");

        break;
      case STATE_DESCRIBE_SENT:
        trace("RTSPClient: STATE_DESCRIBE_SENT");

        state = STATE_DESCRIBE_RCVD;

        if (!sdp.parse(body)) {

    }

    private function sendPauseReq():void {
      if (-1 === this.supportCommand("PAUSE")) {
        throw new Error('Pause is not supported by server.');
      }

      /* NetStream must be closed here, otherwise it will think of this rtsp pause
         as a very bad connection and buffer a lot before playing again. Not
         excellent for live data. */
