diff --git a/cmd/cgat/main.go b/cmd/cgat/main.go
index e59ced2da7280e532f69337319f0999a7835e6e9..4bb7c0968441b8b0568dd51f3c385e62e1140265 100644
--- a/cmd/cgat/main.go
+++ b/cmd/cgat/main.go
@@ -30,7 +30,7 @@ func main() {
 		Address:        "localhost:5432",
 		User:           "postgres",
 		Password:       "password",
-		MinConnections: 5,
+		MinConnections: 0,
 		MaxConnections: 5,
 	})
 
diff --git a/lib/bouncer/frontends/v0/accept.go b/lib/bouncer/frontends/v0/accept.go
index 5caf09b7e03d194370204653f815997f67b7d28c..8ad4bc4c8b673f987b0e4830c48e6147699a1718 100644
--- a/lib/bouncer/frontends/v0/accept.go
+++ b/lib/bouncer/frontends/v0/accept.go
@@ -259,7 +259,7 @@ func accept(client zap.ReadWriter, getPassword func(user, database string) (stri
 		err = perror.New(
 			perror.FATAL,
 			perror.InvalidPassword,
-			"User not found",
+			"User or database not found",
 		)
 		return
 	}
diff --git a/lib/gat/pools/session/pool.go b/lib/gat/pools/session/pool.go
index 1301891c52338aa5d74f76e2fae772201c25f736..f138736911d35e5c8dc649f49d4fe899921a845c 100644
--- a/lib/gat/pools/session/pool.go
+++ b/lib/gat/pools/session/pool.go
@@ -58,6 +58,8 @@ func (T *Pool) Serve(client zap.ReadWriter) {
 			_ = client.Close()
 			if serverErr == nil {
 				T.release(server)
+			} else {
+				_ = server.Close()
 			}
 			break
 		}
@@ -86,7 +88,7 @@ func (T *Pool) AddRecipe(name string, recipe gat.Recipe) {
 }
 
 func (T *Pool) RemoveRecipe(name string) {
-	// TODO implement me
+	// TODO(garet) implement me
 	panic("implement me")
 }
 
diff --git a/lib/gat/pools/transaction/conn.go b/lib/gat/pools/transaction/conn.go
index 836d7b299b83183c8f10c5fac45ba2bd2a29bec3..d29430a919c93fcb3fb3f78d7808c4fe95c1159a 100644
--- a/lib/gat/pools/transaction/conn.go
+++ b/lib/gat/pools/transaction/conn.go
@@ -18,10 +18,14 @@ func (T Conn) Do(_ rob.Constraints, work any) {
 	job := work.(Work)
 	job.ps.SetServer(T.ps)
 	T.eqp.SetClient(job.eqp)
-	_, backendError := bouncers.Bounce(job.rw, T.rw)
-	if backendError != nil {
-		// TODO(garet) remove from pool
-		panic(backendError)
+	clientErr, serverErr := bouncers.Bounce(job.rw, T.rw)
+	if clientErr != nil || serverErr != nil {
+		_ = job.rw.Close()
+		if serverErr != nil {
+			_ = T.rw.Close()
+			// TODO(garet) drop conn from pool
+			panic(serverErr)
+		}
 	}
 	return
 }