diff --git a/lib/gat/handlers/pool/pools/hybrid/pool.go b/lib/gat/handlers/pool/pools/hybrid/pool.go
index 705a48f286a1b17bcbeaf612ff36088a86cd8b03..6bf3aaf1eb2dbc3df533a6c51e38fa4af9bf98f0 100644
--- a/lib/gat/handlers/pool/pools/hybrid/pool.go
+++ b/lib/gat/handlers/pool/pools/hybrid/pool.go
@@ -310,6 +310,13 @@ func (T *Pool) serveRW(conn *fed.Conn) error {
 }
 
 func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
+	var sp *spool.Pool
+	if write {
+		sp = &T.primary
+	} else {
+		sp = &T.replica
+	}
+
 	conn.Middleware = append(
 		conn.Middleware,
 		unterminate.Unterminate,
@@ -322,13 +329,8 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
 	T.addClient(client)
 	defer T.removeClient(client)
 
-	if write {
-		T.primary.AddClient(client.ID)
-		defer T.primary.RemoveClient(client.ID)
-	} else {
-		T.replica.AddClient(client.ID)
-		defer T.replica.RemoveClient(client.ID)
-	}
+	sp.AddClient(client.ID)
+	defer sp.RemoveClient(client.ID)
 
 	var err, serverErr error
 
@@ -336,17 +338,9 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
 	defer func() {
 		if server != nil {
 			if serverErr != nil {
-				if write {
-					T.primary.RemoveServer(server)
-				} else {
-					T.replica.RemoveServer(server)
-				}
+				sp.RemoveServer(server)
 			} else {
-				if write {
-					T.primary.Release(server)
-				} else {
-					T.replica.Release(server)
-				}
+				sp.Release(server)
 			}
 			server = nil
 		}
@@ -355,11 +349,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
 	if !conn.Ready {
 		client.SetState(metrics.ConnStateAwaitingServer, nil, true)
 
-		if write {
-			server = T.primary.Acquire(client.ID)
-		} else {
-			server = T.replica.Acquire(client.ID)
-		}
+		server = sp.Acquire(client.ID)
 		if server == nil {
 			return pool.ErrFailedToAcquirePeer
 		}
@@ -382,11 +372,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
 
 	for {
 		if server != nil {
-			if write {
-				T.primary.Release(server)
-			} else {
-				T.replica.Release(server)
-			}
+			sp.Release(server)
 			server = nil
 		}
 		client.SetState(metrics.ConnStateIdle, nil, true)
@@ -399,11 +385,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error {
 
 		client.SetState(metrics.ConnStateAwaitingServer, nil, true)
 
-		if write {
-			server = T.primary.Acquire(client.ID)
-		} else {
-			server = T.replica.Acquire(client.ID)
-		}
+		server = sp.Acquire(client.ID)
 		if server == nil {
 			return pool.ErrFailedToAcquirePeer
 		}
diff --git a/lib/gat/handlers/pool/spool/pool.go b/lib/gat/handlers/pool/spool/pool.go
index 9783f050af53412cd0806b2d487f82429bb6befc..7589ae16ea073585b4a480993c909d517d9d82f6 100644
--- a/lib/gat/handlers/pool/spool/pool.go
+++ b/lib/gat/handlers/pool/spool/pool.go
@@ -89,6 +89,7 @@ func (T *Pool) removeServer(conn *fed.Conn) {
 	}
 	delete(T.serversByConn, conn)
 	delete(T.serversByID, server.ID)
+	T.pooler.DeleteServer(server.ID)
 }
 
 func (T *Pool) AddRecipe(name string, recipe *pool.Recipe) {
@@ -160,6 +161,7 @@ func (T *Pool) ScaleDown(now time.Time) time.Duration {
 			if T.chef.Ignite(s.Conn) {
 				delete(T.serversByID, s.ID)
 				delete(T.serversByConn, s.Conn)
+				T.pooler.DeleteServer(s.ID)
 			}
 		} else {
 			until := T.config.IdleTimeout - idle
@@ -291,12 +293,14 @@ func (T *Pool) Release(server *Server) {
 
 func (T *Pool) RemoveServer(server *Server) {
 	T.chef.Burn(server.Conn)
+	T.pooler.DeleteServer(server.ID)
 
 	T.mu.Lock()
 	defer T.mu.Unlock()
 
 	delete(T.serversByID, server.ID)
 	delete(T.serversByConn, server.Conn)
+	T.pooler.DeleteServer(server.ID)
 }
 
 func (T *Pool) Cancel(server *Server) {