diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java
index <HASH>..<HASH> 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java
@@ -186,8 +186,14 @@ public class WebSocket08FrameEncoder extends MessageToMessageEncoder<WebSocketFr
                 }
                 out.add(buf);
             } else {
-                out.add(buf);
-                out.add(data.retain());
+                if (buf.writableBytes() >= data.readableBytes()) {
+                    // merge buffers as this is cheaper then a gathering write if the payload is small enough
+                    buf.writeBytes(data);
+                    out.add(buf);
+                } else {
+                    out.add(buf);
+                    out.add(data.retain());
+                }
             }
             release = false;
         } finally {
Optimize encoding of websocket frames by merge if possible