         for key in keys {
             if sharedInstance.monitoredKeys.contains(key) == true {
                 sharedInstance.monitoredKeys = sharedInstance.monitoredKeys.filter({$0 != key })
-                sharedInstance.unregisterObserver(key)
-            }
-
+
+                dispatch_sync(sharedInstance.zephyrQueue) {
+                    sharedInstance.unregisterObserver(key)
+                }
+            }
         }
     }
 


     */
    deinit {
        dispatch_sync(zephyrKeyQueue, {
            for key in self.registeredObservationKeys {
                NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: key)
            }

        case .Local:

            printGeneralSyncStatus(false, destination: .Remote)
            dispatch_sync(sharedInstance.zephyrQueue) {
                sharedInstance.syncSpecificKeys(keys, dataStore: .Local)
            }
            printGeneralSyncStatus(true, destination: .Remote)

        case .Remote:

            printGeneralSyncStatus(false, destination: .Local)
            dispatch_sync(sharedInstance.zephyrQueue) {
                sharedInstance.syncSpecificKeys(keys, dataStore: .Remote)
            }
            printGeneralSyncStatus(true, destination: .Local)

        }
