diff --git a/xos/synchronizer/event_steps/kubernetes_event.py b/xos/synchronizer/event_steps/kubernetes_event.py
index 9f02171..223247c 100644
--- a/xos/synchronizer/event_steps/kubernetes_event.py
+++ b/xos/synchronizer/event_steps/kubernetes_event.py
@@ -1,4 +1,3 @@
-
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -33,17 +32,43 @@
         super(KubernetesPodDetailsEventStep, self).__init__(*args, **kwargs)
 
     @staticmethod
-    def get_fabric_onos(service):
-        service = Service.objects.get(id=service.id)
+    def get_fabric_onos(fabric):
+        service = Service.objects.get(id=fabric.id)
         # get the onos_fabric service
-        fabric_onos = [s.leaf_model for s in service.provider_services if "onos" in s.name.lower()]
+        fabric_onos = service.provider_services[0].leaf_model
+        if not fabric_onos:
+            log.error("ONOS Service is not found in provider_services of Fabric %s" % service.name)
+            raise Exception('Configuration error. Fabric without ONOS is not possible.')
 
-        if len(fabric_onos) == 0:
-            raise Exception('Cannot find ONOS service in provider_services of Fabric')
+        return fabric_onos
 
-        return fabric_onos[0]
+    @staticmethod
+    def dirty_switch(fabric_switches=None):
+        switches = None
+        if fabric_switches:
+            switches = fabric_switches
+        else:
+            switches = Switch.objects.all()
+
+        for switch in switches:
+            log.info("Dirtying Switch", switch=switch)
+            switch.backend_code = 0
+            switch.backend_status = "resynchronize due to kubernetes event"
+            switch.save(update_fields=["updated", "backend_code", "backend_status"], always_update_timestamp=True)
+
+            for port in switch.ports.all():
+                log.info("Dirtying SwitchPort", port=port)
+                port.backend_code = 0
+                port.backend_status = "resynchronize due to kubernetes event"
+                port.save(
+                    update_fields=[
+                        "updated",
+                        "backend_code",
+                        "backend_status"],
+                    always_update_timestamp=True)
 
     def process_event(self, event):
+        log.info("processing event")
         value = json.loads(event.value)
 
         if (value.get("status") != "created"):
@@ -61,19 +86,9 @@
             if (onos_service.name.lower() != xos_service.lower()):
                 continue
 
-            for switch in Switch.objects.all():
-                log.info("Dirtying Switch", switch=switch)
-                switch.backend_code = 0
-                switch.backend_status = "resynchronize due to kubernetes event"
-                switch.save(update_fields=["updated", "backend_code", "backend_status"], always_update_timestamp=True)
-
-                for port in switch.ports.all():
-                    log.info("Dirtying SwitchPort", port=port)
-                    port.backend_code = 0
-                    port.backend_status = "resynchronize due to kubernetes event"
-                    port.save(
-                        update_fields=[
-                            "updated",
-                            "backend_code",
-                            "backend_status"],
-                        always_update_timestamp=True)
+            if(len(FabricService.objects.all()) == 1):
+                log.info("Dirtying all switches.")
+                KubernetesPodDetailsEventStep.dirty_switch()
+            else:
+                fabric_switches = fabric_service.switch.all()
+                KubernetesPodDetailsEventStep.dirty_switch(fabric_switches)
