diff --git a/lib/gat/modes/pgbouncer/config.go b/lib/gat/modes/pgbouncer/config.go
index dfd7eca99255920568b928a83fb218f74ef6a4e5..d33887251411cbcc84e2179cc6328552a775f870 100644
--- a/lib/gat/modes/pgbouncer/config.go
+++ b/lib/gat/modes/pgbouncer/config.go
@@ -15,6 +15,7 @@ import (
 	"pggat2/lib/bouncer/frontends/v0"
 	"pggat2/lib/gat/pool"
 	"pggat2/lib/gat/pool/pools/session"
+	"pggat2/lib/gat/pool/pools/transaction"
 
 	"pggat2/lib/auth/credentials"
 	"pggat2/lib/gat"
@@ -329,8 +330,7 @@ func (T *Config) ListenAndServe() error {
 				if T.PgBouncer.ServerResetQueryAlways == 0 {
 					poolOptions.ServerResetQuery = ""
 				}
-				panic("transaction mode not implemented yet")
-				// TODO(garet)
+				p = transaction.NewPool(poolOptions)
 			default:
 				return errors.New("unsupported pool mode")
 			}
diff --git a/lib/gat/modes/zalando/config.go b/lib/gat/modes/zalando/config.go
index 1a2a2739130ade5dd289c162db928760bfa653c7..bca45eb93b84ff9a534c9c7e5353f04c3fb64036 100644
--- a/lib/gat/modes/zalando/config.go
+++ b/lib/gat/modes/zalando/config.go
@@ -13,6 +13,7 @@ import (
 	"pggat2/lib/bouncer/backends/v0"
 	"pggat2/lib/bouncer/frontends/v0"
 	"pggat2/lib/gat/pool/pools/session"
+	"pggat2/lib/gat/pool/pools/transaction"
 
 	"pggat2/lib/auth/credentials"
 	"pggat2/lib/gat"
@@ -55,8 +56,7 @@ func (T *Config) ListenAndServe() error {
 
 	var p *pool.Pool
 	if T.PoolerMode == "transaction" {
-		panic("transaction mode not implemented yet")
-		// TODO(garet) p = transaction.NewPool(pool.Options{})
+		p = transaction.NewPool(pool.Options{})
 	} else {
 		p = session.NewPool(pool.Options{})
 	}
diff --git a/lib/gat/pool/pools/transaction/pool.go b/lib/gat/pool/pools/transaction/pool.go
new file mode 100644
index 0000000000000000000000000000000000000000..78a0ae528b314c528a14fb9ecc92d5a86961a0fd
--- /dev/null
+++ b/lib/gat/pool/pools/transaction/pool.go
@@ -0,0 +1,10 @@
+package transaction
+
+import "pggat2/lib/gat/pool"
+
+func NewPool(options pool.Options) *pool.Pool {
+	// TODO(garet) options.Pooler = new(Pooler)
+	options.ParameterStatusSync = pool.ParameterStatusSyncDynamic
+	options.ExtendedQuerySync = true
+	return pool.NewPool(options)
+}