     ///   - path: The relative path for the API call. Appended to the baseURL.
     ///   - parameters: a JSON object, to be sent as the HTTP body data.
     ///   - headerFields: A [String: String] dictionary mapping HTTP header field names to values. Defaults to nil.
-    ///   - timeoutInterval: How many seconds before the request times out. Defaults to 60.0
-    ///   - allowsCellular: a Bool indicating if this request should be allowed to run over cellular network or WLAN only.
-    ///   - completion: The completion block, called with a NetworkResult once the request completes, always on main queue.
-    open func put(_ path: String, parameters: RequestParameter? = nil, headerFields: [String: String]? = nil, timeoutInterval: TimeInterval = 5.0, allowsCellular: Bool = true, completion: @escaping ((NetworkResult) -> Void)) {
+    ///   - timeoutInterval: How many seconds before the request times out. Defaults to 15.0
+    ///   - allowsCellular: a Bool indicating if this request should be allowed to run over cellular network or WLAN only.
+    ///   - completion: The completion block, called with a NetworkResult once the request completes, always on main queue.
+    open func put(_ path: String, parameters: RequestParameter? = nil, headerFields: [String: String]? = nil, timeoutInterval: TimeInterval = 15.0, allowsCellular: Bool = true, completion: @escaping ((NetworkResult) -> Void)) {
         self.execute(verb: .put, path: path, parameters: parameters, headerFields: headerFields, timeoutInterval: timeoutInterval, allowsCellular: allowsCellular, completion: completion)
     }
 

                switch result {
                case .success(let image, let response):
                    // Handle non-2xx status as error.
                    if response.statusCode < 200 || response.statusCode > 299 {
                        let errorResult = NetworkImageResult(image, response, TeapotError.invalidResponseStatus)
                        completion(errorResult)

    ///   - path: The relative path for the API call.
    ///   - parameters: a JSON object, to be sent as the HTTP body data.
    ///   - headerFields: A [String: String] dictionary mapping HTTP header field names to values. Defaults to nil.
    ///   - timeoutInterval: How many seconds before the request times out. Defaults to 15.0. See URLRequest doc for more.
    ///   - allowsCellular: a Bool indicating if this request should be allowed to run over cellular network or WLAN only.
    /// - Returns: URLRequest
    func request(verb: Verb, path: String? = nil, parameters: RequestParameter? = nil, headerFields: [String: String]? = nil, timeoutInterval: TimeInterval = 15.0, allowsCellular: Bool = true) throws -> URLRequest {
        guard var baseComponents = URLComponents(url: self.baseURL, resolvingAgainstBaseURL: true) else { throw TeapotError.invalidRequestPath }

        if let path = path, let pathURL = URL(string: path) {
