     Request type, as it defines what will be fetched out of the database. The Fetch
     instance should be used by injecting it into a FetchConfiguration.
     */
-    public enum Fetch: YapDatabaseViewRegistrar {
+    public enum Fetch: YapDatabaseExtensionRegistrar {
 
         case View(YapDB.View)
         case Filter(YapDB.Filter)
         case Search(YapDB.Search)
+        case Index(YapDB.SecondaryIndex)
 
         public var name: String {
             switch self {
             case let .View(view):       return view.name
             case let .Filter(filter):   return filter.name
             case let .Search(search):   return search.name
-            }
-        }
-
-        var registrar: YapDatabaseViewRegistrar {
+            case let .Index(index):     return index.name
+            }
+        }
+
+        var registrar: YapDatabaseExtensionRegistrar {
             switch self {
             case let .View(view):       return view
             case let .Filter(filter):   return filter
             case let .Search(search):   return search
+            case let .Index(index):     return index
             }
         }
 

    In this case, the parent is a YapDB.Fetch type. This
    allows for searching of other filters, and even searching inside search results.
    */
    public class Search: BaseView, YapDatabaseViewProducer, YapDatabaseViewRegistrar {

        /**
        An enum to make creating YapDatabaseFullTextSearchHandler easier.


extension YapDB {

    public class BaseExtension {
        let name: String
        let version: String
        let collections: Set<String>?
        let persistent: Bool

        init(name n: String, version v: String = "1.0", persistent p: Bool = true, collections c: [String]? = .None) {
            name = n
            version = v
            persistent = p
            collections = c.map { Set($0) }
        }

        /**
        Utility function which can check if the extension is already registed in YapDatabase.

        :param: database A YapDatabase instance
        :returns: A Bool
        */
        public func isRegisteredInDatabase(database: YapDatabase) -> Bool {
            return (database.registeredExtension(name) as? YapDatabaseView) != .None
        }
    }

    /**
    The base class for other YapDatabaseView wrapper types.
    */
    public class BaseView: BaseExtension {

        var options: YapDatabaseViewOptions {
            get {
