diff --git a/aeron-driver/src/main/java/io/aeron/driver/IpcPublication.java b/aeron-driver/src/main/java/io/aeron/driver/IpcPublication.java
index <HASH>..<HASH> 100644
--- a/aeron-driver/src/main/java/io/aeron/driver/IpcPublication.java
+++ b/aeron-driver/src/main/java/io/aeron/driver/IpcPublication.java
@@ -320,6 +320,7 @@ public final class IpcPublication implements DriverManagedResource, Subscribable
         {
             tripLimit = consumerPosition;
             publisherLimit.setOrdered(consumerPosition);
+            cleanBufferTo(consumerPosition);
         }
 
         return workCount;
diff --git a/aeron-driver/src/main/java/io/aeron/driver/NetworkPublication.java b/aeron-driver/src/main/java/io/aeron/driver/NetworkPublication.java
index <HASH>..<HASH> 100644
--- a/aeron-driver/src/main/java/io/aeron/driver/NetworkPublication.java
+++ b/aeron-driver/src/main/java/io/aeron/driver/NetworkPublication.java
@@ -525,6 +525,7 @@ public class NetworkPublication
         else if (publisherLimit.get() > senderPosition)
         {
             publisherLimit.setOrdered(senderPosition);
+            cleanBufferTo(senderPosition - termBufferLength);
             workCount = 1;
         }
[Java] Ensure cleaning is up to date when consumers drop out and back in again on publications.