 			return
 		}
 
+		if let reachability = reachability {
+			guard reachability.isReachable() else {
+				if !sendingInterruptedBecauseUnreachable {
+					sendingInterruptedBecauseUnreachable = true
+
+					logDebug("Internet is unreachable. Pausing requests.")
+
+					do {
+						try reachability.startNotifier()
+					}
+					catch let error {
+						logError("Cannot listen for reachability events: \(error)")
+					}
+				}
+
+				return
+			}
+
+			sendingInterruptedBecauseUnreachable = false
+			reachability.stopNotifier()
+		}
+
 		let url = queue[0]
+
+		if url != currentRequest {
+			currentFailureCount = 0
+			currentRequest = url
+		}
 
 		logDebug("Sending: \(url)")
 

					retryable = false
				}

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

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



		pendingTask.cancel()

		self.currentRequest = nil
		self.currentFailureCount = 0
		self.pendingTask = nil
	}

