diff --git a/src/types/YText.js b/src/types/YText.js
index 27665ca7..bca13d00 100644
--- a/src/types/YText.js
+++ b/src/types/YText.js
@@ -388,7 +388,7 @@ const deleteText = (transaction, left, right, currentAttributes, length) => {
 /**
  * Event that describes the changes on a YText type.
  */
-class YTextEvent extends YEvent {
+export class YTextEvent extends YEvent {
   /**
    * @param {YText} ytext
    * @param {Transaction} transaction
@@ -475,11 +475,13 @@ class YTextEvent extends YEvent {
           switch (item.constructor) {
             case ItemEmbed:
               if (this.adds(item)) {
-                addOp()
-                action = 'insert'
-                // @ts-ignore item is ItemFormat
-                insert = item.embed
-                addOp()
+                if (!this.deletes(item)) {
+                  addOp()
+                  action = 'insert'
+                  // @ts-ignore item is ItemFormat
+                  insert = item.embed
+                  addOp()
+                }
               } else if (this.deletes(item)) {
                 if (action !== 'delete') {
                   addOp()
@@ -496,12 +498,14 @@ class YTextEvent extends YEvent {
               break
             case ItemString:
               if (this.adds(item)) {
-                if (action !== 'insert') {
-                  addOp()
-                  action = 'insert'
+                if (!this.deletes(item)) {
+                  if (action !== 'insert') {
+                    addOp()
+                    action = 'insert'
+                  }
+                  // @ts-ignore
+                  insert += item.string
                 }
-                // @ts-ignore
-                insert += item.string
               } else if (this.deletes(item)) {
                 if (action !== 'delete') {
                   addOp()
@@ -518,23 +522,25 @@ class YTextEvent extends YEvent {
               break
             case ItemFormat:
               if (this.adds(item)) {
-                // @ts-ignore item is ItemFormat
-                const curVal = currentAttributes.get(item.key) || null
-                // @ts-ignore item is ItemFormat
-                if (curVal !== item.value) {
-                  if (action === 'retain') {
-                    addOp()
-                  }
+                if (!this.deletes(item)) {
                   // @ts-ignore item is ItemFormat
-                  if (item.value === (oldAttributes.get(item.key) || null)) {
+                  const curVal = currentAttributes.get(item.key) || null
+                  // @ts-ignore item is ItemFormat
+                  if (curVal !== item.value) {
+                    if (action === 'retain') {
+                      addOp()
+                    }
                     // @ts-ignore item is ItemFormat
-                    delete attributes[item.key]
+                    if (item.value === (oldAttributes.get(item.key) || null)) {
+                      // @ts-ignore item is ItemFormat
+                      delete attributes[item.key]
+                    } else {
+                      // @ts-ignore item is ItemFormat
+                      attributes[item.key] = item.value
+                    }
                   } else {
-                    // @ts-ignore item is ItemFormat
-                    attributes[item.key] = item.value
+                    item.delete(transaction)
                   }
-                } else {
-                  item.delete(transaction)
                 }
               } else if (this.deletes(item)) {
                 // @ts-ignore item is ItemFormat
diff --git a/tests/testHelper.js b/tests/testHelper.js
index 41fbc07b..bf83e5b1 100644
--- a/tests/testHelper.js
+++ b/tests/testHelper.js
@@ -360,7 +360,7 @@ export const compareDS = (ds1, ds2) => {
 /**
  * @template T
  * @param {t.TestCase} tc
- * @param {Array<function(TestYInstance,prng.PRNG,T):void>} mods
+ * @param {Array<function(Y.Doc,prng.PRNG,T):void>} mods
  * @param {number} iterations
  * @param {InitTestObjectCallback<T>} [initTestObject]
  */
diff --git a/tests/y-text.tests.js b/tests/y-text.tests.js
index 4e86b6d8..30bb2109 100644
--- a/tests/y-text.tests.js
+++ b/tests/y-text.tests.js
@@ -27,6 +27,13 @@ export const testBasicInsertAndDelete = tc => {
   text0.delete(1, 1)
   t.assert(text0.toString() === 'b', 'Basic delete works (position 1)')
   t.compare(delta, [{ retain: 1 }, { delete: 1 }])
+
+  users[0].transact(() => {
+    text0.insert(0, '1')
+    text0.delete(0, 1)
+  })
+  t.compare(delta, [])
+
   compare(users)
 }