      Some storages require propagating these saves across the stack of contexts (e.g. CoreData)
      
      - parameter queue:     queue where the operation will be executed
-     - parameter write: true if the context has to persist the changes
      - parameter operation: operation to be executed
+     - parameter save:      closure to be called to persist the changes
      - parameter completed: closure called when the execution is completed
      */
-    func operation(queue: dispatch_queue_t, write: Bool, operation: (context: Context) -> Void, completed: (() -> Void)?)
+    func operation(queue: dispatch_queue_t, operation: (context: Context, save: Saver) -> Void, completed: (() -> Void)?)
 }
 
 

 *  Protocol that identifies a persistence storage
 */
public protocol Storage: CustomStringConvertible {
    
    /// Storage type
    var type: StorageType { get }


public extension Storage {
    
    func operation(operation: (context: Context, save: Saver) -> Void, completed: (() -> Void)?) {
        let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)
        self.operation(queue, operation: operation, completed: completed)
    }
    
}