fixed topic search
diff --git a/apps/fpcagent/fpcagent.json b/apps/fpcagent/fpcagent.json
index 5b820df..a54290a 100644
--- a/apps/fpcagent/fpcagent.json
+++ b/apps/fpcagent/fpcagent.json
@@ -2,23 +2,9 @@
   "apps": {
     "org.onosproject.fpcagent": {
       "fpcagent": {
-        "monitor-threads": 4,
-        "scheduled-monitors-poolsize": 4,
-        "dpn-listener-uri": "tcp://127.0.0.1:5569",
-        "dpn-listener-id": 1,
-        "dpn-client-uri": "tcp://127.0.0.1:5559",
+        "dpn-subscriber-uri": "tcp://*:5560",
+        "dpn-publisher-uri": "tcp://*:5559",
         "dpn-client-threads": 5,
-        "metricsupdate-ms": 10000,
-        "mobilityupdate-ms": 30000,
-        "activation-threads": 5,
-        "target-read-limit": 10,
-        "http-notifier-clients": 3,
-        "zmq-nbi-server-poolsize": 1,
-        "zmq-nbi-server-uri": "tcp://127.0.0.1:5570",
-        "zmq-nbi-inproc-uri": "inproc://backend",
-        "zmq-nbi-handler-poolsize": 10,
-        "http-nio2-nb-poolsize": 80,
-        "http-nio2-nb-port": 9292,
         "node-id": "node0",
         "network-id": "network1",
         "zmq-broadcast-all": "1",
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcManager.java
index 1896cc4..9b4b915 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcManager.java
@@ -36,7 +36,6 @@
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.configure.DefaultConfigureOutput;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.configuredpn.DefaultConfigureDpnInput;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.configuredpn.DefaultConfigureDpnOutput;
-import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.opheader.OpTypeEnum;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.opinput.opbody.CreateOrUpdate;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.opinput.opbody.DeleteOrQuery;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.payload.Contexts;
@@ -132,7 +131,7 @@
         fpcConfig.getConfig().ifPresent(
                 helper -> {
                     ZMQSBSubscriberManager.createInstance(
-                            helper.dpnListenerUri(),
+                            helper.dpnSubscriberUri(),
                             helper.zmqBroadcastAll(),
                             helper.zmqBroadcastControllers(),
                             helper.zmqBroadcastDpns(),
@@ -141,7 +140,7 @@
                     );
 
                     ZMQSBPublisherManager.createInstance(
-                            helper.dpnClientUri(),
+                            helper.dpnPublisherUri(),
                             helper.dpnClientThreads()
                     );
 
@@ -197,23 +196,18 @@
                 DefaultConfigureInput input = (DefaultConfigureInput) modelObject;
                 switch (input.opType()) {
                     case CREATE:
+                        configureOutput = tenantService.configureCreate(
+                                (CreateOrUpdate) input.opBody(),
+                                input.clientId(),
+                                input.opId()
+                        );
+                        break;
                     case UPDATE:
-                        if (input.opBody() instanceof CreateOrUpdate) {
-                            CreateOrUpdate createOrUpdate = (CreateOrUpdate) input.opBody();
-                            if (input.opType().equals(OpTypeEnum.CREATE)) {
-                                configureOutput = tenantService.configureCreate(
-                                        createOrUpdate,
-                                        input.clientId(),
-                                        input.opId()
-                                );
-                            } else {
-                                configureOutput = tenantService.configureUpdate(
-                                        createOrUpdate,
-                                        input.clientId(),
-                                        input.opId()
-                                );
-                            }
-                        }
+                        configureOutput = tenantService.configureUpdate(
+                                (CreateOrUpdate) input.opBody(),
+                                input.clientId(),
+                                input.opId()
+                        );
                         break;
                     case QUERY:
                         break;
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 f197bdb..6acf2f8 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/TenantManager.java
@@ -197,10 +197,10 @@
                 }
 
                 for (Dpns dpn : context.dpns()) {
-                    if (!getDefaultTenant().map(
-                            tenant -> tenant.fpcTopology().dpns() != null &&
+                    if (getDefaultTenant().map(
+                            tenant -> tenant.fpcTopology().dpns() == null ||
                                     tenant.fpcTopology().dpns().stream()
-                                            .anyMatch(dpns -> dpns.dpnId().equals(dpn.dpnId()))
+                                            .noneMatch(dpns -> dpns.dpnId().equals(dpn.dpnId()))
                     ).orElse(false)) {
                         throw new IllegalStateException("DPN ID is not registered to the topology.");
                     }
@@ -222,54 +222,70 @@
                         short ebi = context.ebi().uint8(),
                                 lbi = context.lbi().uint8();
 
-                        Short dpnTopic = DpnApi.getTopicFromNode(dpn.dpnId().toString());
+                        Optional<String> key = getDefaultTenant().flatMap(tenant ->
+                                tenant.fpcTopology()
+                                        .dpns()
+                                        .stream()
+                                        .filter(dpns -> dpns.dpnId().equals(dpn.dpnId()))
+                                        .findFirst().map(node -> node.nodeId() + "/" + node.networkId())
+                        );
 
-                        if (context.ul().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
-                            s1u_sgw_gtpu_teid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
-                        } else {
-                            throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
-                        }
-                        if (context.dl().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
-                            s1u_enb_gtpu_teid = ((ThreegppTunnel) context.dl().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
-                        } else {
-                            throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
-                        }
+                        if (key.isPresent()) {
+                            Short dpnTopic = DpnApi.getTopicFromNode(key.get());
+
+                            if (dpnTopic != null) {
+                                if (context.ul().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
+                                    s1u_sgw_gtpu_teid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
+                                } else {
+                                    throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
+                                }
+                                if (context.dl().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
+                                    s1u_enb_gtpu_teid = ((ThreegppTunnel) context.dl().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
+                                } else {
+                                    throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
+                                }
 
 
-                        if (commands.contains("session")) {
-                            tasks.add(Executors.callable(() -> DpnApi.create_session(
-                                    dpnTopic,
-                                    imsi,
-                                    Ip4Prefix.valueOf(context.delegatingIpPrefixes().get(0).toString()).address(),
-                                    ebi,
-                                    ulLocalAddress,
-                                    s1u_sgw_gtpu_teid,
-                                    cId,
-                                    opId,
-                                    contextId
-                            )));
+                                if (commands.contains("session")) {
+                                    tasks.add(Executors.callable(() -> DpnApi.create_session(
+                                            dpnTopic,
+                                            imsi,
+                                            Ip4Prefix.valueOf(context.delegatingIpPrefixes().get(0).toString()).address(),
+                                            ebi,
+                                            ulLocalAddress,
+                                            s1u_sgw_gtpu_teid,
+                                            cId,
+                                            opId,
+                                            contextId
+                                    )));
 
-                            if (commands.contains("downlink")) {
-                                tasks.add(Executors.callable(() -> DpnApi.modify_bearer_dl(
-                                        dpnTopic,
-                                        s1u_sgw_gtpu_teid,
-                                        dlRemoteAddress,
-                                        s1u_enb_gtpu_teid,
-                                        cId,
-                                        opId
-                                )));
+                                    if (commands.contains("downlink")) {
+                                        tasks.add(Executors.callable(() -> DpnApi.modify_bearer_dl(
+                                                dpnTopic,
+                                                s1u_sgw_gtpu_teid,
+                                                dlRemoteAddress,
+                                                s1u_enb_gtpu_teid,
+                                                cId,
+                                                opId
+                                        )));
+                                    }
+                                } else if (commands.contains("indirect-forward")) {
+                                    // TODO - Modify API for Indirect Forwarding to/from another SGW
+                                } else if (commands.contains("uplink")) {
+                                    tasks.add(Executors.callable(() -> DpnApi.create_bearer_ul(
+                                            dpnTopic,
+                                            imsi,
+                                            lbi,
+                                            ebi,
+                                            ulLocalAddress,
+                                            s1u_sgw_gtpu_teid
+                                    )));
+                                }
+                            } else {
+                                throw new IllegalArgumentException("Could not find Topic ID");
                             }
-                        } else if (commands.contains("indirect-forward")) {
-                            // TODO - Modify API for Indirect Forwarding to/from another SGW
-                        } else if (commands.contains("uplink")) {
-                            tasks.add(Executors.callable(() -> DpnApi.create_bearer_ul(
-                                    dpnTopic,
-                                    imsi,
-                                    lbi,
-                                    ebi,
-                                    ulLocalAddress,
-                                    s1u_sgw_gtpu_teid
-                            )));
+                        } else {
+                            throw new IllegalArgumentException("DPN does not have node and network ID defined.");
                         }
                     }
                 }
@@ -295,6 +311,7 @@
                     )
             );
         } catch (Exception e) {
+            log.error(ExceptionUtils.getFullStackTrace(e));
             DefaultErr defaultErr = new DefaultErr();
             configureOutput.resultType(defaultErr);
             defaultErr.errorInfo(ExceptionUtils.getFullStackTrace(e));
@@ -318,19 +335,21 @@
                 defaultCommonSuccess.addToContexts(context);
 
                 if (getDefaultTenant().map(
-                        tenant -> tenant.fpcMobility()
-                                .contexts()
-                                .parallelStream()
-                                .anyMatch(contexts -> contexts.contextId().equals(context.contextId()))
+                        tenant -> tenant.fpcMobility().contexts() == null ||
+                                tenant.fpcMobility()
+                                        .contexts()
+                                        .parallelStream()
+                                        .noneMatch(contexts -> contexts.contextId().equals(context.contextId()))
                 ).orElse(false)) {
-                    throw new IllegalStateException("Context already exists.");
+                    throw new IllegalStateException("Context doesn't exist.");
                 }
 
                 for (Dpns dpn : context.dpns()) {
-                    if (!getDefaultTenant().map(
-                            tenant -> tenant.fpcTopology().dpns()
-                                    .stream()
-                                    .anyMatch(dpns -> dpns.dpnId().equals(dpn.dpnId()))
+                    if (getDefaultTenant().map(
+                            tenant -> tenant.fpcTopology().dpns() == null ||
+                                    tenant.fpcTopology().dpns()
+                                            .stream()
+                                            .noneMatch(dpns -> dpns.dpnId().equals(dpn.dpnId()))
                     ).orElse(false)) {
                         throw new IllegalStateException("DPN ID is not registered to the topology.");
                     }
@@ -349,61 +368,75 @@
 
                         BigInteger opId = operationId.uint64();
 
+                        Optional<String> key = getDefaultTenant().flatMap(tenant ->
+                                tenant.fpcTopology()
+                                        .dpns()
+                                        .stream()
+                                        .filter(dpns -> dpns.dpnId().equals(dpn.dpnId()))
+                                        .findFirst().map(node -> node.nodeId() + "/" + node.networkId())
+                        );
 
-                        Short dpnTopic = DpnApi.getTopicFromNode(dpn.dpnId().toString());
+                        if (key.isPresent()) {
+                            Short dpnTopic = DpnApi.getTopicFromNode(key.get());
 
-                        if (context.ul().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
-                            s1u_sgw_gtpu_teid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
-                        } else {
-                            throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
-                        }
-                        if (context.dl().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
-                            s1u_enb_gtpu_teid = ((ThreegppTunnel) context.dl().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
-                        } else {
-                            throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
-                        }
+                            if (dpnTopic != null) {
+                                if (context.ul().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
+                                    s1u_sgw_gtpu_teid = ((ThreegppTunnel) context.ul().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
+                                } else {
+                                    throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
+                                }
+                                if (context.dl().mobilityTunnelParameters().mobprofileParameters() instanceof ThreegppTunnel) {
+                                    s1u_enb_gtpu_teid = ((ThreegppTunnel) context.dl().mobilityTunnelParameters().mobprofileParameters()).tunnelIdentifier();
+                                } else {
+                                    throw new IllegalArgumentException("mobprofileParameters are not instance of ThreegppTunnel");
+                                }
 
-
-                        if (commands.contains("downlink")) {
-                            if (context.dl().lifetime() >= 0L) {
-                                tasks.add(Executors.callable(() ->
-                                        DpnApi.modify_bearer_dl(
-                                                dpnTopic,
-                                                dlRemoteAddress,
-                                                s1u_enb_gtpu_teid,
-                                                dlLocalAddress,
-                                                cId,
-                                                opId,
-                                                contextId
-                                        )
-                                ));
+                                if (commands.contains("downlink")) {
+                                    if (context.dl().lifetime() >= 0L) {
+                                        tasks.add(Executors.callable(() ->
+                                                DpnApi.modify_bearer_dl(
+                                                        dpnTopic,
+                                                        dlRemoteAddress,
+                                                        s1u_enb_gtpu_teid,
+                                                        dlLocalAddress,
+                                                        cId,
+                                                        opId,
+                                                        contextId
+                                                )
+                                        ));
+                                    } else {
+                                        tasks.add(Executors.callable(() ->
+                                                DpnApi.delete_bearer(
+                                                        dpnTopic,
+                                                        s1u_enb_gtpu_teid
+                                                )
+                                        ));
+                                    }
+                                }
+                                if (commands.contains("uplink")) {
+                                    if (context.ul().lifetime() >= 0L) {
+                                        tasks.add(Executors.callable(() ->
+                                                DpnApi.modify_bearer_ul(
+                                                        dpnTopic,
+                                                        ulLocalAddress,
+                                                        s1u_enb_gtpu_teid,
+                                                        s1u_sgw_gtpu_teid
+                                                )
+                                        ));
+                                    } else {
+                                        tasks.add(Executors.callable(() ->
+                                                DpnApi.delete_bearer(
+                                                        dpnTopic,
+                                                        s1u_sgw_gtpu_teid
+                                                )
+                                        ));
+                                    }
+                                }
                             } else {
-                                tasks.add(Executors.callable(() ->
-                                        DpnApi.delete_bearer(
-                                                dpnTopic,
-                                                s1u_enb_gtpu_teid
-                                        )
-                                ));
+                                throw new IllegalArgumentException("Could not find Topic ID");
                             }
-                        }
-                        if (commands.contains("uplink")) {
-                            if (context.ul().lifetime() >= 0L) {
-                                tasks.add(Executors.callable(() ->
-                                        DpnApi.modify_bearer_ul(
-                                                dpnTopic,
-                                                ulLocalAddress,
-                                                s1u_enb_gtpu_teid,
-                                                s1u_sgw_gtpu_teid
-                                        )
-                                ));
-                            } else {
-                                tasks.add(Executors.callable(() ->
-                                        DpnApi.delete_bearer(
-                                                dpnTopic,
-                                                s1u_sgw_gtpu_teid
-                                        )
-                                ));
-                            }
+                        } else {
+                            throw new IllegalArgumentException("DPN does not have node and network ID defined.");
                         }
                     }
                 }
@@ -429,6 +462,7 @@
                     )
             );
         } catch (Exception e) {
+            log.error(ExceptionUtils.getFullStackTrace(e));
             DefaultErr defaultErr = new DefaultErr();
             defaultErr.errorInfo(ExceptionUtils.getFullStackTrace(e));
             defaultErr.errorTypeId(ErrorTypeId.of(0));
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/ConfigHelper.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/ConfigHelper.java
index bee7cce..5a91d52 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/ConfigHelper.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/ConfigHelper.java
@@ -9,9 +9,9 @@
 @JsonPropertyOrder({
         "monitor-threads",
         "scheduled-monitors-poolsize",
-        "dpn-listener-uri",
+        "dpn-subscriber-uri",
         "dpn-listener-id",
-        "dpn-client-uri",
+        "dpn-publisher-uri",
         "dpn-client-threads",
         "metricsupdate-ms",
         "mobilityupdate-ms",
@@ -31,17 +31,16 @@
         "zmq-broadcast-all"
 })
 public class ConfigHelper {
-
     @JsonProperty("monitor-threads")
     private Integer monitorThreads;
     @JsonProperty("scheduled-monitors-poolsize")
     private Integer scheduledMonitorsPoolsize;
-    @JsonProperty("dpn-listener-uri")
-    private String dpnListenerUri;
+    @JsonProperty("dpn-subscriber-uri")
+    private String dpnSubscriberUri;
     @JsonProperty("dpn-listener-id")
     private Integer dpnListenerId;
-    @JsonProperty("dpn-client-uri")
-    private String dpnClientUri;
+    @JsonProperty("dpn-publisher-uri")
+    private String dpnPublisherUri;
     @JsonProperty("dpn-client-threads")
     private Integer dpnClientThreads;
     @JsonProperty("metricsupdate-ms")
@@ -85,222 +84,220 @@
     public ConfigHelper() {
     }
 
-    @JsonProperty("monitor-threads")
+
     public Integer monitorThreads() {
         return monitorThreads;
     }
 
-    @JsonProperty("monitor-threads")
+
     public void setMonitorThreads(Integer monitorThreads) {
         this.monitorThreads = monitorThreads;
     }
 
-    @JsonProperty("scheduled-monitors-poolsize")
+
     public Integer scheduledMonitorsPoolsize() {
         return scheduledMonitorsPoolsize;
     }
 
-    @JsonProperty("scheduled-monitors-poolsize")
+
     public void setScheduledMonitorsPoolsize(Integer scheduledMonitorsPoolsize) {
         this.scheduledMonitorsPoolsize = scheduledMonitorsPoolsize;
     }
 
-    @JsonProperty("dpn-listener-uri")
-    public String dpnListenerUri() {
-        return dpnListenerUri;
+
+    public String dpnSubscriberUri() {
+        return dpnSubscriberUri;
     }
 
-    @JsonProperty("dpn-listener-uri")
-    public void setDpnListenerUri(String dpnListenerUri) {
-        this.dpnListenerUri = dpnListenerUri;
+
+    public void setDpnSubscriberUri(String dpnSubscriberUri) {
+        this.dpnSubscriberUri = dpnSubscriberUri;
     }
 
-    @JsonProperty("dpn-listener-id")
+
     public Integer dpnListenerId() {
         return dpnListenerId;
     }
 
-    @JsonProperty("dpn-listener-id")
+
     public void setDpnListenerId(Integer dpnListenerId) {
         this.dpnListenerId = dpnListenerId;
     }
 
-    @JsonProperty("dpn-client-uri")
-    public String dpnClientUri() {
-        return dpnClientUri;
+
+    public String dpnPublisherUri() {
+        return dpnPublisherUri;
     }
 
-    @JsonProperty("dpn-client-uri")
-    public void setDpnClientUri(String dpnClientUri) {
-        this.dpnClientUri = dpnClientUri;
+    public void setDpnPublisherUri(String dpnPublisherUri) {
+        this.dpnPublisherUri = dpnPublisherUri;
     }
 
-    @JsonProperty("dpn-client-threads")
+
     public Integer dpnClientThreads() {
         return dpnClientThreads;
     }
 
-    @JsonProperty("dpn-client-threads")
+
     public void setDpnClientThreads(Integer dpnClientThreads) {
         this.dpnClientThreads = dpnClientThreads;
     }
 
-    @JsonProperty("metricsupdate-ms")
+
     public Integer metricUpdateMs() {
         return metricsupdateMs;
     }
 
-    @JsonProperty("metricsupdate-ms")
+
     public void setMetricsupdateMs(Integer metricsupdateMs) {
         this.metricsupdateMs = metricsupdateMs;
     }
 
-    @JsonProperty("mobilityupdate-ms")
+
     public Integer mobilityUpdateMs() {
         return mobilityupdateMs;
     }
 
-    @JsonProperty("mobilityupdate-ms")
+
     public void setMobilityupdateMs(Integer mobilityupdateMs) {
         this.mobilityupdateMs = mobilityupdateMs;
     }
 
-    @JsonProperty("activation-threads")
+
     public Integer activationThreads() {
         return activationThreads;
     }
 
-    @JsonProperty("activation-threads")
+
     public void setActivationThreads(Integer activationThreads) {
         this.activationThreads = activationThreads;
     }
 
-    @JsonProperty("target-read-limit")
+
     public Integer targetReadLimit() {
         return targetReadLimit;
     }
 
-    @JsonProperty("target-read-limit")
+
     public void setTargetReadLimit(Integer targetReadLimit) {
         this.targetReadLimit = targetReadLimit;
     }
 
-    @JsonProperty("http-notifier-clients")
+
     public Integer httpNotifierClients() {
         return httpNotifierClients;
     }
 
-    @JsonProperty("http-notifier-clients")
+
     public void setHttpNotifierClients(Integer httpNotifierClients) {
         this.httpNotifierClients = httpNotifierClients;
     }
 
-    @JsonProperty("zmq-nbi-server-poolsize")
+
     public Integer zmqServerPoolsize() {
         return zmqNbiServerPoolsize;
     }
 
-    @JsonProperty("zmq-nbi-server-poolsize")
+
     public void setZmqNbiServerPoolsize(Integer zmqNbiServerPoolsize) {
         this.zmqNbiServerPoolsize = zmqNbiServerPoolsize;
     }
 
-    @JsonProperty("zmq-nbi-server-uri")
+
     public String zmqServerUri() {
         return zmqNbiServerUri;
     }
 
-    @JsonProperty("zmq-nbi-server-uri")
+
     public void setZmqNbiServerUri(String zmqNbiServerUri) {
         this.zmqNbiServerUri = zmqNbiServerUri;
     }
 
-    @JsonProperty("zmq-nbi-inproc-uri")
+
     public String zmqInprocUri() {
         return zmqNbiInprocUri;
     }
 
-    @JsonProperty("zmq-nbi-inproc-uri")
+
     public void setZmqNbiInprocUri(String zmqNbiInprocUri) {
         this.zmqNbiInprocUri = zmqNbiInprocUri;
     }
 
-    @JsonProperty("zmq-nbi-handler-poolsize")
+
     public Integer zmqHandlerPoolsize() {
         return zmqNbiHandlerPoolsize;
     }
 
-    @JsonProperty("zmq-nbi-handler-poolsize")
+
     public void setZmqNbiHandlerPoolsize(Integer zmqNbiHandlerPoolsize) {
         this.zmqNbiHandlerPoolsize = zmqNbiHandlerPoolsize;
     }
 
-    @JsonProperty("http-nio2-nb-poolsize")
+
     public Integer httpNio2Poolsize() {
         return httpNio2NbPoolsize;
     }
 
-    @JsonProperty("http-nio2-nb-poolsize")
+
     public void setHttpNio2NbPoolsize(Integer httpNio2NbPoolsize) {
         this.httpNio2NbPoolsize = httpNio2NbPoolsize;
     }
 
-    @JsonProperty("http-nio2-nb-port")
+
     public Integer httpNio2Port() {
         return httpNio2NbPort;
     }
 
-    @JsonProperty("http-nio2-nb-port")
+
     public void setHttpNio2NbPort(Integer httpNio2NbPort) {
         this.httpNio2NbPort = httpNio2NbPort;
     }
 
-    @JsonProperty("node-id")
+
     public String nodeId() {
         return nodeId;
     }
 
-    @JsonProperty("node-id")
+
     public void setNodeId(String node_id) {
         this.nodeId = node_id;
     }
 
-    @JsonProperty("network-id")
+
     public String networkId() {
         return networkId;
     }
 
-    @JsonProperty("network-id")
+
     public void setNetworkId(String network_id) {
         this.networkId = network_id;
     }
 
-    @JsonProperty("zmq-broadcast-controllers")
+
     public String zmqBroadcastControllers() {
         return zmqBroadcastControllers;
     }
 
-    @JsonProperty("zmq-broadcast-controllers")
+
     public void setZmqBroadcastControllers(String zmqBroadcastControllers) {
         this.zmqBroadcastControllers = zmqBroadcastControllers;
     }
 
-    @JsonProperty("zmq-broadcast-dpns")
     public String zmqBroadcastDpns() {
         return zmqBroadcastDpns;
     }
 
-    @JsonProperty("zmq-broadcast-dpns")
+
     public void setZmqBroadcastDpns(String zmqBroadcastDpns) {
         this.zmqBroadcastDpns = zmqBroadcastDpns;
     }
 
-    @JsonProperty("zmq-broadcast-all")
+
     public String zmqBroadcastAll() {
         return zmqBroadcastAll;
     }
 
-    @JsonProperty("zmq-broadcast-all")
+
     public void setZmqBroadcastAll(String zmqBroadcastAll) {
         this.zmqBroadcastAll = zmqBroadcastAll;
     }
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/DpnApi.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/DpnApi.java
index 43d4759..b9ca75c 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/DpnApi.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/helpers/DpnApi.java
@@ -30,7 +30,7 @@
 public class DpnApi {
     protected static final Logger log = LoggerFactory.getLogger(DpnApi.class);
     private static final Map<String, FpcDpnId> uplinkDpnMap;
-    private static final Map<String, Short> topicToNodeMap;
+    private static final Map<String, Short> nodeToTopicMap;
     /**
      * Topic for broadcasting
      */
@@ -56,7 +56,7 @@
 
     static {
         uplinkDpnMap = Maps.newConcurrentMap();
-        topicToNodeMap = Maps.newConcurrentMap();
+        nodeToTopicMap = Maps.newConcurrentMap();
     }
 
     /**
@@ -409,11 +409,11 @@
             } else if (buf[3] == DPN_HELLO) {
                 status = DPNStatusIndication.Status.HELLO;
                 log.info("Hello {} on topic {}", key, buf[2]);
-                topicToNodeMap.put(key, (short) buf[2]);
+                nodeToTopicMap.put(key, (short) buf[2]);
             } else if (buf[3] == DPN_BYE) {
                 status = DPNStatusIndication.Status.BYE;
                 log.info("Bye {}", key);
-                topicToNodeMap.remove(key);
+                nodeToTopicMap.remove(key);
             }
             return new AbstractMap.SimpleEntry<>(uplinkDpnMap.get(key), new DPNStatusIndication(status, key));
         }
@@ -427,9 +427,8 @@
      * @return - ZMQ Topic
      */
     public static Short getTopicFromNode(String Key) {
-        if (Key == null) return 1;
-        Short aShort = topicToNodeMap.get(Key);
-        return aShort != null ? aShort : (short) 1;
+        Short aShort = nodeToTopicMap.get(Key);
+        return aShort;
     }
 
     /**
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBPublisherManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBPublisherManager.java
index ec7321e..541d7f5 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBPublisherManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBPublisherManager.java
@@ -50,6 +50,7 @@
         executorService.submit(() -> {
             ZMQ.Socket socket = ctx.createSocket(ZMQ.PUB);
             socket.connect(address);
+            log.debug("Publisher at {}", address);
             while ((!Thread.currentThread().isInterrupted()) && run) {
                 try {
                     byte[] array = blockingQueue.take().array();
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBSubscriberManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBSubscriberManager.java
index 09617c0..3b3e491 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBSubscriberManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/ZMQSBSubscriberManager.java
@@ -84,10 +84,14 @@
     public void open() {
         short subscriberId = (short) ThreadLocalRandom.current().nextInt(MIN_TOPIC_VAL, MAX_TOPIC_VAL + 1);
 
-        broadcastAllWorker = Executors.newSingleThreadExecutor().submit(new ZMQSubscriberWorker(broadcastAllId));
+        broadcastAllWorker = Executors.newSingleThreadExecutor()
+                .submit(new ZMQSubscriberWorker(broadcastAllId));
+
         broadcastControllersWorker = Executors.newSingleThreadExecutor()
                 .submit(new ZMQSubscriberWorker(broadcastControllersId));
-        broadcastTopicWorker = Executors.newSingleThreadExecutor().submit(new BroadcastTopic(subscriberId));
+
+        broadcastTopicWorker = Executors.newSingleThreadExecutor()
+                .submit(new BroadcastTopic(subscriberId));
     }
 
     @Override
@@ -191,11 +195,12 @@
             ZMQ.Socket subscriber = this.ctx.createSocket(ZMQ.SUB);
             subscriber.connect(address);
             subscriber.subscribe(new byte[]{toUint8(subscriberId)});
+            log.debug("Subscriber at {} / {}", address, subscriberId);
             while ((!Thread.currentThread().isInterrupted()) && run) {
                 byte[] contents = subscriber.recv();
                 byte topic = contents[0];
                 byte messageType = contents[1];
-                log.info("Received {}", contents);
+                log.debug("Received {}", contents);
                 switch (topic) {
                     case 1:
                         if (messageType == ASSIGN_CONFLICT && toInt(contents, 3) != controllerSourceId) {
@@ -276,6 +281,7 @@
                     .put(toUint8((short) networkId.length()))
                     .put(networkId.getBytes());
 
+
             log.info("sendHelloToDpns: {}", bb.array());
             ZMQSBPublisherManager.getInstance().send(bb);
         }
diff --git a/scripts/addDPN.sh b/scripts/addDPN.sh
index 9a07776..9c77d37 100755
--- a/scripts/addDPN.sh
+++ b/scripts/addDPN.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 curl -i --header "Content-type: application/json" --request POST -u onos:rocks --data '{
     "dpns": [
         {
@@ -11,3 +12,4 @@
         }
     ]
 }' 'http://localhost:8181/onos/restconf/data/ietf-dmm-fpcagent:tenants/tenant=default/fpc-topology'
+./getTenants.sh
\ No newline at end of file
diff --git a/scripts/createRPC.sh b/scripts/createRPC.sh
index e920070..621f6df 100755
--- a/scripts/createRPC.sh
+++ b/scripts/createRPC.sh
@@ -5,44 +5,6 @@
         "client-id": "1",
         "contexts": [
             {
-                "context-id": 202374886,
-                "delegating-ip-prefixes": [
-                    "192.168.1.5/32"
-                ],
-                "dl": {
-                    "dpn-parameters": {},
-                    "mobility-tunnel-parameters": {
-                        "tunnel-identifier": "2222",
-                        "tunnel-type": "gtpv1"
-                    },
-                    "tunnel-local-address": "192.168.1.1",
-                    "tunnel-remote-address": "10.1.1.1"
-                },
-                "dpn-group": "foo",
-                "dpns": [
-                    {
-                        "direction": "uplink",
-                        "dpn-id": "1",
-                        "dpn-parameters": {}
-                    }
-                ],
-                "ebi": "5",
-                "imsi": "9135551234",
-                "instructions": {
-                    "instr-3gpp-mob": "session uplink"
-                },
-                "lbi": "5",
-                "ul": {
-                    "dpn-parameters": {},
-                    "mobility-tunnel-parameters": {
-                        "tunnel-identifier": "1111",
-                        "tunnel-type": "gtpv1"
-                    },
-                    "tunnel-local-address": "192.168.1.1",
-                    "tunnel-remote-address": "10.1.1.1"
-                }
-            },
-            {
                 "context-id": 202374887,
                 "delegating-ip-prefixes": [
                     "192.168.1.5/32"
diff --git a/scripts/forwarder_subscriber_with_ACK.py b/scripts/forwarder_subscriber_with_ACK.py
index e3826a5..fbc5088 100755
--- a/scripts/forwarder_subscriber_with_ACK.py
+++ b/scripts/forwarder_subscriber_with_ACK.py
@@ -32,15 +32,7 @@
 def signal_handler(signal, frame):
     print "\nExiting... Sending DPN Status Indication message with Status = GOODBYE"
     pub_socket.send("%s" % (struct.pack("!BBBBIB",2,12,topicId,2,source,len(nodeId)) + nodeId + struct.pack('!B',len(networkId)) + networkId))
-    count = 0
-    while True:
-        time.sleep(1)
-        sys.stdout.write("\r"+str(5-count)+" ")
-        sys.stdout.flush()
-        count += 1
-        if(count > 5):
-            print "\n"
-            sys.exit(0)
+    sys.exit(0)
 
 signal.signal(signal.SIGINT, signal_handler)
 
@@ -70,18 +62,19 @@
 
     print "Ready to receive messages. Press Ctrl+C when ready to exit."
 
-rec_port = "5560"
-send_port = "5559"
+subscriber_uri = "tcp://localhost:5560"
+publisher_uri = "tcp://localhost:5559"
 # Socket to talk to server
 context = zmq.Context()
-socket = context.socket(zmq.SUB)
+sub_socket = context.socket(zmq.SUB)
 pub_socket = context.socket(zmq.PUB)
-socket.connect ("tcp://localhost:%s" % rec_port)
-pub_socket.connect("tcp://localhost:%s" % send_port)
+sub_socket.connect(subscriber_uri)
+pub_socket.connect(publisher_uri)
 topicfilter = ""
 controller_topic= 252
-socket.setsockopt(zmq.SUBSCRIBE, topicfilter)
-print "Listening to port ", rec_port
+sub_socket.setsockopt(zmq.SUBSCRIBE, topicfilter)
+print "Subscriber to ", subscriber_uri
+print "Publisher to ", publisher_uri
 print "DPN Lifecycle start up . . . Please wait."
 
 async_result = pool.apply_async(sendAssignId,(pub_socket,))
@@ -94,12 +87,14 @@
 msgnum5count = 0
 msgnum6count = 0
 for update_nbr in range(900000):
-    string = socket.recv()
+    string = sub_socket.recv()
     ts = time.time()
     st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
  
     topic,msgnum = struct.unpack('!BB',string[:2])
 
+    print 'received %s %s' % (topic, msgnum)
+
     if topic == 1 and msgnum == 10: #Assign_Id
         top,msg,topId,src,nodeIdLen = struct.unpack('!BBBIB',string[:8])
         top,msg,topId,src,nodeIdLen,nodeId1,networkIdLen = struct.unpack('!BBBIB'+str(nodeIdLen)+'sB',string[:8+nodeIdLen+1])
@@ -250,4 +245,4 @@
 
     print '================'
     print 'Total = ', count, 'msgnum1 count', msgnum1count, 'msgnum2 count', msgnum2count, 'msgnum3 count', msgnum3count, 'msgnum4 count', msgnum4count,'msgnum5 count', msgnum5count, 'msgnum6 count', msgnum6count
-socket.close()
+sub_socket.close()
diff --git a/scripts/updateRPC.sh b/scripts/updateRPC.sh
new file mode 100755
index 0000000..de934bf
--- /dev/null
+++ b/scripts/updateRPC.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+curl -X POST --header 'Content-Type: application/json' -u onos:rocks --header 'Accept: application/json' -d '{
+    "input": {
+        "admin-state": "enabled",
+        "client-id": "1",
+        "contexts": [
+            {
+                "context-id": 202374887,
+                "delegating-ip-prefixes": [
+                    "192.168.1.5/32"
+                ],
+                "dl": {
+                    "dpn-parameters": {},
+                    "mobility-tunnel-parameters": {
+                        "tunnel-identifier": "2222",
+                        "tunnel-type": "gtpv1"
+                    },
+                    "tunnel-local-address": "192.168.1.1",
+                    "tunnel-remote-address": "10.1.1.1"
+                },
+                "dpn-group": "foo",
+                "dpns": [
+                    {
+                        "direction": "uplink",
+                        "dpn-id": "1",
+                        "dpn-parameters": {}
+                    }
+                ],
+                "ebi": "5",
+                "imsi": "9135551234",
+                "instructions": {
+                    "instr-3gpp-mob": "session uplink"
+                },
+                "lbi": "5",
+                "ul": {
+                    "dpn-parameters": {},
+                    "mobility-tunnel-parameters": {
+                        "tunnel-identifier": "1111",
+                        "tunnel-type": "gtpv1"
+                    },
+                    "tunnel-local-address": "192.168.1.1",
+                    "tunnel-remote-address": "10.1.1.1"
+                }
+            }
+        ],
+        "op-id": "1",
+        "op-ref-scope": "op",
+        "op-type": "update",
+        "session-state": "complete"
+    }
+}' 'http://localhost:8181/onos/restconf/operations/ietf-dmm-fpcagent:configure' | python -m json.tool