anchor.diff:      _signal = new Completer<Null>();
     }
   
  -  bool _active = true;
  -  bool _temperatureSubscriptionActive = false;
  -  bool _statusSubscriptionActive = false;
  -
     void _startPollingTemperature(Sink<Temperature> sink) {
       assert(!_temperatureSubscriptionActive);
       _temperatureSubscriptionActive = true;
  
positive.code:     return command.result;
    }
  
    bool get _connectionRequired => _temperatureSubscriptionActive || _statusSubscriptionActive || _commands.isNotEmpty;
  
    Future<Null> _initialize() async {
      while (_active) {
  
negative.code:     List<String> fields = message.substring(5, message.length).split(',');
      if (fields.length != 10)
        throw 'Incorrect number of fields in status message from thermostat: $message';
      double temperatureValue;
      if (_temperatureSubscriptionActive || _reportSubscriptionActive) {
        temperatureValue = double.tryParse(fields[0]);
        if (_temperatureSubscriptionActive)
          temperature.add(temperatureValue != null ? new ThermostatTemperature.C(temperatureValue, station: _station, timestamp: timestamp) : null);
      }
      if (_statusSubscriptionActive) {
        ThermostatStatus statusValue;
        if (fields[9] == '1') {
          if (fields[8] == 'COOL') {
            statusValue = ThermostatStatus.cooling;
          } else if (fields[8] == 'HEAT') {
            statusValue = ThermostatStatus.heating;
          } else {
            throw 'Unknown thermostat mode "${fields[8]}" in status message: $message';
          }
        } else if (fields[9] == '0') {
          if (fields[3] == 'FAN ON') {
            statusValue = ThermostatStatus.fan;
          } else if (fields[3] == 'FAN AUTO') {
            statusValue = ThermostatStatus.idle;
          } else {
            throw 'Unknown thermostat fan mode "${fields[3]}" in status message: $message';
          }
        } else {
          throw 'Unknown thermostat stage "${fields[9]}" in status message: $message';
        }
        status.add(statusValue);
      }
      if (_reportSubscriptionActive) {
        ThermostatReportMode mode;
        switch (fields[2]) {
          case 'OFF': mode = ThermostatReportMode.off; break;
          case 'COOL': mode = ThermostatReportMode.cool; break;
          case 'HEAT': mode = ThermostatReportMode.heat; break;
          case 'AUTO': mode = ThermostatReportMode.auto; break;
          default: throw 'Unknown thermostat mode "${fields[2]}" in status message: $message';
        }
        ThermostatReportMode active;
        if (fields[9] == '0') {
          active = ThermostatReportMode.off;
        } else {
          switch (fields[8]) {
            case 'COOL': active = ThermostatReportMode.cool; break;
            case 'HEAT': active = ThermostatReportMode.heat; break;
            default: throw 'Unknown thermostat mode "${fields[8]}" in status message: $message';
          }
        }
        report.add(ThermostatReport(
          temperature: temperatureValue.round(),
          minPoint: double.tryParse(fields[6]).round(),
          maxPoint: double.tryParse(fields[7]).round(),
          mode: mode,
          active: active,
          fanActive: fields[3] == 'FAN ON',
          overrideEnabled: fields[4] == 'YES',
          recoveryEnabled: fields[5] == 'YES',
        ));
      }
    }
  
    Completer<Null> _signal = new Completer<Null>();
  