             i = patches.length - 1
             while i > 0
                 if patches[i].is_first
+                    if i > 0
+                        winston.debug("some older patches are no longer needed -- deleting from DB")
+                    for p in patches.slice(0,i)
+                        @db.delete
+                            table : 'syncstrings'
+                            where :
+                                string_id : string_id
+                                timestamp : p.timestamp
                     patches = patches.slice(i)
                     break
                 i -= 1

                try
                    string.last_sync = diffsync.dmp.patch_apply(p.patch, string.last_sync)[0]
                catch e
                    winston.debug("syncstring database error applying a patch -- failed due to corruption (?) -- #{misc.to_json(p.patch)}")
                string.applied_patches[p.timestamp] = p
                if squash and p.timestamp <= squash_time and (i == patches.length-1 or patches[i+1].timestamp > squash_time)
                    @_squash_patches

                @db.update
                    table : 'syncstrings'
                    set   :
                        patch    : @patch_to_string(patch)
                        is_first : true
                    where :
                        string_id : opts.string_id
