diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
index 442cda0..9ccd5ff 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
@@ -13,12 +13,14 @@
 limitations under the License.*/
 package org.onosproject.yangutils.datamodel;
 
+import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo;
+
 /**
  * Represents single interval information of a range.
  *
- * @param <T> range type based on the data type.
+ * @param <T> range type based on the data type
  */
-public class YangRangeInterval<T extends Comparable<T>> {
+public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> {
 
     /**
      * Starting value of the range interval.
@@ -39,7 +41,7 @@
     /**
      * Returns the starting value of the range interval.
      *
-     * @return the starting value of the range interval.
+     * @return the starting value of the range interval
      */
     public T getStartValue() {
         return startValue;
@@ -48,7 +50,7 @@
     /**
      * Sets the starting value of the range interval.
      *
-     * @param startValue the starting value of the range interval.
+     * @param startValue the starting value of the range interval
      */
     public void setStartValue(T startValue) {
         this.startValue = startValue;
@@ -57,7 +59,7 @@
     /**
      * Returns the last value of the range interval.
      *
-     * @return last value of the range interval.
+     * @return last value of the range interval
      */
     public T getEndValue() {
         return endValue;
@@ -66,7 +68,7 @@
     /**
      * Sets the last value of the range interval.
      *
-     * @param endValue last value of the range interval.
+     * @param endValue last value of the range interval
      */
     public void setEndValue(T endValue) {
         this.endValue = endValue;
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
index 09eb796..38b48bd 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
@@ -20,7 +20,9 @@
 import java.util.List;
 
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo;
 
+import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /*-
@@ -47,12 +49,14 @@
  *  "max". "min" and "max" mean the minimum and maximum value accepted
  *  for the type being restricted, respectively.
  */
+
 /**
  * Represents ascending range restriction information.
  *
  * @param <T> range type (data type)
  */
-public class YangRangeRestriction<T extends Comparable<T>> implements YangDesc, YangReference, YangAppErrorInfo {
+public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>>
+        implements YangDesc, YangReference, YangAppErrorInfo {
 
     /**
      * Ascending list of range interval restriction. If the restriction is a
@@ -171,6 +175,37 @@
     }
 
     /**
+     * Check if the given value is correct as per the restriction.
+     *
+     * @param valueInString value
+     * @return true, if the value is confirming to restriction, false otherwise
+     * @throws DataModelException data model error
+     */
+    public boolean isValidValueString(String valueInString) throws DataModelException {
+
+        if (getAscendingRangeIntervals() == null
+                || getAscendingRangeIntervals().size() == 0) {
+            // Throw exception, At least one default range needs to be set in constructor or in linker.
+            throw new DataModelException("Range interval missing in range restriction.");
+
+        }
+
+        YangDataTypes type = getAscendingRangeIntervals().get(0).getStartValue().getYangType();
+        YangBuiltInDataTypeInfo<?> value = getDataObjectFromString(valueInString, type);
+
+        for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
+            int rangeStartCompareRes = interval.getStartValue().compareTo((T) value);
+            int rangeEndCompareRes = interval.getEndValue().compareTo((T) value);
+
+            if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Returns the textual reference of the length restriction.
      *
      * @return textual reference of the length restriction
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
index 50a1f83..f2c67c3 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
@@ -16,7 +16,7 @@
 
 package org.onosproject.yangutils.datamodel;
 
-import java.math.BigInteger;
+import org.onosproject.yangutils.utils.builtindatatype.YangUint64;
 
 /*-
  * Reference RFC 6020.
@@ -64,10 +64,11 @@
      *  | reference     | 7.19.4  | 0..1        | string          |
      *  +---------------+---------+-------------+-----------------+
      */
+
     /**
      * Length restriction information.
      */
-    private YangRangeRestriction<BigInteger> lengthRestriction;
+    private YangRangeRestriction<YangUint64> lengthRestriction;
 
     /**
      * Effective pattern restriction for the type.
@@ -85,7 +86,7 @@
      *
      * @return length restriction on the string data
      */
-    public YangRangeRestriction<BigInteger> getLengthRestriction() {
+    public YangRangeRestriction<YangUint64> getLengthRestriction() {
         return lengthRestriction;
     }
 
@@ -94,7 +95,7 @@
      *
      * @param lengthRestriction length restriction on the string data
      */
-    public void setLengthRestriction(YangRangeRestriction<BigInteger> lengthRestriction) {
+    public void setLengthRestriction(YangRangeRestriction<YangUint64> lengthRestriction) {
         this.lengthRestriction = lengthRestriction;
     }
 
