             }
             
 
+            
+            if keyPath=="selectionIndexes" && self.usersArrayController == object as? NSArrayController {
+                if let users = self.usersArrayController?.selectedObjects as? [User] {
+                     if let selectedUser = self.selectedUsers{
+                        if selectedUser == users{
+                            return // No changes
+                        }
+                     }
+                    self.selectedUsers=users
+                }
+                return
+            }
+            
+
         }
 
     }
 
     // MARK:  Delete currently selected items
     
+    open func deleteSelectedLockers() {
+        // you should override this method if you want to cascade the deletion(s)
+        if let selected=self.selectedLockers{
+            for item in selected{
+                 self.lockers.removeObject(item, commit:true)
+            }
+        }
+    }
+        
+
+    open func deleteSelectedPushOperations() {
+        // you should override this method if you want to cascade the deletion(s)
+        if let selected=self.selectedPushOperations{
+            for item in selected{
+                 self.pushOperations.removeObject(item, commit:true)
+            }
+        }
+    }
+        
+
     open func deleteSelectedUsers() {
         // you should override this method if you want to cascade the deletion(s)
         if let selected=self.selectedUsers{
             for item in selected{
                  self.users.removeObject(item, commit:true)
-            }
-        }
-    }
-        
-
-    open func deleteSelectedLockers() {
-        // you should override this method if you want to cascade the deletion(s)
-        if let selected=self.selectedLockers{
-            for item in selected{
-                 self.lockers.removeObject(item, commit:true)
-            }
-        }
-    }
-        
-
-    open func deleteSelectedPushOperations() {
-        // you should override this method if you want to cascade the deletion(s)
-        if let selected=self.selectedPushOperations{
-            for item in selected{
-                 self.pushOperations.removeObject(item, commit:true)
             }
         }
     }

    // The initial instances are proxies
    // On document deserialization the collection are populated.

	open dynamic var users=UsersCollectionController(){
		willSet{
			users.document=self
		}
	}
	
	open dynamic var lockers=LockersCollectionController(){
		willSet{
			lockers.document=self

        if let keyPath = keyPath, let object = object {

                    
            if keyPath=="selectionIndexes" && self.lockersArrayController == object as? NSArrayController {
                if let lockers = self.lockersArrayController?.selectedObjects as? [Locker] {
                     if let selectedLocker = self.selectedLockers{
