                     request.fetchLimit = limit
                 }
             }
-            return context.executeFetchRequest(request, error: error) as [NSManagedObject]?
+            return context.executeFetchRequest(request, error: error) as! [NSManagedObject]?
         } else {
             return nil
         }

    :param: saveFailure
    :param: waitUntilFinished
    */
    func saveWithBlock(#block: (() -> Void)?, saveSuccess: (() -> Void)?, saveFailure: ((error: NSError?) -> Void)?, waitUntilFinished:Bool = false) {
        self.saveWithBlockWaitSave(block: { (save) -> Void in
            block?()
            save()

    :param: block             Block to perform. Call save() to invoke save.
    :param: saveSuccess
    :param: saveFailure
    */
    func saveWithBlockWaitSave(#block: ((save: (() -> Void)) -> Void)?, saveSuccess: (() -> Void)?, saveFailure: ((error: NSError?) -> Void)?) {
        self.saveWithBlockWaitSave(block: block, saveSuccess: saveSuccess, saveFailure: saveFailure, waitUntilFinished: false)
    }
    
    /**
    Perform in background queue and save (Manually call timing of save.)
    
    :param: block             Block to perform. Call save() to invoke save.
    :param: saveSuccess
    :param: saveFailure
    :param: waitUntilFinished
    */
    func saveWithBlockWaitSave(#block: ((save: (() -> Void)) -> Void)?, saveSuccess: (() -> Void)?, saveFailure: ((error: NSError?) -> Void)?, waitUntilFinished:Bool) {
        if let block = block {
            let operation = DriverOperation { () -> Void in
                var localContext = self.driverOperationQueue.context
                block(save: { () -> Void in
                    var error: NSError? = nil
                    if localContext.obtainPermanentIDsForObjects(Array(localContext.insertedObjects), error: &error) {
                        if error != nil {
                            dispatch_sync(dispatch_get_main_queue(), { () -> Void in
                                saveFailure?(error: error)
