 
         return "";
     }
+
+    func cleanupSelfRetain() {
+        self.selfRetain = nil
+    }
 }
 
 /// An "rpc-style" request

        queue: DispatchQueue? = nil,
        completionHandler: @escaping ((RSerial.ValueType, URL)?, CallError<ESerial.ValueType>?) -> Void
    ) -> Self {
        request.setCompletionHandler(queue: queue, completionHandler: .downloadFileCompletionHandler({ response in
            if let error = response.error {
                completionHandler(
                    nil, self.handleResponseError(response.response, data: self.errorMessage, error: error)
                )
            } else {
                let headerFields: [AnyHashable : Any] = response.response!.allHeaderFields
                let result = caseInsensitiveLookup("Dropbox-Api-Result", dictionary: headerFields)!
                let resultData = result.data(using: .utf8, allowLossyConversion: false)
                let resultObject = self.responseSerializer.deserialize(SerializeUtil.parseJSON(resultData!))

                completionHandler((resultObject, self.urlPath!), nil)
            }
        }))
        return self
    }

        queue: DispatchQueue? = nil,
        completionHandler: @escaping (RSerial.ValueType?, CallError<ESerial.ValueType>?) -> Void
    ) -> Self {
        request.setCompletionHandler(queue: queue, completionHandler: .dataCompletionHandler({ [weak self] response in
            guard let strongSelf = self else {
                completionHandler(nil, .clientError(DropboxTransportClientError.objectAlreadyDeinit))
                return
            }
            if let error = response.error {
                completionHandler(nil, strongSelf.handleResponseError(response.response, data: response.data, error: error))
            } else {
                completionHandler(strongSelf.responseSerializer.deserialize(SerializeUtil.parseJSON(response.data!)), nil)
            }
            strongSelf.cleanupSelfRetain()
        }))
        return self
    }
