         name: 'Item in set saved'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '4', lastMessageReceivedTimestamp: 4, subject: 'hello')]
-          type: 'persist'
-        newResultSet:[
-          new Thread(accountId: 'a', id: '4', lastMessageReceivedTimestamp: 4, subject: 'hello')
-          new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 3),
-          new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
-          new Thread(accountId: 'a', id: '1', lastMessageReceivedTimestamp: 1),
+          objects: [new Thread(accountId: 'a', serverId: 's-4', clientId: '4', lastMessageReceivedTimestamp: 4, subject: 'hello')]
+          type: 'persist'
+        newResultSet:[
+          new Thread(accountId: 'a', serverId: 's-4', clientId: '4', lastMessageReceivedTimestamp: 4, subject: 'hello')
+          new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 3),
+          new Thread(accountId: 'a', clientId: '2', lastMessageReceivedTimestamp: 2),
+          new Thread(accountId: 'a', clientId: '1', lastMessageReceivedTimestamp: 1),
         ]
         refetchRequired: false
       },{
         name: 'Item in set saved, sort order changed (within range only)'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 1.5)]
-          type: 'persist'
-        newResultSet:[
-          new Thread(accountId: 'a', id: '4', lastMessageReceivedTimestamp: 4),
-          new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
-          new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 1.5),
-          new Thread(accountId: 'a', id: '1', lastMessageReceivedTimestamp: 1),
+          objects: [new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 1.5)]
+          type: 'persist'
+        newResultSet:[
+          new Thread(accountId: 'a', clientId: '4', lastMessageReceivedTimestamp: 4),
+          new Thread(accountId: 'a', clientId: '2', lastMessageReceivedTimestamp: 2),
+          new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 1.5),
+          new Thread(accountId: 'a', clientId: '1', lastMessageReceivedTimestamp: 1),
         ]
         refetchRequired: false
       },{
         name: 'Item in set saved, sort order changed and sorted to edge of set (impacting last)'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 6)]
+          objects: [new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 6)]
           type: 'persist'
         refetchRequired: true
       },{
         name: 'Item in set saved, sort order changed and sorted to edge of set (impacting first)'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: -1)]
+          objects: [new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: -1)]
           type: 'persist'
         refetchRequired: true
       },{
         name: 'Item in set saved, no longer matches query clauses'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'b', id: '4', lastMessageReceivedTimestamp: 4)]
-          type: 'persist'
-        newResultSet: [
-          new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 3),
-          new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
-          new Thread(accountId: 'a', id: '1', lastMessageReceivedTimestamp: 1),
+          objects: [new Thread(accountId: 'b', clientId: '4', lastMessageReceivedTimestamp: 4)]
+          type: 'persist'
+        newResultSet: [
+          new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 3),
+          new Thread(accountId: 'a', clientId: '2', lastMessageReceivedTimestamp: 2),
+          new Thread(accountId: 'a', clientId: '1', lastMessageReceivedTimestamp: 1),
         ]
         refetchRequired: true
       },{
         name: 'Item in set deleted'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '4')]
+          objects: [new Thread(accountId: 'a', clientId: '4')]
           type: 'unpersist'
         newResultSet: [
-          new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 3),
-          new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
-          new Thread(accountId: 'a', id: '1', lastMessageReceivedTimestamp: 1),
+          new Thread(accountId: 'a', clientId: '3', lastMessageReceivedTimestamp: 3),
+          new Thread(accountId: 'a', clientId: '2', lastMessageReceivedTimestamp: 2),
+          new Thread(accountId: 'a', clientId: '1', lastMessageReceivedTimestamp: 1),
         ]
         refetchRequired: true
       },{
         name: 'Item not in set deleted'
         change:
           objectClass: Thread.name
-          objects: [new Thread(accountId: 'a', id: '5')]
+          objects: [new Thread(accountId: 'a', clientId: '5')]
           type: 'unpersist'
         newResultSet: 'unchanged'
         refetchRequired: false

                          .limit(4)
                          .offset(2)
      lastResultSet: [
        new Thread(accountId: 'a', id: '4', lastMessageReceivedTimestamp: 4)
        new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 3),
        new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
        new Thread(accountId: 'a', id: '1', lastMessageReceivedTimestamp: 1),
      ]
      tests: [{
        name: 'Item saved which belongs in the set'
        change:
          objectClass: Thread.name
          objects: [new Thread(accountId: 'a', id: '5', lastMessageReceivedTimestamp: 3.5)]
          type: 'persist'
        newResultSet:[
          new Thread(accountId: 'a', id: '4', lastMessageReceivedTimestamp: 4),
          new Thread(accountId: 'a', id: '5', lastMessageReceivedTimestamp: 3.5),
          new Thread(accountId: 'a', id: '3', lastMessageReceivedTimestamp: 3),
          new Thread(accountId: 'a', id: '2', lastMessageReceivedTimestamp: 2),
        ]
        refetchRequired: false
      },{
        name: 'Item saved which does not match query clauses'
        change:
          objectClass: Thread.name
          objects: [new Thread(accountId: 'b', id: '5', lastMessageReceivedTimestamp: 5)]
          type: 'persist'
        newResultSet: 'unchanged'
        refetchRequired: false

        name: 'Item saved which does not lie in the range after sorting'
        change:
          objectClass: Thread.name
          objects: [new Thread(accountId: 'b', clientId: '5', lastMessageReceivedTimestamp: -2)]
          type: 'persist'
        newResultSet: 'unchanged'
        refetchRequired: false
