diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index 0391518..0c717a6 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -17,7 +17,8 @@
 package org.onosproject.yangutils.datamodel;
 
 import java.io.Serializable;
-
+import java.util.LinkedList;
+import java.util.List;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -43,16 +44,16 @@
  *       | substatement | section | cardinality |data model mapping|
  *       +--------------+---------+-------------+------------------+
  *       | config       | 7.19.1  | 0..1        | - boolean        |
- *       | default      | 7.6.4   | 0..1        | - TODO           |
+ *       | default      | 7.6.4   | 0..1        | - string         |
  *       | description  | 7.19.3  | 0..1        | - string         |
- *       | if-feature   | 7.18.2  | 0..n        | - TODO           |
+ *       | if-feature   | 7.18.2  | 0..n        | - YangIfFeature  |
  *       | mandatory    | 7.6.5   | 0..1        | - boolean        |
- *       | must         | 7.5.3   | 0..n        | - TODO           |
+ *       | must         | 7.5.3   | 0..n        | - YangMust       |
  *       | reference    | 7.19.4  | 0..1        | - string         |
  *       | status       | 7.19.2  | 0..1        | - YangStatus     |
  *       | type         | 7.6.3   | 1           | - YangType       |
  *       | units        | 7.3.3   | 0..1        | - String         |
- *       | when         | 7.19.5  | 0..1        | - TODO           |
+ *       | when         | 7.19.5  | 0..1        | - YangWhen       |
  *       +--------------+---------+-------------+------------------+
  */
 
@@ -60,7 +61,8 @@
  * Represents leaf data represented in YANG.
  */
 public class YangLeaf
-        implements YangCommonInfo, Parsable, Cloneable, Serializable {
+        implements YangCommonInfo, Parsable, Cloneable, Serializable,
+        YangMustHolder, YangIfFeatureHolder, YangWhenHolder {
 
     private static final long serialVersionUID = 806201635L;
 
@@ -111,11 +113,26 @@
     private String defaultValueInString;
 
     /**
+     * When data of the leaf.
+     */
+    private YangWhen when;
+
+    /**
      * YANG Node in which the leaf is contained.
      */
     private transient YangLeavesHolder containedIn;
 
     /**
+     * List of must statement constraints.
+     */
+    private List<YangMust> mustConstraintList;
+
+    /**
+     * List of if-feature.
+     */
+    private List<YangIfFeature> ifFeatureList;
+
+    /**
      * Creates a YANG leaf.
      */
     public YangLeaf() {
@@ -158,6 +175,26 @@
     }
 
     /**
+     * Returns the when.
+     *
+     * @return the when
+     */
+    @Override
+    public YangWhen getWhen() {
+        return when;
+    }
+
+    /**
+     * Sets the when.
+     *
+     * @param when the when to set
+     */
+    @Override
+    public void setWhen(YangWhen when) {
+        this.when = when;
+    }
+
+    /**
      * Returns the description.
      *
      * @return the description
@@ -346,4 +383,40 @@
         // TODO auto-generated method stub, to be implemented by parser
 
     }
+
+    @Override
+    public List<YangMust> getListOfMust() {
+        return mustConstraintList;
+    }
+
+    @Override
+    public void setListOfMust(List<YangMust> mustConstraintList) {
+        this.mustConstraintList = mustConstraintList;
+    }
+
+    @Override
+    public void addMust(YangMust must) {
+        if (getListOfMust() == null) {
+            setListOfMust(new LinkedList<>());
+        }
+        getListOfMust().add(must);
+    }
+
+    @Override
+    public List<YangIfFeature> getIfFeatureList() {
+        return ifFeatureList;
+    }
+
+    @Override
+    public void addIfFeatureList(YangIfFeature ifFeature) {
+        if (getIfFeatureList() == null) {
+            setIfFeatureList(new LinkedList<>());
+        }
+        getIfFeatureList().add(ifFeature);
+    }
+
+    @Override
+    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+        this.ifFeatureList = ifFeatureList;
+    }
 }
