             Logging.log("Completion: \(cursor) - \(error)")
             Logging.log("Have \(self.records.count) records")
             
-            self.handleResultWithError(error) {
-                self.perform(query, limit: limit, pullAll: pullAll, inDatabase: db)
-            }
+            let usedCursor = pullAll ? cursor : nil
+            
+            self.handleResult(withCursor: usedCursor, limit: limit, error: error, inDatabase: db, retryClosure: retryClosure)
         }
         
         database(db).addOperation(fetchOperation)
     }
-}
-
-private extension CloudRequest {
-    func continueWith(cursor: CKQueryCursor, inDatabase db: UsedDatabase) {
-        
-    }
-}
+}
                self.deleted.appendContentsOf(deleted)
            }

            self.handleResultWithError(error) {
                self.delete(record: record, inDatabase: db)
            }
        }

        }
    }
    
    private func handleResult(withCursor cursor: CKQueryCursor?, limit: Int? = nil, error: NSError?, inDatabase db: UsedDatabase, retryClosure: () -> ()) {
        let finalizer: () -> ()
        if let cursor = cursor {
            finalizer = {
                self.records.removeAll()
                self.deleted.removeAll()
                self.continueWith(cursor, limit: limit, inDatabase: db)
            }
        } else {
            finalizer = {
                self.finish()
            }
        }
        
        if let error = error, retryAfter = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {
