 
 extension YapDatabase {
 
+    /**
+    Asynchronously reads all the items in the database for a particular Persistable Object in a new connection.
+    Example usage:
+
+        database.readAll() { (people: [Person] in }
+
+    :returns: An array of Object types.
+    */
+    public func asyncReadAll<Object where Object: Persistable>(queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Object]) -> Void) {
+        newConnection().asyncReadAll(queue: queue, completion: completion)
+    }
+
+    /**
+    Asynchronously reads all the items in the database for a particular Persistable Value in a new connection.
+    Example usage:
+
+        database.readAll() { (barcodes: [Barcode] in }
+
+    :returns: An array of Object types.
+    */
+    public func asyncReadAll<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Value]) -> Void) {
+        newConnection().asyncReadAll(queue: queue, completion: completion)
+    }
+}
+
+extension YapDatabase {
+
+    /**
+    Synchronously returns an array of Object type for the given keys, with an array of keys which don't have
+    corresponding objects in the database, using a new connection.
+
+        let (people: [Person], missing) = database.filterExisting(keys)
+
+    :param: keys An array of String instances
+    :returns: An ([Object], [String]) tuple.
+    */
     public func filterExisting<Object where Object: Persistable>(keys: [String]) -> (existing: [Object], missing: [String]) {
         return newConnection().filterExisting(keys)
     }
 
+    /**
+    Synchronously returns an array of Value type for the given keys, with an array of keys which don't have
+    corresponding values in the database, using a new connection.
+
+        let (barcode: [Barcode], missing) = database.filterExisting(keys)
+
+    :param: keys An array of String instances
+    :returns: An ([Value], [String]) tuple.
+    */
     public func filterExisting<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(keys: [String]) -> (existing: [Value], missing: [String]) {
         return newConnection().filterExisting(keys)
     }
 }
 
-
-// MARK: Async Methods
-
-extension YapDatabase {
-
-    public func asyncReadAtIndex<Object where Object: Persistable>(index: YapDB.Index, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Object?) -> Void) {
-        newConnection().asyncReadAtIndex(index, queue: queue, completion: completion)
-    }
-
-    public func asyncReadAtIndex<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(index: YapDB.Index, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Value?) -> Void) {
-        newConnection().asyncReadAtIndex(index, queue: queue, completion: completion)
-    }
-}
-
-extension YapDatabase {
-
-    public func asyncRead<Object where Object: Persistable>(key: String, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Object?) -> Void) {
-        newConnection().asyncRead(key, queue: queue, completion: completion)
-    }
-
-    public func asyncRead<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(key: String, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Value?) -> Void) {
-        newConnection().asyncRead(key, queue: queue, completion: completion)
-    }
-}
-
-extension YapDatabase {
-
-    public func asyncRead<Object where Object: Persistable>(keys: [String], queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Object]) -> Void) {
-        newConnection().asyncRead(keys, queue: queue, completion: completion)
-    }
-
-    public func asyncRead<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(keys: [String], queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Value]) -> Void) {
-        newConnection().asyncRead(keys, queue: queue, completion: completion)
-    }
-}
-
-extension YapDatabase {
-
-    public func asyncReadAll<Object where Object: Persistable>(queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Object]) -> Void) {
-        newConnection().asyncReadAll(queue: queue, completion: completion)
-    }
-
-    public func asyncReadAll<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Value]) -> Void) {
-        newConnection().asyncReadAll(queue: queue, completion: completion)
-    }
-}
-

    }

    /**
    Asynchronously reads all the items in the database for a particular Persistable Object.
    Example usage:

        connection.readAll() { (barcodes: [Barcode] in }

    :returns: An array of Object types.
    */
    public func asyncReadAll<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(queue: dispatch_queue_t = dispatch_get_main_queue(), completion: ([Value]) -> Void) {
        asyncRead({ $0.readAll() }, queue: queue, completion: completion)


extension YapDatabase {

    /**
    Asynchronously reads the Object sored by key in a new connection.

    :param: keys An array of String instances
    :param: queue A dispatch_queue_t, defaults to the main queue.
    :param: completion A closure which receives an optional Object
    */
    public func asyncRead<Object where Object: Persistable>(key: String, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Object?) -> Void) {
        newConnection().asyncRead(key, queue: queue, completion: completion)
    }

    /**
    Asynchronously reads the Value sored by key in a new connection.

    :param: keys An array of String instances
    :param: queue A dispatch_queue_t, defaults to the main queue.
    :param: completion A closure which receives an optional Value
    */
    public func asyncRead<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(key: String, queue: dispatch_queue_t = dispatch_get_main_queue(), completion: (Value?) -> Void) {
        newConnection().asyncRead(key, queue: queue, completion: completion)
    }
}

extension YapDatabase {

    /**
    Synchronously reads the Object instances sored by the keys in a new connection.

    :param: keys An array of String instances
    :returns: An array of Object instances
    */
    public func read<Object where Object: Persistable>(keys: [String]) -> [Object] {
        return newConnection().read(keys)
    }

    /**
    Synchronously reads the Value instances sored by the keys in a new connection.

    :param: keys An array of String instances
    :returns: An array of Value instances
    */
    public func read<Value where Value: Saveable, Value: Persistable, Value.ArchiverType.ValueType == Value>(keys: [String]) -> [Value] {
        return newConnection().read(keys)
    }
