anchor.diff:      final completer = new Completer();
       File file = new File(path);
   
  -    Future<GoogleDriveClient.File> upload(String path, String driveId) {
  -      final completer = new Completer();
  -      file.readAsBytes().then((List<int> content) {
  -        drive_update(driveId, content).then((GoogleDriveClient.File updatedFile) {
  -          completer.complete(updatedFile);
  -        });
  -      });
  -      return completer.future;
  -    }
  -
  -    file.exists().then((bool exists) {
  +    file.exists()
  +    .then((bool exists) {
         if (!exists) {
  -        PinLogger.instance.warning('[PinGoogleDrive] uploadFile: Target file does not exist: ${path}');
  -        completer.complete(null);
  +        throw new Exception('[PinGoogleDrive] uploadFile: Target file does not exist: ${path}');
         } else {
           if (driveId == null) {
             // need to create file first, then update it
  -          drive_insert(path, parents: parents).then((GoogleDriveClient.File newFile) {
  -            upload(path, newFile.id).then((GoogleDriveClient.File uploadedFile) {
  -              completer.complete(uploadedFile);
  -            });
  -          });
  +          return drive_insert(path, parents: parents);
           } else {
             // file already exists, update it
  -          upload(path, driveId).then((GoogleDriveClient.File uploadedFile) {
  -            completer.complete(uploadedFile);
  -          });
  +          return new Future.value(null);
           }
         }
  +    })
  +    .then((GoogleDriveClient.File newFile) {
  +      if (newFile != null) {
  +        // means last step is insert new file
  +        driveId = newFile.id;
  +      }
  +      return file.readAsBytes();
  +    })
  +    .then((List<int> content) => drive_update(driveId, content))
  +    .then((GoogleDriveClient.File uploadedFile) => completer.complete(uploadedFile))
  +    .catchError((e, trace) {
  +      PinUtility.handleError(e, trace);
  +      completer.completeError(e, trace);
       });
   
       return completer.future;
  
positive.code:       } else {
          // still has next page, retrieve it
          drive_list(maxResults: maxResults, pageToken: response.nextPageToken, queries: queries)
            .then((nextResponse) => listPageOfFiles(nextResponse));
        }
      }
  
      drive_list(maxResults: maxResults, queries: queries)
        .then((GoogleDriveClient.FileList response) => listPageOfFiles(response));
  
      return completer.future;
    }
  
negative.code:     File originalFile = new File(path);
      originalFile.exists().then((bool exists) {
        if (!exists) {
          try {
            throw new Exception('[PinGoogleDrive] drive_insert: Target file does not exist: ${path}');
          } catch (e, trace) {
            PinUtility.handleError(e, trace);
            completer.completeError(e, trace);
          }
        } else {
          var metadata = {
              "title": LibPath.basename(originalFile.path),
  