diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
index 13062d9..cdc6b32 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
@@ -31,6 +31,7 @@
 import org.onosproject.fpcagent.providers.CpProviderService;
 import org.onosproject.fpcagent.util.CacheManager;
 import org.onosproject.fpcagent.util.FpcUtil;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceService;
@@ -226,6 +227,7 @@
                     dpnCommunicationService = DpnNgicCommunicator.getInstance();
                 } else if (controlProtocol.isAssignableFrom(P4DpnControlProtocol.class)) {
                     dpnCommunicationService = DpnP4Communicator.getInstance();
+                    DpnP4Communicator.getInstance().setDeviceId(DeviceId.deviceId(optionalDpn.get().dpnId().toString()));
                 } else {
                     throw new RuntimeException("Control Protocol is not supported.");
                 }
@@ -390,6 +392,7 @@
                     dpnCommunicationService = DpnNgicCommunicator.getInstance();
                 } else if (controlProtocol.isAssignableFrom(P4DpnControlProtocol.class)) {
                     dpnCommunicationService = DpnP4Communicator.getInstance();
+                    DpnP4Communicator.getInstance().setDeviceId(DeviceId.deviceId(optionalDpn.get().dpnId().toString()));
                 } else {
                     throw new RuntimeException("Control Protocol is not supported.");
                 }
@@ -544,6 +547,7 @@
                     dpnCommunicationService = DpnNgicCommunicator.getInstance();
                 } else if (controlProtocol.isAssignableFrom(P4DpnControlProtocol.class)) {
                     dpnCommunicationService = DpnP4Communicator.getInstance();
+                    DpnP4Communicator.getInstance().setDeviceId(DeviceId.deviceId(optionalDpn.get().dpnId().toString()));
                 } else {
                     throw new RuntimeException("Control Protocol is not supported.");
                 }
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
index 6491882..ba697ed 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnNgicCommunicator.java
@@ -226,7 +226,12 @@
                 .put(toUint32(client_id))
                 .put(toUint32(op_id.longValue()));
 
-        log.info("create_session: {}", bb.array());
+        log.info("create_session(topic_id={}, imsi={}, default_ebi={}, " +
+                        "ue_ipv4={}, s1u_sgw_teid={}, s1u_sgw_ipv4={}, " +
+                        "session_id={}, client_id={}, op_id={})",
+                topic_id, imsi, default_ebi, ue_ipv4, s1u_sgw_teid,
+                s1u_sgw_ipv4, session_id, client_id, op_id);
+
         ZMQSBPublisherManager.getInstance().send(bb);
     }
 
@@ -265,7 +270,12 @@
                 .put(toUint32(client_id))
                 .put(toUint32(op_id.longValue()));
 
-        log.info("modify_bearer: {}", bb.array());
+        log.info("modify_bearer(topic_id={}, s1u_sgw_ipv4={}, " +
+                        "s1u_enodeb_teid={}, s1u_enodeb_ipv4={}, " +
+                        "session_id={}, client_id={}, op_id={})",
+                topic_id, s1u_sgw_ipv4, s1u_enodeb_teid, s1u_enodeb_ipv4,
+                session_id, client_id, op_id);
+
         ZMQSBPublisherManager.getInstance().send(bb);
     }
 
@@ -295,7 +305,10 @@
                 .put(toUint32(client_id))
                 .put(toUint32(op_id.longValue()));
 
-        log.info("delete_session: {}", bb.array());
+        log.info("delete_session(topic_id={}, session_id={}, client_id={}, " +
+                        "op_id={})",
+                topic_id, session_id, client_id, op_id);
+        
         ZMQSBPublisherManager.getInstance().send(bb);
     }
 
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 8207205..265046c 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
@@ -202,7 +202,7 @@
                 short networkIdLen = buf[9 + nodeIdLen];
                 String deviceId = new String(Arrays.copyOfRange(buf, 9, 9 + nodeIdLen)) + "/" + new String(Arrays.copyOfRange(buf, 10 + nodeIdLen, 10 + nodeIdLen + networkIdLen));
                 status = DpnStatusIndication.getEnum(buf[3]);
-                log.info("topic {}, status {}, source {}, node/net {}", (short) buf[2], status, toInt(buf, 4), deviceId);
+                log.info("topic {}, status {}, source {}, node/net {}", (short) buf[2], status, fromIntToLong(buf, 4), deviceId);
                 if (status.equals(DpnStatusIndication.HELLO)) {
                     log.info("Hello {} on topic {}", deviceId, buf[2]);
                     dpnDeviceListener.deviceAdded(deviceId, buf[2]);
diff --git a/scripts/addDPN.sh b/scripts/addDPN.sh
index 94ceddc..1533f6b 100755
--- a/scripts/addDPN.sh
+++ b/scripts/addDPN.sh
@@ -17,26 +17,6 @@
             }
         ]
     }' 'http://192.168.105.14:8181/onos/restconf/data/ietf-dmm-fpcagent:tenants/tenant=default/fpc-topology'
-    ./getTenants.sh
-    echo ""
-elif [ "$#" -eq 2 ]; then
-    echo ""
-    curl -i --header "Content-type: application/json" --request POST -u onos:rocks --data '{
-        "dpns": [
-            {
-                "dpn-id": '$1',
-                "dpn-name": "site1-anchor1",
-                "dpn-groups": [
-                    "foo"
-                ],
-                "node-id": "node'$1'",
-                "network-id": "network'$1'",
-                "control-protocol": "zmq-dpn-control-protocol",
-                "abstract": false
-            }
-        ]
-    }' 'http://192.168.105.14:8181/onos/restconf/data/ietf-dmm-fpcagent:tenants/tenant='$2'/fpc-topology'
-    ./getTenants.sh
     echo ""
 else
     echo "usage: "$0" dpnId (tenantId)"
diff --git a/scripts/addP4DPN.sh b/scripts/addP4DPN.sh
new file mode 100755
index 0000000..d2b820b
--- /dev/null
+++ b/scripts/addP4DPN.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+if [ "$#" -eq 1 ]; then
+    echo ""
+    curl -i --header "Content-type: application/json" --request POST -u onos:rocks --data '{
+        "dpns": [
+            {
+                "dpn-id": '$1',
+                "dpn-name": "site1-anchor1",
+                "dpn-groups": [
+                    "foo"
+                ],
+                "node-id": "node'$1'",
+                "network-id": "network'$1'",
+                "control-protocol": "p4-dpn-control-protocol",
+                "abstract": false
+            }
+        ]
+    }' 'http://192.168.105.14:8181/onos/restconf/data/ietf-dmm-fpcagent:tenants/tenant=default/fpc-topology'
+    echo ""
+else
+    echo "usage: "$0" dpnId (tenantId)"
+fi
