diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py
index 13298e0..1e56e32 100644
--- a/osm_lcm/ns.py
+++ b/osm_lcm/ns.py
@@ -1236,6 +1236,34 @@
             self.set_vnfr_at_error(db_vnfrs, str(e))
             raise
 
+    async def wait_kdu_up(self, logging_text, nsr_id, vnfr_id, kdu_name):
+        """
+        Wait for kdu to be up, get ip address
+        :param logging_text: prefix use for logging
+        :param nsr_id:
+        :param vnfr_id:
+        :param kdu_name:
+        :return: IP address
+        """
+
+        # self.logger.debug(logging_text + "Starting wait_kdu_up")
+        nb_tries = 0
+
+        while nb_tries < 360:
+            db_vnfr = self.db.get_one("vnfrs", {"_id": vnfr_id})
+            kdur = next((x for x in get_iterable(db_vnfr, "kdur") if x.get("name") == kdu_name), None)
+            if not kdur:
+                raise LcmException("Not found vnfr_id={}, kdu_name={}".format(vnfr_id, kdu_name))
+            if kdur.get("status"):
+                if kdur["status"] in ("READY", "ENABLED"):
+                    return kdur.get("ip-address")
+                else:
+                    raise LcmException("target KDU={} is in error state".format(kdu_name))
+
+            await asyncio.sleep(10, loop=self.loop)
+            nb_tries += 1
+        raise LcmException("Timeout waiting KDU={} instantiated".format(kdu_name))
+
     async def wait_vm_up_insert_key_ro(self, logging_text, nsr_id, vnfr_id, vdu_id, vdu_index, pub_key=None, user=None):
         """
         Wait for ip addres at RO, and optionally, insert public key in virtual machine
@@ -1581,8 +1609,11 @@
                 # n2vc_redesign STEP 5.1
                 # wait for RO (ip-address) Insert pub_key into VM
                 if vnfr_id:
-                    rw_mgmt_ip = await self.wait_vm_up_insert_key_ro(logging_text, nsr_id, vnfr_id, vdu_id, vdu_index,
-                                                                     user=user, pub_key=pub_key)
+                    if kdu_name:
+                        rw_mgmt_ip = await self.wait_kdu_up(logging_text, nsr_id, vnfr_id, kdu_name)
+                    else:
+                        rw_mgmt_ip = await self.wait_vm_up_insert_key_ro(logging_text, nsr_id, vnfr_id, vdu_id,
+                                                                         vdu_index, user=user, pub_key=pub_key)
                 else:
                     rw_mgmt_ip = None   # This is for a NS configuration
 
@@ -2397,7 +2428,7 @@
             self.logger.warn(logging_text + ' ERROR adding relations: {}'.format(e))
             return False
 
-    async def _install_kdu(self, nsr_id: str, nsr_db_path: str, vnfr_data: dict, kdu_index: int, kdur: dict, kdud: dict,
+    async def _install_kdu(self, nsr_id: str, nsr_db_path: str, vnfr_data: dict, kdu_index: int, kdud: dict,
                            vnfd: dict, k8s_instance_info: dict, k8params: dict = None, timeout: int = 600):
 
         try:
@@ -2425,8 +2456,9 @@
                 namespace=k8s_instance_info["namespace"])
 
             # Obtain management service info (if exists)
+            vnfr_update_dict = {}
             if services:
-                vnfr_update_dict = {"kdur.{}.services".format(kdu_index): services}
+                vnfr_update_dict["kdur.{}.services".format(kdu_index)] = services
                 mgmt_services = [service for service in kdud.get("service", []) if service.get("mgmt-service")]
                 for mgmt_service in mgmt_services:
                     for service in services:
@@ -2448,7 +2480,8 @@
                     else:
                         self.logger.warn("Mgmt service name: {} not found".format(mgmt_service["name"]))
 
-                self.update_db_2("vnfrs", vnfr_data.get("_id"), vnfr_update_dict)
+            vnfr_update_dict["kdur.{}.status".format(kdu_index)] = "READY"
+            self.update_db_2("vnfrs", vnfr_data.get("_id"), vnfr_update_dict)
 
             kdu_config = kdud.get("kdu-configuration")
             if kdu_config and kdu_config.get("initial-config-primitive") and kdu_config.get("juju") is None:
@@ -2470,6 +2503,7 @@
             # Prepare update db with error and raise exception
             try:
                 self.update_db_2("nsrs", nsr_id, {nsr_db_path + ".detailed-status": str(e)})
+                self.update_db_2("vnfrs", vnfr_data.get("_id"), {"kdur.{}.status".format(kdu_index): "ERROR"})
             except Exception:
                 # ignore to keep original exception
                 pass
@@ -2579,7 +2613,7 @@
                     self.update_db_2("nsrs", nsr_id, db_nsr_update)
 
                     task = asyncio.ensure_future(
-                        self._install_kdu(nsr_id, db_path, vnfr_data, kdu_index, kdur, kdud, db_vnfds[vnfd_id],
+                        self._install_kdu(nsr_id, db_path, vnfr_data, kdu_index, kdud, db_vnfds[vnfd_id],
                                           k8s_instance_info, k8params=desc_params, timeout=600))
                     self.lcm_tasks.register("ns", nsr_id, nslcmop_id, "instantiate_KDU-{}".format(index), task)
                     task_instantiation_info[task] = "Deploying KDU {}".format(kdur["kdu-name"])
