diff --git a/lib/middleware/middlewares/eqp/server.go b/lib/middleware/middlewares/eqp/server.go
index 339f5a8d5ec04302d73cd18e69c7aaad28e3f3fb..9dc67d56c52020475714c1e05b30af97dbf45862 100644
--- a/lib/middleware/middlewares/eqp/server.go
+++ b/lib/middleware/middlewares/eqp/server.go
@@ -119,8 +119,9 @@ func (T *Server) bindPreparedStatement(
 		return err
 	}
 
-	buf := zap.MakeBuf(preparedStatement.raw)
-	err = ctx.Send(buf.Out())
+	old := T.buf.Swap(preparedStatement.raw)
+	err = ctx.Send(T.buf.Out())
+	T.buf.Swap(old)
 	if err != nil {
 		return err
 	}
@@ -148,8 +149,9 @@ func (T *Server) bindPortal(
 		return err
 	}
 
-	buf := zap.MakeBuf(portal.raw)
-	err = ctx.Send(buf.Out())
+	old := T.buf.Swap(portal.raw)
+	err = ctx.Send(T.buf.Out())
+	T.buf.Swap(old)
 	if err != nil {
 		return err
 	}
diff --git a/lib/zap/buf.go b/lib/zap/buf.go
index 4d02f4af8541d30dd4ca22e0a874597a1e040c62..38646535a58962a000703da9295b54c956bfca17 100644
--- a/lib/zap/buf.go
+++ b/lib/zap/buf.go
@@ -18,12 +18,6 @@ type Buf struct {
 	rev int
 }
 
-func MakeBuf(buf []byte) Buf {
-	return Buf{
-		buf: buf,
-	}
-}
-
 func (T *Buf) assertRev(rev int) {
 	// this check can be turned off when in production mode (for dev, this is helpful though)
 	if T.rev != rev {
@@ -127,6 +121,15 @@ func (T *Buf) Write() Out {
 	return T.Out()
 }
 
+func (T *Buf) Swap(buf []byte) []byte {
+	T.pos = 0
+	T.rev++
+
+	v := T.buf
+	T.buf = buf
+	return v
+}
+
 func (T *Buf) Done() {
 	T.rev++
 	T.pos = 0