diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py
index 7bfff0b..aac0b0b 100644
--- a/osm_nbi/instance_topics.py
+++ b/osm_nbi/instance_topics.py
@@ -2233,39 +2233,39 @@
                 nsd = self.db.get_one("nsds", {"_id": nsr["nsd-id"]})
                 ns_request = nsr["instantiate_params"]
                 vnfr = self.db.get_one("vnfrs", {"_id": indata["changeVnfPackageData"]["vnfInstanceId"]})
-                latest_vnfd_revision = vnfd["_admin"].get("revision")
-                vnfr_vnfd_revision = vnfr.get("revision")
-                old_vnfd_id = vnfd_id + ":" + str(vnfr_vnfd_revision)
-                old_db_vnfd = self.db.get_one("vnfds_revisions", {"_id": old_vnfd_id})
-                old_sw_version = old_db_vnfd["software-version"]
-                new_sw_version = vnfd["software-version"]
-                if new_sw_version != old_sw_version:
-                    vnf_index = vnfr["member-vnf-index-ref"]
-                    self.logger.info("nsr {}".format(nsr))
-                    for vdu in vnfd["vdu"]:
-                        self.nsrtopic._add_flavor_to_nsr(vdu, vnfd, nsr)
-                        sw_image_id = vdu.get("sw-image-desc")
-                        if sw_image_id:
-                            image_data = self.nsrtopic._get_image_data_from_vnfd(vnfd, sw_image_id)
-                            self.nsrtopic._add_image_to_nsr(nsr, image_data)
-                        for alt_image in vdu.get("alternative-sw-image-desc", ()):
-                            image_data = self.nsrtopic._get_image_data_from_vnfd(vnfd, alt_image)
-                            self.nsrtopic._add_image_to_nsr(nsr, image_data)
-                    nsr_update["image"] = nsr["image"]
-                    nsr_update["flavor"] = nsr["flavor"]
-                    self.db.set_one("nsrs", {"_id": nsr["_id"]}, nsr_update)
-                    ns_k8s_namespace = self.nsrtopic._get_ns_k8s_namespace(nsd, ns_request, session)
-                    vnfr_descriptor = self.nsrtopic._create_vnfr_descriptor_from_vnfd(
-                        nsd,
-                        vnfd,
-                        vnfd_id,
-                        vnf_index,
-                        nsr,
-                        ns_request,
-                        ns_k8s_namespace,
-                    )
-                    indata["newVdur"] = vnfr_descriptor["vdur"]
-                    # self.logger.info("vnfr_descriptor {}".format(vnfr_descriptor))
+                latest_vnfd_revision = vnfd["_admin"].get("revision", 1)
+                vnfr_vnfd_revision = vnfr.get("revision", 1)
+                if latest_vnfd_revision != vnfr_vnfd_revision:
+                    old_vnfd_id = vnfd_id + ":" + str(vnfr_vnfd_revision)
+                    old_db_vnfd = self.db.get_one("vnfds_revisions", {"_id": old_vnfd_id})
+                    old_sw_version = old_db_vnfd.get("software-version", "1.0")
+                    new_sw_version = vnfd.get("software-version", "1.0")
+                    if new_sw_version != old_sw_version:
+                        vnf_index = vnfr["member-vnf-index-ref"]
+                        self.logger.info("nsr {}".format(nsr))
+                        for vdu in vnfd["vdu"]:
+                            self.nsrtopic._add_flavor_to_nsr(vdu, vnfd, nsr)
+                            sw_image_id = vdu.get("sw-image-desc")
+                            if sw_image_id:
+                                image_data = self.nsrtopic._get_image_data_from_vnfd(vnfd, sw_image_id)
+                                self.nsrtopic._add_image_to_nsr(nsr, image_data)
+                            for alt_image in vdu.get("alternative-sw-image-desc", ()):
+                                image_data = self.nsrtopic._get_image_data_from_vnfd(vnfd, alt_image)
+                                self.nsrtopic._add_image_to_nsr(nsr, image_data)
+                        nsr_update["image"] = nsr["image"]
+                        nsr_update["flavor"] = nsr["flavor"]
+                        self.db.set_one("nsrs", {"_id": nsr["_id"]}, nsr_update)
+                        ns_k8s_namespace = self.nsrtopic._get_ns_k8s_namespace(nsd, ns_request, session)
+                        vnfr_descriptor = self.nsrtopic._create_vnfr_descriptor_from_vnfd(
+                            nsd,
+                            vnfd,
+                            vnfd_id,
+                            vnf_index,
+                            nsr,
+                            ns_request,
+                            ns_k8s_namespace,
+                        )
+                        indata["newVdur"] = vnfr_descriptor["vdur"]
             nslcmop_desc = self._create_nslcmop(nsInstanceId, operation, indata)
             _id = nslcmop_desc["_id"]
             self.format_on_new(
