diff --git a/src/orca/scripts/apps/soffice/script.py b/src/orca/scripts/apps/soffice/script.py
index aaf87a3..8a879c5 100644
--- a/src/orca/scripts/apps/soffice/script.py
+++ b/src/orca/scripts/apps/soffice/script.py
@@ -2027,6 +2027,9 @@ class Script(default.Script):
         if self.isStructuralNavigationCommand():
             return
 
+        if self.utilities.isDuplicateEvent(event):
+            return
+
         # If we are losing focus and we in:
         # 1/ a paragraph in an ooimpress slide presentation
         # 2/ a paragraph in an oowriter text document
diff --git a/src/orca/scripts/apps/soffice/script_utilities.py b/src/orca/scripts/apps/soffice/script_utilities.py
index 1d2da02..86309b9 100644
--- a/src/orca/scripts/apps/soffice/script_utilities.py
+++ b/src/orca/scripts/apps/soffice/script_utilities.py
@@ -89,6 +89,28 @@ class Utilities(script_utilities.Utilities):
 
         return readOnly
 
+    def isDuplicateEvent(self, event):
+        """Returns True if we believe this event is a duplicate which we
+        wish to ignore."""
+
+        if not event:
+            return False
+
+        if event.type.startswith("object:text-caret-moved"):
+            try:
+                obj, offset = \
+                    self._script.pointOfReference["lastCursorPosition"]
+            except:
+                return False
+            else:
+                # Doing an intentional equality check rather than calling
+                # isSameObject() because we'd rather double-present an
+                # object than not present it at all.
+                #
+                return obj == event.source and offset == event.detail1
+
+        return False
+
     def isSameObject(self, obj1, obj2):
         same = script_utilities.Utilities.isSameObject(self, obj1, obj2)
 
