 
      */
     public static func sync(keys: String...) {
+        if keys.count > 0 {
+            sync(keys)
+            return
+        }
 
         switch sharedInstance.dataStoreWithLatestData() {
 
         case .Local:
 
-            if keys.count > 0 {
-                sync(keys)
-            } else {
-                printGeneralSyncStatus(false, destination: .Remote)
+            printGeneralSyncStatus(false, destination: .Remote)
+            dispatch_sync(sharedInstance.zephyrQueue) {
                 sharedInstance.syncToCloud()
-                printGeneralSyncStatus(true, destination: .Remote)
-            }
+            }
+            printGeneralSyncStatus(true, destination: .Remote)
 
         case .Remote:
 
-            if keys.count > 0 {
-                sync(keys)
-            } else {
-                printGeneralSyncStatus(false, destination: .Local)
+            printGeneralSyncStatus(false, destination: .Local)
+            dispatch_sync(sharedInstance.zephyrQueue) {
                 sharedInstance.syncFromCloud()
-                printGeneralSyncStatus(true, destination: .Local)
-            }
+            }
+            printGeneralSyncStatus(true, destination: .Local)
 
         }
 

            }

            for key in monitoredKeys where cloudKeys.contains(key) {
                Zephyr.sync(key)
            }
        }
    }


    /**

     A queue used to serialize synchronization on monitored keys

     */
    private let zephyrQueue = dispatch_queue_create("com.zephyr.queue", DISPATCH_QUEUE_SERIAL);


    /**
