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 b030967..fd44fce 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
@@ -20,10 +20,11 @@
 import org.json.JSONObject;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.Ip4Prefix;
+import org.onosproject.fpcagent.util.CacheManager;
 import org.onosproject.fpcagent.workers.ZMQSBPublisherManager;
 import org.onosproject.fpcagent.workers.ZMQSBSubscriberManager;
 import org.onosproject.yang.gen.v1.fpc.rev20150105.fpc.ZmqDpnControlProtocol;
-import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.ClientIdentifier;
+import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.tenants.tenant.fpctopology.DefaultDpns;
 import org.onosproject.yang.gen.v1.ietfdmmfpcbase.rev20160803.ietfdmmfpcbase.FpcDpnId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,6 +35,7 @@
 import java.util.Optional;
 
 import static org.onosproject.fpcagent.util.Converter.*;
+import static org.onosproject.fpcagent.util.FpcUtil.getTopicFromNode;
 
 /**
  * DPDK DPN API over ZeroMQ for NGIC.
@@ -129,12 +131,27 @@
      *
      * @param body - The JSON body returned by the Control Plane in the DDN ACK
      */
-    public static void ddnAck(JSONObject body) {
+    public static void send_ddn_ack(JSONObject body) {
         try {
             ByteBuffer bb = ByteBuffer.allocate(14);
-            Short dpn = DpnAPIListener.getTopicFromDpnId(new FpcDpnId((String) body.get("dpn-id")));
-            bb.put(toUint8(dpn))
-                    .put(s11MsgType.DDN_ACK.getType());
+            byte topic = -1;
+            for (CacheManager cacheManager : CacheManager.cacheInfo.values()) {
+                final Optional<DefaultDpns> optionalDpn = cacheManager.dpnsCache.get(
+                        FpcDpnId.fromString((String) body.get("dpn-id"))
+                );
+
+                if (optionalDpn.isPresent()) {
+                    DefaultDpns dpn = optionalDpn.get();
+                    topic = getTopicFromNode(dpn.nodeId() + "/" + dpn.networkId());
+                    break;
+                }
+            }
+
+            if (topic == -1) {
+                throw new RuntimeException("DPN specified in DDN not found.");
+            }
+
+            bb.put(topic).put(s11MsgType.DDN_ACK.getType());
 
             if (body.has("dl-buffering-duration")) {
                 bb.put(toUint8((short) body.getInt("dl-buffering-duration")));
@@ -143,11 +160,11 @@
                 bb.put(toUint16((int) body.getInt("dl-buffering-suggested-count")));
             }
             bb.put(ZMQSBSubscriberManager.getInstance().getControllerTopic())
-                    .put(toUint32(Long.parseLong(new ClientIdentifier(body.getString("client-id")).getString())))
+                    .put(toUint32(Long.parseLong(body.getString("client-id"))))
                     .put(toUint32(body.getLong("op-id")));
 
             ZMQSBPublisherManager.getInstance().send(bb);
-        } catch (InterruptedException e) {
+        } catch (Exception e) {
             log.error("{}", ExceptionUtils.getFullStackTrace(e));
         }
 
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
index a45b5d4..82b4790 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/workers/HTTPNotifier.java
@@ -26,6 +26,8 @@
 import org.apache.http.impl.client.BasicResponseHandler;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
+import org.json.JSONObject;
+import org.onosproject.fpcagent.protocols.DpnNgicCommunicator;
 import org.onosproject.restconf.utils.RestconfUtils;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.DefaultYangAutoPrefixNotify;
 import org.onosproject.yang.gen.v1.ietfdmmfpcagent.rev20160803.ietfdmmfpcagent.yangautoprefixnotify.value.DownlinkDataNotification;
@@ -105,6 +107,8 @@
 
                     if (notify.value() instanceof DownlinkDataNotification) {
                         String msg = handler.handleResponse(response);
+                        JSONObject json_body = new JSONObject(msg);
+                        DpnNgicCommunicator.send_ddn_ack(json_body);
                         log.info("Response {}", response);
                     }
                 } catch (Exception e) {
