anchor.diff:  
     Future _sendRequest(List<int> httpRequest, [String target]) {
       if (target == null) {
  -      AndroidDevice _device;
         return _fetchAndroidDevice().then((deviceResult) {
  -        _device = deviceResult;
  -        return _device.sendHttpRequest(httpRequest, 2424).timeout(
  +        return deviceResult.sendHttpRequest(httpRequest, 2424).timeout(
               new Duration(minutes: 5), onTimeout: () {
                 return new Future.error(
                     'Push timed out: Total time exceeds 5 minutes');
               });
  +      });
  +    } else {
  +      TcpClient _client;
  +      return TcpClient.createClient(target, 2424).then((TcpClient client) {
  +        _client = client;
  +        _client.write(httpRequest);
  +        return _client.stream.timeout(new Duration(minutes: 1)).first;
         }).whenComplete(() {
  -        if (_device != null) _device.dispose();
  -      });
  -    } else {
  -      return TcpClient.createClient(target, 2424).then((TcpClient client) {
  -        client.write(httpRequest);
  -        return client.stream.timeout(new Duration(minutes: 1)).first;
  -      }).whenComplete(() {
  -        if (client != null) {
  -          client.dispose();
  +        if (_client != null) {
  +          _client.dispose();
           }
         });
       }
  
positive.code:     }
  
      return doOpen(0).then((_) {
        return device.connect(new SystemIdentity()).catchError((e) {
          device.dispose();
          throw e;
        });
      }).then((_) => device);
    }
  
    Future _pushToAdbServer(AdbClientTcp client, ProgressMonitor monitor) {
  
negative.code: 
    // Safe to call multiple times. It will open the device if it has not been opened yet.
    Future<AndroidDevice> _fetchAndroidDevice() {
      if (_device != null) return new Future.value(_device);
  
      _device = new AndroidDevice(_prefs);
  
      Future doOpen(int index) {
        if (_knownDevices.length == 0) {
  