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 a89c291..37d3668 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/FpcRpcManager.java
@@ -720,6 +720,7 @@
             try {
                 for (ModelObject modelObject : getModelObjects(rpcInput.data(), configureDpn)) {
                     DefaultConfigureDpnInput input = (DefaultConfigureDpnInput) modelObject;
+                    log.info("configure-dpn event {}", input);
                     switch (input.operation().enumeration()) {
                         case ADD:
                             configureDpnOutput = configureDpnAdd(input);
@@ -757,6 +758,8 @@
             try {
                 for (ModelObject modelObject : getModelObjects(rpcInput.data(), configure)) {
                     DefaultConfigureInput input = (DefaultConfigureInput) modelObject;
+                    log.info("configure event {}", input);
+                    log.info("info: {}\ninput: {}", clientInfo, input);
                     if (!clientInfo.containsKey(input.clientId())) {
                         throw new RuntimeException("Client Identifier is not registered.");
                     }
@@ -816,6 +819,7 @@
             try {
                 for (ModelObject modelObject : getModelObjects(rpcInput.data(), configureBundles)) {
                     DefaultConfigureBundlesInput input = (DefaultConfigureBundlesInput) modelObject;
+                    log.info("configure-bundles event {}", input);
                     if (!clientInfo.containsKey(input.clientId())) {
                         throw new RuntimeException("Client Identifier is not registered.");
                     }
@@ -910,6 +914,7 @@
             try {
                 for (ModelObject modelObject : getModelObjects(rpcInput.data(), registerClient)) {
                     DefaultRegisterClientInput input = (DefaultRegisterClientInput) modelObject;
+                    log.info("register-client event {}", input);
                     if (clientInfo.containsKey(input.clientId())) {
                         throw new RuntimeException("Client already registered.");
                     }
@@ -965,6 +970,7 @@
             try {
                 for (ModelObject modelObject : getModelObjects(rpcInput.data(), registerClient)) {
                     DefaultRegisterClientInput input = (DefaultRegisterClientInput) modelObject;
+                    log.info("deregister-client event {}", input);
                     if (!clientInfo.containsKey(input.clientId())) {
                         throw new RuntimeException("Client does not exist.");
                     }
