diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangType.java b/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
index 2a0c878..d37a8c7 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
@@ -20,7 +20,6 @@
 import org.onosproject.yangutils.parser.Parsable;
 import org.onosproject.yangutils.utils.YangConstructType;
 
-import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED;
 import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
 
 /*
@@ -78,18 +77,6 @@
     private T dataTypeExtendedInfo;
 
     /**
-     * Effective built-in type, requried in case type of typedef is again a
-     * derived type. This information is to be added during linking.
-     */
-    private YangDataTypes effectiveBuiltInType;
-
-    /**
-     * Effective pattern restriction, requried in case type of typedef is again
-     * a derived type. This information is to be added during linking.
-     */
-    private YangPatternRestriction effectivePatternRestriction;
-
-    /**
      * Status of resolution. If completely resolved enum value is "RESOLVED",
      * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
      * is added to uses/type but it's not resolved value of enum should be
@@ -215,42 +202,6 @@
     }
 
     /**
-     * Return effective built-in type.
-     *
-     * @return effective built-in type
-     */
-    public YangDataTypes getEffectiveBuiltInType() {
-        return effectiveBuiltInType;
-    }
-
-    /**
-     * Sets effective built-in type.
-     *
-     * @param effectiveBuiltInType effective built-in type
-     */
-    public void setEffectiveBuiltInType(YangDataTypes effectiveBuiltInType) {
-        this.effectiveBuiltInType = effectiveBuiltInType;
-    }
-
-    /**
-     * Returns effective pattern restriction.
-     *
-     * @return effective pattern restriction
-     */
-    public YangPatternRestriction getEffectivePatternRestriction() {
-        return effectivePatternRestriction;
-    }
-
-    /**
-     * Sets effective pattern restriction.
-     *
-     * @param effectivePatternRestriction effective pattern restriction
-     */
-    public void setEffectivePatternRestriction(YangPatternRestriction effectivePatternRestriction) {
-        this.effectivePatternRestriction = effectivePatternRestriction;
-    }
-
-    /**
      * Returns the type of the parsed data.
      *
      * @return returns TYPE_DATA
@@ -269,7 +220,6 @@
     public void validateDataOnEntry()
             throws DataModelException {
         // TODO auto-generated method stub, to be implemented by parser
-
     }
 
     /**
@@ -281,7 +231,6 @@
     public void validateDataOnExit()
             throws DataModelException {
         // TODO auto-generated method stub, to be implemented by parser
-
     }
 
     @Override
@@ -297,17 +246,19 @@
     @Override
     public void resolve() throws DataModelException {
        /*
-       Inherit the Restriction from the referred typedef definition.
+        * Check whether the data type is derived.
         */
         if (getDataType() != DERIVED) {
-            throw new DataModelException("Resolve should only be called for derived data types");
+            throw new DataModelException("Linker Error: Resolve should only be called for derived data types.");
         }
 
-        YangDerivedInfo<?> derrivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
-        YangType<?> baseType = derrivedInfo.getReferredTypeDef().getTypeDefBaseType();
-        if (DERIVED == baseType.getDataType() && baseType.getResolvableStatus() == INTRA_FILE_RESOLVED) {
-                setResolvableStatus(INTRA_FILE_RESOLVED);
+        // Check if the derived info is present.
+        YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
+        if (derivedInfo == null) {
+            throw new DataModelException("Linker Error: Derived information is missing.");
         }
-        //TODO:
+
+        // Initiate the resolution
+        setResolvableStatus(derivedInfo.resolve());
     }
 }
