 	}
 	
 	private func processImageQueue() {
-		
-		guard isReadyForRequest()  else { return }
-		
+
 		// process image
-		if !queuedRequests.isEmpty {
-			if let imageRequest = nextImageRequest() {
+		while !queuedRequests.isEmpty && isReadyForRequest() {
+			if let imageRequest = dequeueRequest() {
 				activeRequests.append(imageRequest)
 				// start image download
 				downloadImage(forRequest: imageRequest)

							// dispatch next request on main thread
							DispatchQueue.main.async(execute: {() -> Void in
								// remove queue item
								self.removeQueuedImageRequest(forURLString: imageRequest.URLString)
								imageRequest.progress = nil
								self.activeRequests.remove(at: self.activeRequests.index(of: imageRequest)!)
								if let imageData = imageData {

			queuedRequests.remove(at: index)
			queuedRequests.append(foundItem)
			DDLogVerbose("Requested image is already queued; increasing priority \(URLString)")
		} else if let foundItem = activeImageRequest(forURLString: URLString) {
			foundItem.responses.append(response)
			DDLogVerbose("Requested image is already downloading; adding response handler \(URLString)")
		} else {
			let request = ImageRequest()
			request.URLString = URLString
