                     console.warn("_save('#{@_table}') error: #{err}")
                 else
                     @emit('saved', saved_objs)
-
-                if not err and not at_start.equals(@_value_local)
-                    # keep saving until table doesn't change *during* the save
-                    @_save(cb)
+                if err
+                    cb?(err)
+                    return
                 else
-                    cb?(err)
+                    if @_last_set != last_set
+                        # keep saving until table doesn't change *during* the save due to user set call
+                        @_save(cb)
+                    else
+                        cb?()
+
 
     ###
     Disabled --

        #    if Math.random() <= .5
        #        query = []
        #@_fix_if_no_update_soon() # -disabled -- instead use "checking changefeed ids".
        @_client.query
            query   : query
            options : [{set:true}]  # force it to be a set query

            cb?()
            return

        changed = @_changes()

        # Send our changes to the server.
