         }
         super.addOperation(op)
     }
+    
+    /// Current executing operation. nil if none is executing.
+    var currentExecutingOperation: DriverOperation? {
+        for operation in self.operations as [DriverOperation] {
+            if operation.executing {
+                return operation
+            }
+        }
+        return nil
+    }
 }
 
 /**
-*  Operation to use with DriverOperationQueue
+*  Operation to use with DriverOperation
 */
 class DriverOperation: NSBlockOperation {
-    
+
+    /// Managed Object Context associated to this Operation
+    let context: NSManagedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
+    
+    /**
+    Initialize with parent Managed Object Context. It will be the parent of the context which will be associated to this Operation.
+    
+    :param: parentContext The parent of the context which will be associated to this Operation.
+    
+    :returns:
+    */
+    convenience init(parentContext: NSManagedObjectContext, block: ((localContext: NSManagedObjectContext) -> Void)) {
+        
+        self.init()
+        
+        let context = self.context
+        context.parentContext = parentContext
+        context.mergePolicy = NSOverwriteMergePolicy
+        
+        self.addExecutionBlock({ [weak self] () -> Void in
+            
+            block(localContext: context)
+            return
+        })
+    }
 }

            if queue == NSOperationQueue.mainQueue() {
                return self.coreDataStack.defaultManagedObjectContext
            } else if queue.isKindOfClass(DriverOperationQueue) {
                return self.driverOperationQueue.context
            }
        }
        

            return queue
        }
        
        let queue = DriverOperationQueue()
        queue.maxConcurrentOperationCount = Static.maxConcurrentOperationCount
        Static.driverOperationQueue = queue
        return queue
    }
    
