diff --git a/lib/gat/handlers/discovery/discoverer.go b/lib/gat/handlers/discovery/discoverer.go
index 6ef7581783e1776fe3fd5f32c493d0aaa32b72f7..6fb8373387ae7640390735ecca3a28ba55312d54 100644
--- a/lib/gat/handlers/discovery/discoverer.go
+++ b/lib/gat/handlers/discovery/discoverer.go
@@ -1,11 +1,10 @@
 package discovery
 
-// Discoverer looks up and returns the servers. It must implement either Clusters or Added, Updated, and Removed.
-// Both can be implemented for extra robustness.
+// Discoverer looks up and returns the servers. It must implement Clusters. Optionally, it can implement Added
+// and Removed for faster updating. For updates, just send to Added.
 type Discoverer interface {
 	Clusters() ([]Cluster, error)
 
 	Added() <-chan Cluster
-	Updated() <-chan Cluster
 	Removed() <-chan string
 }
diff --git a/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go b/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go
index 8a31dfe07f446a8a392561e8c4460d5dbe8f4270..bcafe2c4286f1a7ecfb6dca60fc0d05449c593f1 100644
--- a/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go
+++ b/lib/gat/handlers/discovery/discoverers/digitalocean/discoverer.go
@@ -100,10 +100,6 @@ func (T *Discoverer) Added() <-chan discovery.Cluster {
 	return nil
 }
 
-func (T *Discoverer) Updated() <-chan discovery.Cluster {
-	return nil
-}
-
 func (T *Discoverer) Removed() <-chan string {
 	return nil
 }
diff --git a/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go b/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go
index 7ea6dc0d72229712b87799a50d843366ad372305..6bb9351b023cd1c14533778c68fe9c1a575b239d 100644
--- a/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go
+++ b/lib/gat/handlers/discovery/discoverers/google_cloud_sql/discoverer.go
@@ -208,10 +208,6 @@ func (T *Discoverer) Added() <-chan discovery.Cluster {
 	return nil
 }
 
-func (T *Discoverer) Updated() <-chan discovery.Cluster {
-	return nil
-}
-
 func (T *Discoverer) Removed() <-chan string {
 	return nil
 }
diff --git a/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go b/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go
index 75a617e92de3c78f69ac777d3ede7210f3b855b5..62f547c46a6cdb20ff6cf5995499188b96c84b3f 100644
--- a/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go
+++ b/lib/gat/handlers/discovery/discoverers/zalando_operator/discoverer.go
@@ -36,7 +36,6 @@ type Discoverer struct {
 	k8s k8sutil.KubernetesClient
 
 	added   chan discovery.Cluster
-	updated chan discovery.Cluster
 	removed chan string
 
 	done chan struct{}
@@ -107,7 +106,6 @@ func (T *Discoverer) Provision(ctx caddy.Context) error {
 	)
 
 	T.added = make(chan discovery.Cluster)
-	T.updated = make(chan discovery.Cluster)
 	T.removed = make(chan string)
 
 	_, err = T.informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
@@ -131,7 +129,7 @@ func (T *Discoverer) Provision(ctx caddy.Context) error {
 			if err != nil {
 				return
 			}
-			T.updated <- cluster
+			T.added <- cluster
 		},
 		DeleteFunc: func(obj interface{}) {
 			psql, ok := obj.(*acidv1.Postgresql)
@@ -207,17 +205,27 @@ func (T *Discoverer) postgresqlToCluster(cluster acidv1.Postgresql) (discovery.C
 }
 
 func (T *Discoverer) Clusters() ([]discovery.Cluster, error) {
-	return nil, nil
+	clusters, err := T.k8s.Postgresqls(T.Namespace).List(context.Background(), metav1.ListOptions{})
+	if err != nil {
+		return nil, err
+	}
+
+	res := make([]discovery.Cluster, 0, len(clusters.Items))
+	for _, cluster := range clusters.Items {
+		r, err := T.postgresqlToCluster(cluster)
+		if err != nil {
+			return nil, err
+		}
+		res = append(res, r)
+	}
+
+	return res, nil
 }
 
 func (T *Discoverer) Added() <-chan discovery.Cluster {
 	return T.added
 }
 
-func (T *Discoverer) Updated() <-chan discovery.Cluster {
-	return T.updated
-}
-
 func (T *Discoverer) Removed() <-chan string {
 	return T.removed
 }
diff --git a/lib/gat/handlers/discovery/module.go b/lib/gat/handlers/discovery/module.go
index d84ced436c99cd1d76fa4317ee44ee6d683944f1..a4cd104da1eb311b0147d9aaf28a9a9b84f2deb7 100644
--- a/lib/gat/handlers/discovery/module.go
+++ b/lib/gat/handlers/discovery/module.go
@@ -125,6 +125,10 @@ func (T *Module) creds(user User) (primary, replica auth.Credentials) {
 }
 
 func (T *Module) added(cluster Cluster) {
+	if prev, ok := T.clusters[cluster.ID]; ok {
+		T.updated(prev, cluster)
+		return
+	}
 	if T.clusters == nil {
 		T.clusters = make(map[string]Cluster)
 	}
@@ -475,8 +479,6 @@ func (T *Module) discoverLoop() {
 			T.added(cluster)
 		case id := <-T.discoverer.Removed():
 			T.removed(id)
-		case next := <-T.discoverer.Updated():
-			T.updated(T.clusters[next.ID], next)
 		case <-reconcile:
 			err := T.reconcile()
 			if err != nil {