diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java
index 79d5c85..2e5b5d3 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/EventConsumerThread.java
@@ -21,7 +21,6 @@
 
 import org.apache.maven.surefire.api.event.Event;
 import org.apache.maven.surefire.api.fork.ForkNodeArguments;
-import org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento;
 import org.apache.maven.surefire.extensions.CloseableDaemonThread;
 import org.apache.maven.surefire.extensions.EventHandler;
 import org.apache.maven.surefire.extensions.util.CountdownCloseable;
@@ -67,10 +66,9 @@
               CountdownCloseable c = countdownCloseable;
               EventDecoder eventDecoder = decoder )
         {
-            Memento memento = eventDecoder.new Memento();
             do
             {
-                Event event = eventDecoder.decode( memento );
+                Event event = eventDecoder.decode();
                 if ( event != null && !disabled )
                 {
                     eventHandler.handleEvent( event );
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/surefire/stream/EventDecoder.java b/maven-surefire-common/src/main/java/org/apache/maven/surefire/stream/EventDecoder.java
index ea11889..fa61d49 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/surefire/stream/EventDecoder.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/surefire/stream/EventDecoder.java
@@ -140,6 +140,8 @@
 
     private final OutputStream debugSink;
 
+    private Memento memento;
+
     public EventDecoder( @Nonnull ReadableByteChannel channel,
                          @Nonnull ForkNodeArguments arguments )
     {
@@ -148,8 +150,15 @@
     }
 
     @Override
-    public Event decode( @Nonnull Memento memento ) throws IOException
+    public Event decode() throws IOException
     {
+        if ( memento == null )
+        {
+            // do not create memento in constructor because the constructor is called in another thread
+            // memento is the thread confinement object
+            memento = new Memento();
+        }
+
         try
         {
             ForkedProcessEventType eventType = readMessageType( memento );
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
index 6ddbb45..02b3d3a 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
@@ -89,7 +89,15 @@
         logger = arguments.getConsoleLogger();
     }
 
-    public abstract M decode( @Nonnull Memento memento ) throws MalformedChannelException, IOException;
+    /**
+     * Decoding and returns a message {@code M} and waiting, if necessary, for the next
+     * message received from the channel.
+     *
+     * @return message {@code M}, or null if could not decode a message due to a frame error
+     * @throws MalformedChannelException the channel error
+     * @throws IOException stream I/O exception
+     */
+    public abstract M decode() throws MalformedChannelException, IOException;
 
     @Nonnull
     protected abstract byte[] getEncodedMagicNumber();
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/MalformedChannelException.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/MalformedChannelException.java
index cf4468f..8944735 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/MalformedChannelException.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/MalformedChannelException.java
@@ -20,7 +20,7 @@
  */
 
 /**
- *
+ * No supported message type.
  */
 public class MalformedChannelException extends Exception
 {
diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoderTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoderTest.java
index 2ff06ea..2cec298 100644
--- a/surefire-api/src/test/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoderTest.java
+++ b/surefire-api/src/test/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoderTest.java
@@ -664,7 +664,7 @@
         }
 
         @Override
-        public Event decode( @Nonnull Memento memento ) throws MalformedChannelException
+        public Event decode() throws MalformedChannelException
         {
             throw new MalformedChannelException();
         }
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/CommandChannelDecoder.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/CommandChannelDecoder.java
index 85bda73..8b7a5d7 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/CommandChannelDecoder.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/CommandChannelDecoder.java
@@ -22,7 +22,6 @@
 import org.apache.maven.surefire.api.booter.Command;
 import org.apache.maven.surefire.api.booter.MasterProcessChannelDecoder;
 import org.apache.maven.surefire.api.fork.ForkNodeArguments;
-import org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento;
 import org.apache.maven.surefire.api.stream.MalformedChannelException;
 import org.apache.maven.surefire.booter.stream.CommandDecoder;
 
@@ -40,7 +39,6 @@
 public class CommandChannelDecoder implements MasterProcessChannelDecoder
 {
     private final CommandDecoder decoder;
-    private Memento memento;
 
     public CommandChannelDecoder( @Nonnull ReadableByteChannel channel,
                                   @Nonnull ForkNodeArguments arguments )
@@ -53,18 +51,11 @@
     @SuppressWarnings( "checkstyle:innerassignment" )
     public Command decode() throws IOException
     {
-        if ( memento == null )
-        {
-            // do not create memento in constructor because the constructor is called in another thread
-            // memento is the thread confinement object
-            memento = decoder.new Memento();
-        }
-
         do
         {
             try
             {
-                Command command = decoder.decode( memento );
+                Command command = decoder.decode();
                 if ( command != null )
                 {
                     return command;
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/stream/CommandDecoder.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/stream/CommandDecoder.java
index 4a7e257..9387f85 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/stream/CommandDecoder.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/stream/CommandDecoder.java
@@ -70,6 +70,7 @@
 
     private final ForkNodeArguments arguments;
     private final OutputStream debugSink;
+    private Memento memento;
 
     public CommandDecoder( @Nonnull ReadableByteChannel channel,
                            @Nonnull ForkNodeArguments arguments )
@@ -80,8 +81,15 @@
     }
 
     @Override
-    public Command decode( @Nonnull Memento memento ) throws IOException, MalformedChannelException
+    public Command decode() throws IOException, MalformedChannelException
     {
+        if ( memento == null )
+        {
+            // do not create memento in constructor because the constructor is called in another thread
+            // memento is the thread confinement object
+            memento = new Memento();
+        }
+
         try
         {
             MasterProcessCommand commandType = readMessageType( memento );
