diff --git a/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java b/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
index 089aeff..f993550 100755
--- a/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
+++ b/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
@@ -28,17 +28,17 @@
 /**
  * Utilities to work on the ResourceId.
  */
-
+//FIXME add javadocs
 public final class ResourceIdParser {
 
     public static final String ROOT = "root";
     public static final String NM_SEP = "#";
     public static final String VAL_SEP = "@";
     public static final String KEY_SEP = "$";
-    public static final String EL_SEP = ".";
+    public static final String EL_SEP = "|";
     public static final String VAL_CHK = "\\@";
     public static final String KEY_CHK = "\\$";
-
+    public static final String NM_CHK = "\\#";
 
 
     private ResourceIdParser() {
@@ -100,7 +100,6 @@
         return (path + EL_SEP + key);
     }
 
-    //DONE
     public static String appendKeyLeaf(String path, KeyLeaf key) {
         StringBuilder bldr = new StringBuilder();
         bldr.append(key.leafSchema().name());
@@ -187,7 +186,6 @@
         bldr.append(key.schemaId().name());
         bldr.append(NM_SEP);
         bldr.append(key.schemaId().namespace());
-        bldr.append(NM_SEP);
         Iterator<KeyLeaf> iter = key.keyLeafs().iterator();
         KeyLeaf next;
         while (iter.hasNext()) {
@@ -218,14 +216,16 @@
                         name.substring(name.indexOf(NM_SEP) + 1, name.indexOf(VAL_SEP)),
                         name.substring(name.indexOf(VAL_SEP) + 1));
             } else if (name.contains(KEY_SEP)) {
-                resBldr.addBranchPointSchema(name.substring(0, name.indexOf(NM_SEP)),
-                        name.substring(name.indexOf(NM_SEP) + 1, name.indexOf(KEY_SEP)));
-                String[] keys = name.split(KEY_SEP);
+                String[] keys = name.split(KEY_CHK);
+                String[] nm = keys[0].split(NM_CHK);
+                resBldr.addBranchPointSchema(nm[0], nm[1]);
                 for (int i = 1; i < keys.length; i++) {
                     String key = keys[i];
-                    resBldr.addKeyLeaf(key.substring(0, key.indexOf(NM_SEP)),
-                            key.substring(key.indexOf(NM_SEP) + 1, key.lastIndexOf(NM_SEP)),
-                            key.substring(name.lastIndexOf(NM_SEP) + 1));
+                    String[] el = keys[i].split(NM_CHK);
+                    if (el.length != 3) {
+                        throw new FailedException("Malformed event subject, cannot parse");
+                    }
+                    resBldr.addKeyLeaf(el[0], el[1], el[2]);
                 }
             } else {
                 resBldr.addBranchPointSchema(name.substring(0, name.indexOf(NM_SEP)),
diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
index 11dce6b..e4fcb0e 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
@@ -249,7 +249,7 @@
                 //String tempPath = ResourceIdParser.appendKeyLeaf(spath, keyLeaf);
                 //LeafNode lfnd = readLeaf(tempPath);
                 superBldr.addKeyLeaf(keyLeaf.leafSchema().name(),
-                        keyLeaf.leafSchema().namespace(), keyLeaf.leafValue());
+                        keyLeaf.leafSchema().namespace(), String.valueOf(keyLeaf.leafValue()));
             }
             readInner(superBldr, spath);
             retVal = superBldr.build();
@@ -273,7 +273,7 @@
             throw new FailedException("Inner node cannot have empty children map");
         }
         entries.forEach((k, v) -> {
-            String[] names = k.split(ResourceIdParser.NM_SEP);
+            String[] names = k.split(ResourceIdParser.NM_CHK);
             String name = names[0];
             String nmSpc = ResourceIdParser.getNamespace(names[1]);
             String keyVal = ResourceIdParser.getKeyVal(names[1]);
@@ -303,7 +303,7 @@
                 for (int i = 1; i < keys.length; i++) {
                     //String curKey = ResourceIdParser.appendKeyLeaf(tempPath, keys[i]);
                     //LeafNode lfnd = readLeaf(curKey);
-                    String[] keydata = keys[i].split(ResourceIdParser.NM_SEP);
+                    String[] keydata = keys[i].split(ResourceIdParser.NM_CHK);
                     tempBldr.addKeyLeaf(keydata[0], keydata[1], keydata[2]);
                 }
                 readInner(tempBldr, tempPath);
diff --git a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfActiveComponent.java b/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfActiveComponent.java
index 287f871..ac7735e 100644
--- a/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfActiveComponent.java
+++ b/apps/netconf/client/src/main/java/org/onosproject/netconf/client/impl/NetconfActiveComponent.java
@@ -34,6 +34,7 @@
 import org.onosproject.netconf.client.NetconfTranslator.OperationType;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.LeafNode;
+import org.onosproject.yang.model.ListKey;
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.runtime.DefaultResourceData;
 import org.slf4j.Logger;
@@ -51,7 +52,7 @@
     private static final Logger log = LoggerFactory.getLogger(NetconfActiveComponent.class);
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DynamicConfigService cfgService;
-    public static final String DEVNMSPACE = "namespace1";
+    public static final String DEVNMSPACE = "ne-l3vpn-api";
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetconfTranslator netconfTranslator;
@@ -64,6 +65,8 @@
 
     private ResourceId resId = new ResourceId.Builder()
             .addBranchPointSchema("device", DEVNMSPACE)
+            .addBranchPointSchema("device", DEVNMSPACE)
+            .addKeyLeaf("deviceid", DEVNMSPACE, "netconf:172.16.5.11:22")
             .build();
 
     @Activate
@@ -171,6 +174,7 @@
      * @param node the node associated with the event
      * @return the deviceId of the effected device
      */
+    @Beta
     public DeviceId getDeviceId(DataNode node) {
         String[] temp;
         String ip, port;
@@ -181,6 +185,14 @@
             }
             ip = temp[1];
             port = temp[2];
+        } else if (node.type() == DataNode.Type.MULTI_INSTANCE_NODE) {
+            ListKey key = (ListKey) node.key();
+            temp = key.keyLeafs().get(0).leafValAsString().split("\\:");
+            if (temp.length != 3) {
+                throw new RuntimeException(new NetconfException("Invalid device id form, cannot apply"));
+            }
+            ip = temp[1];
+            port = temp[2];
         } else {
             throw new RuntimeException(new NetconfException("Invalid device id type, cannot apply"));
         }
