anchor.diff:    }) async {
       String canceled;
       Timer timeoutTimer = new Timer(timeout, () {
  -      abort('Timed out awaiting desired response to "$message".');
  +      abort('Timed out awaiting desired response to "$message"', timeout: true);
       });
       AbortWatcher handleAbort = (String message) { canceled = message; };
       _abortWatchers.add(handleAbort);
       try {
  -      while (canceled == null && await readRawValue(message, argument) != desiredResponse)
  +      while (canceled == null) {
  +        try {
  +          if (await readRawValue(message, argument) == desiredResponse)
  +            break;
  +        } on TelevisionTimeout {
  +          // retry
  +        } on TelevisionErrorResponse {
  +          // retry
  +        }
           await new Future<Null>.delayed(delay);
  +      }
       } finally {
         timeoutTimer.cancel();
         _abortWatchers.remove(handleAbort);
       }
       if (canceled != null)
  -      throw new TelevisionException(canceled, null, this);
  +      throw new TelevisionTimeout(canceled, null, this);
     }
   
     Future<Null> nonErrorResponse(String message, {
  
positive.code:   }) async {
      String canceled;
      Timer timeoutTimer = new Timer(timeout, () {
        abort('Timed out awaiting successful response to "$message".');
      });
      AbortWatcher handleAbort = (String message) { canceled = message; };
      _abortWatchers.add(handleAbort);
      try {
        while (canceled == null) {
          final TelevisionTransaction transaction = await sendMessage(message, argument);
          String response = await transaction.readLine();
          if (skipOk && response == 'OK')
            response = await transaction.readLine();
          transaction.close();
          if (response != 'ERR')
            break;
          await new Future<Null>.delayed(delay);
        }
      } finally {
  
negative.code:      case '1':
         return true;
      }
      throw new TelevisionErrorResponse('Unknown response to "DMSL" message', response, this);
    }
  
    Future<Null> setDemoOverlay(bool value) async {
  