diff --git a/osm_im/validation.py b/osm_im/validation.py
index 561e716..7eff67e 100644
--- a/osm_im/validation.py
+++ b/osm_im/validation.py
@@ -79,3 +79,66 @@
         item, data = self.yaml_validation(descriptor)
         self.pyangbind_validation(item, data)
 
+    def validate_instantiation_level_descriptor(self, indata):
+        all_vdu_ids = set()
+        for vdu in indata.get("vdu", ()):
+            all_vdu_ids.add(vdu.get("id"))
+
+        for df in indata.get("df", ()):
+            for il in df.get("instantiation-level", ()):
+                for vl in il.get("vdu-level", ()):
+                    vl_vdu_id = vl.get("vdu-id")
+                    if vl_vdu_id and vl_vdu_id not in all_vdu_ids:
+                        raise ValidationException(
+                            "df[id='{}']:instantiation-level[id='{}']:vdu-level"
+                            "vdu-id='{}' not defined in vdu".format(
+                                df["id"],
+                                il["id"],
+                                vl_vdu_id,
+                            )
+                        )
+
+    def validate_vdu_profile_in_descriptor(self, indata):
+        all_vdu_ids = set()
+        for df in indata.get("df", ()):
+            if "vdu-profile" in df:
+                if not df.get("vdu-profile"):
+                    if indata.get("vdu"):
+                        raise ValidationException(
+                            "no profiles are defined under vdu-profile section"
+                        )
+                for vp in df["vdu-profile"]:
+                    missing = None
+                    if not vp.get("id"):
+                        missing = "id"
+                    if df.get("scaling-aspect"):
+                        if not vp.get("min-number-of-instances"):
+                            missing = "min-number-of-instances"
+                    if "min-number-of-instances" in vp:
+                        if not vp.get("min-number-of-instances"):
+                            missing = "min-number-of-instances"
+                    if "max-number-of-instances" in vp:
+                        if not vp.get("max-number-of-instances"):
+                            missing = "max-number-of-instances"
+                    if missing:
+                        raise ValidationException(
+                            "{} key-value pair is missing in vdu-profile".format(
+                                missing
+                            )
+                        )
+
+        for df in indata.get("df", ()):
+            for il in df.get("instantiation-level", ()):
+                for vl in il.get("vdu-level", ()):
+                    all_vdu_ids.add(vl.get("vdu-id"))
+
+        for df in indata.get("df", ()):
+            for vp in df.get("vdu-profile", ()):
+                vp_vdu_id = vp.get("id")
+                if vp_vdu_id and vp_vdu_id not in all_vdu_ids:
+                    raise ValidationException(
+                        "df[id='{}']:vdu-profile:vdu-id='{}' not defined in vdu".format(
+                            df["id"],
+                            vp_vdu_id,
+                        )
+                    )
