     /// :returns: Void
     public func createNode(node: Node, labels: Array<String>, completionBlock: TheoNodeRequestCompletionBlock?) -> Void {
 
-        let nodeSaveDispatchGroup: dispatch_group_t = dispatch_group_create()
         var createdNodeWithoutLabels: Node?
-
-        dispatch_group_enter(nodeSaveDispatchGroup)
-
-        self.createNode(node, completionBlock: {(node, error) in
-        
-            if let returnedNode: Node = node {
-                createdNodeWithoutLabels = returnedNode
-            }
-            
-            dispatch_group_leave(nodeSaveDispatchGroup)
+        let nodeSaveOperationQueue: NSOperationQueue = NSOperationQueue()
+        
+        nodeSaveOperationQueue.name = "com.theo.createnode.operationqueue"
+        nodeSaveOperationQueue.maxConcurrentOperationCount = 1
+        
+        let createNodeOperation: NSBlockOperation = NSBlockOperation({
+
+            self.createNode(node, completionBlock: {(node, error) in
+
+                NSOperationQueue.mainQueue().addOperationWithBlock({
+                    
+                    if let returnedNode: Node = node {
+                        createdNodeWithoutLabels = returnedNode
+                    }
+                })
+            })
         })
         
-        dispatch_group_notify(nodeSaveDispatchGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
-
+        let createNodeWithLabelsOperation: NSBlockOperation = NSBlockOperation({
+            
             if let nodeWithLabels: Node = createdNodeWithoutLabels {
-            
+                
                 let nodeID: String = nodeWithLabels.meta!.nodeID()
                 let nodeResource: String = self.baseURL + "/db/data/node/" + nodeID + "/labels"
                 

                nodeRequest.postResource(labels, forUpdate: false,
                    successBlock: {(data, response) in
                        
                        if (completionBlock != nil) {
                            completionBlock!(node: nil, error: nil)
                        }
                    },
                    errorBlock: {(error, response) in
                        
                        if (completionBlock != nil) {
                            completionBlock!(node: nil, error: error)
                        }
                    })
            } else {
                
                if (completionBlock != nil) {

                }
            }
        })
        
        createNodeWithLabelsOperation.addDependency(createNodeOperation)
        
        nodeSaveOperationQueue.addOperation(createNodeOperation)
        nodeSaveOperationQueue.addOperation(createNodeWithLabelsOperation)
    }
    
    /// Update a node for a given set of properties
