       case STATE_INITIAL:
         trace("RTSPClient: STATE_INITIAL");
 
+      case STATE_OPTIONS_SENT:
+        trace("RTSPClient: STATE_DESCRIBE_SENT");
+        state = STATE_OPTIONS_RCVD;
+        this.methods = parsed.headers.public.split(/[ ]*,[ ]*/);
+
+        sendDescribeReq();
+        state = STATE_DESCRIBE_SENT;
+
         break;
       case STATE_DESCRIBE_SENT:
         trace("RTSPClient: STATE_DESCRIBE_SENT");
-
         state = STATE_DESCRIBE_RCVD;
 
         if (!sdp.parse(body)) {

    private static var userAgent:String = "Slush 0.1";

    private static var STATE_INITIAL:uint       = 1<<0;
    private static var STATE_DESCRIBE_SENT:uint = 1<<1;
    private static var STATE_DESCRIBE_RCVD:uint = 1<<2;
    private static var STATE_SETUP:uint         = 1<<3;
    private static var STATE_PLAY_SENT:uint     = 1<<4;
    private static var STATE_PLAYING:uint       = 1<<5;
    private static var STATE_PAUSE_SENT:uint    = 1<<6;
    private static var STATE_PAUSED:uint        = 1<<7;
    private static var STATE_TEARDOWN_SENT:uint = 1<<8;
    private static var STATE_TEARDOWN_RCVD:uint = 1<<9;

    private var state:int = STATE_INITIAL;


        trace('Cannot start unless in initial state.');
        return false;
      }

      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;
      }

      try {
        sendPauseReq();
        state = STATE_PAUSE_SENT;
      } catch (err:Error) {
        trace(err.message);
        return false;
      }

      return true;
    }

