     
     
     // Threading //
-    class func save(inBackground background: Bool, savingBlock: (context: NSManagedObjectContext) -> ()) {
+    class func save(inBackground background: Bool, savingBlock: (context: NSManagedObjectContext) -> (), completion: (success: Bool, error: NSError) -> ()) {
+        dispatch_async(SugarRecord.backgroundQueue(), {
+            self.save(true, savingBlock: savingBlock, completion: completion)
+        })
+    }
+    
+    class func save(synchronously: Bool, savingBlock: (context: NSManagedObjectContext) -> (), completion: (success: Bool, error: NSError) -> ()) {
         // Generating context
-        var privateContext: NSManagedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
-        privateContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
-        savingBlock(context: privateContext)
-        
-        
-    }
-    /*
-/* For all background saving operations. These calls will be sent to a different thread/queue.
-*/
-+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block;
-+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;
-
-/* For saving on the current thread as the caller, only with a seperate context. Useful when you're managing your own threads/queues and need a serial call to create or change data
-*/
-+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block;*/
+        var privateContext: NSManagedObjectContext = NSManagedObjectContext.newContextWithParentContext(NSManagedObjectContext.rootSavingContext()!)
+        
+        // Executing block
+        if synchronously {
+            privateContext.performBlockAndWait({ () -> Void in
+                if savingBlock != nil  {
+                    savingBlock(context: privateContext)
+                }
+                privateContext.save(true, savingParents: synchronously, completion: completion)
+            })
+        }
+        else {
+            privateContext.performBlock({ () -> Void in
+                if savingBlock != nil  {
+                    savingBlock(context: privateContext)
+                }
+            })
+        }
+    }
+
 }
 
 // MARK - Extension SugarRecord + Error Handling

        return count(inContext: context, filteredBy: filter) == 0
    }
    
    
    - (id) MR_minValueFor:(NSString *)property;
    - (id) MR_maxValueFor:(NSString *)property;
}



        defaultContext!.reset()
    }
    
    func delete(let objects: [NSManagedObject]) {
        for object in objects {
            self.deleteObject(object)
        }
    }
    
    ///// SAVING //////
    func save(synchronously: Bool, savingParents: Bool, completion: (success: Bool, error: NSError) -> ()) {
        
    }
    
    // Observers
