diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java
index 8862ffc..0eedd7b 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java
@@ -659,19 +659,17 @@
                             case NODE_DELETED:
                             case NODE_UPDATED:
                             case NODE_REPLACED:
-//                                Filter filter = Filter.builder().build();
-//                                DataNode node = dynamicConfigService.readNode(FpcUtil.tenants, filter);
-//                                getModelObjects(node, null).forEach(
-//                                        modelObject -> {
-//                                            DefaultTenants tenants = (DefaultTenants) modelObject;
-//                                            tenants.tenant()
-//                                                    .parallelStream()
-//                                                    .forEach(tenant -> cacheManager.tenantCache.put(
-//                                                            tenant.tenantId(),
-//                                                            Optional.of((DefaultTenant) tenant))
-//                                                    );
-//                                        }
-//                                );
+//                                List<NodeKey> nodeKeys = event.subject().nodeKeys();
+//                                if (nodeKeys.size() >= 4) {
+//                                    NodeKey nodeKey = nodeKeys.get(3);
+//                                    if (nodeKey.schemaId().name().equals("dpns") && nodeKey instanceof ListKey) {
+//                                        Object dpnId = ((ListKey) nodeKey).keyLeafs().get(0).leafValue();
+//                                        cacheManager.dpnsCache.invalidate(FpcDpnId.fromString(dpnId.toString()));
+//                                    } else if (nodeKey.schemaId().name().equals("contexts") && nodeKey instanceof ListKey) {
+//                                        Object contextId = ((ListKey) nodeKey).keyLeafs().get(0).leafValue();
+//                                        cacheManager.contextsCache.invalidate(FpcContextId.fromString(contextId.toString()));
+//                                    }
+//                                }
                                 break;
                             default:
                                 log.warn(UNKNOWN_EVENT, event.type());
@@ -695,7 +693,17 @@
          * @return true if event is supported; false otherwise
          */
         private boolean isSupported(DynamicConfigEvent event) {
-            return true;
+            ResourceId rsId = event.subject();
+            List<NodeKey> storeKeys = rsId.nodeKeys();
+            List<NodeKey> regKeys = tenants.nodeKeys();
+            // store[0] = tenants, reg[0] = /
+            if (storeKeys != null) {
+                int storeSize = storeKeys.size();
+                if (storeSize >= 4) {
+                    return storeKeys.get(0).equals(regKeys.get(1));
+                }
+            }
+            return false;
         }
 
         @Override
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
index 6b9c86a..c691bea 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/CacheManager.java
@@ -59,6 +59,7 @@
                                         }
                                     }
                                 } catch (Exception e) {
+                                    // let store to populate and retry
                                     Thread.sleep(1000);
                                     return load(fpcContextId);
                                 }
@@ -86,6 +87,7 @@
                                         }
                                     }
                                 } catch (Exception e) {
+                                    // let store to populate and retry
                                     Thread.sleep(1000);
                                     return load(fpcDpnId);
                                 }
@@ -106,6 +108,4 @@
     public void addManager(TenantManager manager) {
         this.tenantManager = manager;
     }
-
-
 }
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/Converter.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/Converter.java
index 5c6b3ce..5e61d74 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/Converter.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/Converter.java
@@ -23,6 +23,9 @@
 
 public class Converter {
     private static final Logger log = LoggerFactory.getLogger(Converter.class);
+    public static Function<String, FpcIdentity> getFpcIdentity = (v) -> new FpcIdentity(new FpcIdentityUnion(v));
+    public static Function<String, ClientIdentifier> getClientIdentity = (v) -> new ClientIdentifier(getFpcIdentity.apply(v));
+
     /**
      * Short to Byte
      *
@@ -112,9 +115,6 @@
         return value;
     }
 
-    public static Function<String, FpcIdentity> getFpcIdentity = (v) -> new FpcIdentity(new FpcIdentityUnion(v));
-    public static Function<String, ClientIdentifier> getClientIdentity = (v) -> new ClientIdentifier(getFpcIdentity.apply(v));
-
     public static DefaultContexts convertContext(org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.payload.Contexts contexts) {
         DefaultContexts ctx = new DefaultContexts();
         FpcContextId fpcContextId = contexts.contextId();
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
index a0ff5f7..37f302a 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/util/FpcUtil.java
@@ -49,9 +49,11 @@
     public static final String UNKNOWN_EVENT = "FPC Agent listener: unknown event: {}";
     public static final String EVENT_NULL = "Event cannot be null";
     public static final String FPC_APP_ID = "org.onosproject.fpcagent";
-    protected static final Logger log = LoggerFactory.getLogger(FpcUtil.class);
+
+    private static final Logger log = LoggerFactory.getLogger(FpcUtil.class);
     private static final Map<String, FpcDpnId> uplinkDpnMap = Maps.newConcurrentMap();
     private static final Map<String, Short> nodeToTopicMap = Maps.newConcurrentMap();
+
     public static ModelConverter modelConverter = null;
     // Resource ID for Configure DPN RPC command
     public static ResourceId configureDpn;
@@ -65,15 +67,15 @@
     public static ResourceId registerClientResourceId;
     public static ResourceId deregisterClientResourceId;
 
-    public static FpcIdentity defaultIdentity = getFpcIdentity.apply("default");
+    public static final FpcIdentity defaultIdentity = getFpcIdentity.apply("default");
 
-    private static byte DPN_HELLO = 0b0000_0001;
-    private static byte DPN_BYE = 0b0000_0010;
-    private static byte DOWNLINK_DATA_NOTIFICATION = 0b0000_0101;
-    private static byte DPN_STATUS_INDICATION = 0b0000_1100;
-    private static byte DPN_OVERLOAD_INDICATION = 0b0000_0101;
-    private static byte DPN_REPLY = 0b0000_0100;
-    private static String DOWNLINK_DATA_NOTIFICATION_STRING = "Downlink-Data-Notification";
+    private static final byte DPN_HELLO = 0b0000_0001;
+    private static final byte DPN_BYE = 0b0000_0010;
+    private static final byte DOWNLINK_DATA_NOTIFICATION = 0b0000_0101;
+    private static final byte DPN_STATUS_INDICATION = 0b0000_1100;
+    private static final byte DPN_OVERLOAD_INDICATION = 0b0000_0101;
+    private static final byte DPN_REPLY = 0b0000_0100;
+    private static final String DOWNLINK_DATA_NOTIFICATION_STRING = "Downlink-Data-Notification";
 
     /**
      * Returns resource id from model converter.
@@ -102,12 +104,7 @@
 
         tenants = getResourceVal(tenantsId);
 
-        TenantKeys tenantKeys = new TenantKeys();
-        tenantKeys.tenantId(defaultIdentity);
-
-        ModelObjectId defaultTenantId = ModelObjectId.builder()
-                .addChild(DefaultTenants.class)
-                .addChild(DefaultTenant.class, tenantKeys)
+        ModelObjectId defaultTenantId = defaultTenantBuilder()
                 .build();
 
         defaultTenant = getResourceVal(defaultTenantId);
