diff --git a/lib/fed/conn.go b/lib/fed/conn.go
index 848a0bb91acd037656243973d0af622ec9dee770..892a219b686d75ff0b2efcd8337c6afbd2c4f7bd 100644
--- a/lib/fed/conn.go
+++ b/lib/fed/conn.go
@@ -2,6 +2,7 @@ package fed
 
 import (
 	"crypto/tls"
+	"net"
 
 	"gfx.cafe/gfx/pggat/lib/util/decorator"
 	"gfx.cafe/gfx/pggat/lib/util/strutil"
@@ -157,6 +158,11 @@ func (T *Conn) WriteByte(b byte) error {
 	return T.codec.WriteByte(b)
 }
 
+func (T *Conn) LocalAddr() net.Addr {
+	return T.codec.LocalAddr()
+
+}
+
 func (T *Conn) ReadByte() (byte, error) {
 	return T.codec.ReadByte()
 }
diff --git a/lib/gat/handlers/pool/dialer.go b/lib/gat/handlers/pool/dialer.go
index ba902c94dbfa1ed6197c599659d750ea41d40e65..1da5d9fea194640190cd085290e8c104ce083623 100644
--- a/lib/gat/handlers/pool/dialer.go
+++ b/lib/gat/handlers/pool/dialer.go
@@ -14,6 +14,7 @@ import (
 	"gfx.cafe/gfx/pggat/lib/bouncer"
 	"gfx.cafe/gfx/pggat/lib/bouncer/backends/v0"
 	"gfx.cafe/gfx/pggat/lib/fed"
+	"gfx.cafe/gfx/pggat/lib/fed/codecs/netconncodec"
 	"gfx.cafe/gfx/pggat/lib/gat"
 	"gfx.cafe/gfx/pggat/lib/util/strutil"
 )
@@ -65,7 +66,7 @@ func (T *Dialer) Dial() (*fed.Conn, error) {
 	if err != nil {
 		return nil, err
 	}
-	conn := fed.NewConn(c)
+	conn := fed.NewConn(netconncodec.NewCodec(c))
 	conn.User = T.Username
 	conn.Database = T.Database
 	err = backends.Accept(
@@ -89,7 +90,7 @@ func (T *Dialer) Cancel(key fed.BackendKey) {
 	if err != nil {
 		return
 	}
-	conn := fed.NewConn(c)
+	conn := fed.NewConn(netconncodec.NewCodec(c))
 	defer func() {
 		_ = conn.Close()
 	}()
diff --git a/lib/gat/listen.go b/lib/gat/listen.go
index 9a4e22b83b87c0574658f69baead2bb288856b1b..fb47fd97442a9143d5b824f64b6fe525dbbf495d 100644
--- a/lib/gat/listen.go
+++ b/lib/gat/listen.go
@@ -15,6 +15,7 @@ import (
 	"go.uber.org/zap"
 
 	"gfx.cafe/gfx/pggat/lib/fed"
+	"gfx.cafe/gfx/pggat/lib/fed/codecs/netconncodec"
 )
 
 type ListenerConfig struct {
@@ -40,7 +41,7 @@ func (T *Listener) accept() (*fed.Conn, error) {
 	if err != nil {
 		return nil, err
 	}
-	return fed.NewConn(raw), nil
+	return fed.NewConn(netconncodec.NewCodec(raw)), nil
 }
 
 func (T *Listener) Provision(ctx caddy.Context) error {
diff --git a/lib/gat/matchers/localaddress.go b/lib/gat/matchers/localaddress.go
index 920d2852733269c18e18f044df48528c5276e5b3..b89e6699ddc522908d261711ef1f53909e667a8e 100644
--- a/lib/gat/matchers/localaddress.go
+++ b/lib/gat/matchers/localaddress.go
@@ -48,7 +48,7 @@ func (T *LocalAddress) Provision(ctx caddy.Context) error {
 }
 
 func (T *LocalAddress) Matches(conn *fed.Conn) bool {
-	switch addr := conn.NetConn.LocalAddr().(type) {
+	switch addr := conn.LocalAddr().(type) {
 	case *net.TCPAddr:
 		expected, ok := T.addr.(*net.TCPAddr)
 		if !ok {
diff --git a/lib/gsql/pair.go b/lib/gsql/pair.go
index e6ceb79c563cc62fec49f976cb31b6ae70679526..10e9ed0cadf55a0de85b3c54beee7e81ba9ef2d4 100644
--- a/lib/gsql/pair.go
+++ b/lib/gsql/pair.go
@@ -2,14 +2,23 @@ package gsql
 
 import (
 	"gfx.cafe/gfx/pggat/lib/fed"
+	"gfx.cafe/gfx/pggat/lib/fed/codecs/netconncodec"
 	"gfx.cafe/gfx/pggat/lib/util/mio"
 )
 
 func NewPair() (*fed.Conn, *fed.Conn) {
 	conn := new(mio.Conn)
-	inward := fed.NewConn(mio.InwardConn{Conn: conn})
+	inward := fed.NewConn(
+		netconncodec.NewCodec(
+			mio.InwardConn{Conn: conn},
+		),
+	)
 	inward.Ready = true
-	outward := fed.NewConn(mio.OutwardConn{Conn: conn})
+	outward := fed.NewConn(
+		netconncodec.NewCodec(
+			mio.OutwardConn{Conn: conn},
+		),
+	)
 	outward.Ready = true
 
 	return inward, outward
diff --git a/lib/gsql/query_test.go b/lib/gsql/query_test.go
index 3839029d8ccc12b12a7d6e35c30d25220debe3a4..9b1d24b3bd087aed2e1be6f75b4b3ce4c487b072 100644
--- a/lib/gsql/query_test.go
+++ b/lib/gsql/query_test.go
@@ -11,6 +11,7 @@ import (
 	"gfx.cafe/gfx/pggat/lib/bouncer/backends/v0"
 	"gfx.cafe/gfx/pggat/lib/bouncer/bouncers/v2"
 	"gfx.cafe/gfx/pggat/lib/fed"
+	"gfx.cafe/gfx/pggat/lib/fed/codecs/netconncodec"
 	"gfx.cafe/gfx/pggat/lib/gsql"
 	"gfx.cafe/gfx/pggat/lib/util/flip"
 )
@@ -30,7 +31,7 @@ func TestQuery(t *testing.T) {
 		t.Error(err)
 		return
 	}
-	server := fed.NewConn(s)
+	server := fed.NewConn(netconncodec.NewCodec(s))
 	err = backends.Accept(
 		server,
 		"",