 
 		sendNextRequestTimer?.invalidate()
 		sendNextRequestTimer = nil
+
+		sendingInterruptedBecauseUnreachable = false
+		reachability?.stopNotifier()
 	}
 
 
 
 	internal struct Error: ErrorType {
 
+		internal var isCompletelyOffline: Bool
+		internal var isTemporary: Bool
 		internal var message: String
-		internal var retryable: Bool
 		internal var underlyingError: ErrorType?
 
 
-		internal init(message: String, retryable: Bool, underlyingError: ErrorType? = nil) {
+		internal init(message: String, isTemporary: Bool, isCompletelyOffline: Bool = false, underlyingError: ErrorType? = nil) {
+			self.isCompletelyOffline = isCompletelyOffline
+			self.isTemporary = isTemporary
 			self.message = message
-			self.retryable = retryable
 			self.underlyingError = underlyingError
 		}
 	}


	internal init(queueLimit: Int) {
		self.queueLimit = queueLimit
	}



					retryable = false
				}

				switch error.code {
				case NSURLErrorCallIsActive,
				     NSURLErrorDataNotAllowed,
				     NSURLErrorInternationalRoamingOff,
				     NSURLErrorNotConnectedToInternet:

					isCompletelyOffline = true

				default:
					isCompletelyOffline = false
				}

				completion(nil, Error(message: error.localizedDescription, isTemporary: retryable, isCompletelyOffline: isCompletelyOffline, underlyingError: error))
				return
			}

			guard let response = response as? NSHTTPURLResponse else {
				completion(nil, Error(message: "No Response", isTemporary: false))
				return
			}
			guard !(500 ... 599).contains(response.statusCode) else {
				completion(nil, Error(message: "HTTP \(response.statusCode)", isTemporary: true))
				return
			}
			guard (200 ... 299).contains(response.statusCode), let data = data else {
				completion(nil, Error(message: "HTTP \(response.statusCode)", isTemporary: false))
				return
			}

