diff --git a/cmd/control_plane.go b/cmd/control_plane.go
index 89232eb..8267cd2 100644
--- a/cmd/control_plane.go
+++ b/cmd/control_plane.go
@@ -135,7 +135,7 @@ func (cp *controlPlane) Run(ctx context.Context, logger logr.Logger) error {
 	}
 
 	cacheLoggerInst := cacheLogger(logger.WithName("envoy-snapshot-cache"))
-	envoySnapshotCache := cachev3.NewSnapshotCache(true, cachev3.IDHash{}, cacheLoggerInst)
+	envoySnapshotCache := cachev3.NewSnapshotCache(false, cachev3.IDHash{}, cacheLoggerInst)
 
 	serverCert, err := cp.ensureControlPlaneTlsCert(ctx, bootstrapClient)
 	if err != nil {
diff --git a/internal/controller/storage_api_controller_test.go b/internal/controller/storage_api_controller_test.go
index a081e1e..12c1fa5 100644
--- a/internal/controller/storage_api_controller_test.go
+++ b/internal/controller/storage_api_controller_test.go
@@ -68,7 +68,7 @@ var _ = Describe("Storage Controller", func() {
 		})
 		It("should successfully reconcile the resource", func() {
 			By("Reconciling the created resource")
-			controllerReconciler := &StorageReconciler{
+			controllerReconciler := &StorageApiReconciler{
 				Client: k8sClient,
 				Scheme: k8sClient.Scheme(),
 			}
diff --git a/internal/controlplane/apigateway_controller.go b/internal/controlplane/apigateway_controller.go
index 9f2145b..d41af9a 100644
--- a/internal/controlplane/apigateway_controller.go
+++ b/internal/controlplane/apigateway_controller.go
@@ -21,7 +21,6 @@ import (
 	"fmt"
 	"strconv"
 	"strings"
-	"sync/atomic"
 	"time"
 
 	cachev3 "github.com/envoyproxy/go-control-plane/pkg/cache/v3"
@@ -45,7 +44,6 @@ import (
 
 // APIGatewayReconciler reconciles a APIGateway object
 type APIGatewayReconciler struct {
-	initialReconciliation atomic.Bool
 	client.Client
 	Scheme *runtime.Scheme
 	Cache  cachev3.SnapshotCache
diff --git a/internal/controlplane/auth_filters.go b/internal/controlplane/auth_filters.go
index e3d9b31..f669817 100644
--- a/internal/controlplane/auth_filters.go
+++ b/internal/controlplane/auth_filters.go
@@ -148,12 +148,6 @@ func RBACAllowAllConfig() *rbacv3.RBAC {
 }
 
 func RBACRequireAuthConfig() *rbacv3.RBAC {
-	/*
-		Identifier: &rbacv3cfg.Principal_SourcedMetadata{
-				SourcedMetadata: &rbacv3cfg.SourcedMetadata{
-					MetadataSource: rbacv3cfg.MetadataSource_DYNAMIC,
-					MetadataMatcher: &matcherv3.MetadataMatcher{
-	*/
 	return &rbacv3.RBAC{
 		Rules: &rbacv3cfg.RBAC{
 			Action: rbacv3cfg.RBAC_ALLOW,
@@ -167,48 +161,51 @@ func RBACRequireAuthConfig() *rbacv3.RBAC {
 							OrIds: &rbacv3cfg.Principal_Set{
 								Ids: []*rbacv3cfg.Principal{
 									{
-										Identifier: &rbacv3cfg.Principal_Metadata{
-											Metadata: &matcherv3.MetadataMatcher{
-												Filter: FilterNameJwtAuthn,
-												Path: []*matcherv3.MetadataMatcher_PathSegment{
-													{
-														Segment: &matcherv3.MetadataMatcher_PathSegment_Key{
-															Key: "jwt_payload",
+										Identifier: &rbacv3cfg.Principal_SourcedMetadata{
+											SourcedMetadata: &rbacv3cfg.SourcedMetadata{
+												MetadataSource: rbacv3cfg.MetadataSource_DYNAMIC,
+												MetadataMatcher: &matcherv3.MetadataMatcher{
+													Filter: FilterNameJwtAuthn,
+													Path: []*matcherv3.MetadataMatcher_PathSegment{
+														{
+															Segment: &matcherv3.MetadataMatcher_PathSegment_Key{
+																Key: "jwt_payload",
+															},
+														},
+														{
+															Segment: &matcherv3.MetadataMatcher_PathSegment_Key{
+																Key: "role",
+															},
 														},
 													},
-													{
-														Segment: &matcherv3.MetadataMatcher_PathSegment_Key{
-															Key: "role",
-														},
-													},
-												},
-												Value: &matcherv3.ValueMatcher{
-													MatchPattern: &matcherv3.ValueMatcher_OrMatch{
-														OrMatch: &matcherv3.OrMatcher{
-															ValueMatchers: []*matcherv3.ValueMatcher{
-																{
-																	MatchPattern: &matcherv3.ValueMatcher_StringMatch{
-																		StringMatch: &matcherv3.StringMatcher{
-																			MatchPattern: &matcherv3.StringMatcher_Exact{
-																				Exact: "anon",
+													Value: &matcherv3.ValueMatcher{
+														MatchPattern: &matcherv3.ValueMatcher_OrMatch{
+															OrMatch: &matcherv3.OrMatcher{
+																ValueMatchers: []*matcherv3.ValueMatcher{
+																	{
+																		MatchPattern: &matcherv3.ValueMatcher_StringMatch{
+																			StringMatch: &matcherv3.StringMatcher{
+																				MatchPattern: &matcherv3.StringMatcher_Exact{
+																					Exact: "anon",
+																				},
 																			},
 																		},
 																	},
-																},
-																{
-																	MatchPattern: &matcherv3.ValueMatcher_StringMatch{
-																		StringMatch: &matcherv3.StringMatcher{
-																			MatchPattern: &matcherv3.StringMatcher_Exact{
-																				Exact: "authenticated",
+																	{
+																		MatchPattern: &matcherv3.ValueMatcher_StringMatch{
+																			StringMatch: &matcherv3.StringMatcher{
+																				MatchPattern: &matcherv3.StringMatcher_Exact{
+																					Exact: "authenticated",
+																				},
 																			},
 																		},
 																	},
-																},
-																{
-																	MatchPattern: &matcherv3.ValueMatcher_StringMatch{
-																		StringMatch: &matcherv3.StringMatcher{
-																			MatchPattern: &matcherv3.StringMatcher_Exact{
-																				Exact: "admin",
+																	{
+																		MatchPattern: &matcherv3.ValueMatcher_StringMatch{
+																			StringMatch: &matcherv3.StringMatcher{
+																				MatchPattern: &matcherv3.StringMatcher_Exact{
+																					Exact: "admin",
+																				},
 																			},
 																		},
 																	},
diff --git a/internal/controlplane/snapshot.go b/internal/controlplane/snapshot.go
index 1133f68..f3eb4a4 100644
--- a/internal/controlplane/snapshot.go
+++ b/internal/controlplane/snapshot.go
@@ -156,7 +156,7 @@ func (s *EnvoyServices) snapshot(ctx context.Context, instance, version string)
 		},
 	}}
 
-	if studioListener := s.studioListener(); studioListener != nil {
+	if studioListener := s.studioListener(instance); studioListener != nil {
 		listeners = append(listeners, studioListener)
 	}
 
@@ -176,7 +176,7 @@ func (s *EnvoyServices) snapshot(ctx context.Context, instance, version string)
 		)...)
 
 	if oauth2Spec := s.Gateway.Spec.DashboardEndpoint.OAuth2(); oauth2Spec != nil {
-		if oauth2TokenEndpointCluster, err := s.oauth2TokenEndpointCluster(); err != nil {
+		if oauth2TokenEndpointCluster, err := s.oauth2TokenEndpointCluster(instance); err != nil {
 			return nil, nil, err
 		} else {
 			clusters = append(clusters, oauth2TokenEndpointCluster)
@@ -350,7 +350,7 @@ func (s *EnvoyServices) apiRouteConfiguration(instance string) *routev3.RouteCon
 	}
 }
 
-func (s *EnvoyServices) studioListener() *listenerv3.Listener {
+func (s *EnvoyServices) studioListener(instance string) *listenerv3.Listener {
 	if s.Studio == nil {
 		return nil
 	}
@@ -367,7 +367,7 @@ func (s *EnvoyServices) studioListener() *listenerv3.Listener {
 				Config: &oauth2v3.OAuth2Config{
 					TokenEndpoint: &corev3.HttpUri{
 						HttpUpstreamType: &corev3.HttpUri_Cluster{
-							Cluster: dashboardOAuth2ClusterName,
+							Cluster: fmt.Sprintf("%s@%s", dashboardOAuth2ClusterName, instance),
 						},
 						Uri:     s.Gateway.Spec.DashboardEndpoint.Auth.OAuth2.TokenEndpoint,
 						Timeout: durationpb.New(3 * time.Second),
@@ -493,7 +493,7 @@ func (s *EnvoyServices) studioRoute(instance string) *routev3.RouteConfiguration
 	}
 }
 
-func (s *EnvoyServices) oauth2TokenEndpointCluster() (*clusterv3.Cluster, error) {
+func (s *EnvoyServices) oauth2TokenEndpointCluster(instance string) (*clusterv3.Cluster, error) {
 	oauth2Spec := s.Gateway.Spec.DashboardEndpoint.OAuth2()
 	parsedTokenEndpoint, err := url.Parse(oauth2Spec.TokenEndpoint)
 	if err != nil {
@@ -523,7 +523,7 @@ func (s *EnvoyServices) oauth2TokenEndpointCluster() (*clusterv3.Cluster, error)
 	}
 
 	cluster := &clusterv3.Cluster{
-		Name:           dashboardOAuth2ClusterName,
+		Name:           fmt.Sprintf("%s@%s", dashboardOAuth2ClusterName, instance),
 		ConnectTimeout: durationpb.New(3 * time.Second),
 		ClusterDiscoveryType: &clusterv3.Cluster_Type{
 			Type: clusterv3.Cluster_LOGICAL_DNS,