diff --git a/src/Utils.js b/src/Utils.js
index 08beef873024be0bf25ce42a87880cfe7e6f984f..d2bbf2889a4472df98da39ec4897ad3412258781 100644
--- a/src/Utils.js
+++ b/src/Utils.js
@@ -115,13 +115,15 @@ module.exports = function (Y /* : any*/) {
         if (op.struct === 'Insert') {
           for (var i = this.waiting.length - 1; i >= 0; i--) {
             let w = this.waiting[i]
+            // TODO: do I handle split operations correctly here? Super unlikely, but yeah.. 
+            // Also: can this case happen? Can op be inserted in the middle of a larger op that is in $waiting? 
             if (w.struct === 'Insert') {
-              if (Y.utils.compareIds(op.left, w.id)) {
+              if (Y.utils.matchesId(w, op.left)) {
                 // include the effect of op in w
                 w.right = op.id
                 // exclude the effect of w in op
                 op.left = w.left
-              } else if (Y.utils.compareIds(op.right, w.id)) {
+              } else if (Y.utils.matchesId(w, op.right)) {
                 // similar..
                 w.left = op.id
                 op.right = w.right