diff --git a/compiler/base/datamodel/pom.xml b/compiler/base/datamodel/pom.xml
index 93e0923..244c3d4 100644
--- a/compiler/base/datamodel/pom.xml
+++ b/compiler/base/datamodel/pom.xml
@@ -17,6 +17,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-compiler-utils</artifactId>
+            <version>2.02-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
 
     <parent>
         <groupId>org.onosproject</groupId>
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ConflictResolveNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ConflictResolveNode.java
new file mode 100644
index 0000000..d80f7c4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ConflictResolveNode.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction to unify the YANG identity and typedef name collision detection
+ * functionality.
+ */
+public interface ConflictResolveNode extends YangSchemaNode {
+
+    /**
+     * Returns the suffix for the given conflicted type.
+     *
+     * @return suffix
+     */
+    String getSuffix();
+
+    /**
+     * Returns the flag to identify is there YANG identity and typedef name
+     * conflict.
+     *
+     * @return true, if identity and typedef name conflicts otherwise false
+     */
+    boolean isNameConflict();
+
+    /**
+     * Sets the conflict flag for requested identity or typedef node.
+     */
+    void setConflictFlag();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java
index 2e3d67f..2c8da5d 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.yang.compiler.datamodel;
 
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
 import java.util.List;
 
 /**
@@ -72,4 +74,15 @@
      * @return list of notification nodes
      */
     List<YangNode> getNotificationNodes();
+
+    /**
+     * Adds typedef or identity nodes in module/sub-module.
+     *
+     * @param name node name
+     * @param node YANG node
+     * @throws DataModelException if name conflict occurs for typedef or
+     *                            identity node.
+     */
+    void addToIdentityTypedefMap(String name, YangNode node)
+            throws DataModelException;
 }
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java
index 24bfeab..608c1ea 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java
@@ -23,6 +23,8 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import static org.onosproject.yang.compiler.utils.UtilConstants.IDENTITY;
+
 /*-
  * Reference RFC 6020.
  *
@@ -51,7 +53,8 @@
  */
 public abstract class YangIdentity
         extends YangNode
-        implements YangCommonInfo, Parsable, Serializable, YangTranslatorOperatorNode {
+        implements YangCommonInfo, Parsable, Serializable,
+        YangTranslatorOperatorNode, ConflictResolveNode {
 
     private static final long serialVersionUID = 806201691L;
 
@@ -73,6 +76,11 @@
      */
     private List<YangIdentity> extendList;
 
+    /**
+     * Flag to distinguish name conflict between typedef and identity.
+     */
+    private boolean nameConflict;
+
     //Creates a identity type of node.
     public YangIdentity() {
         super(YangNodeType.IDENTITY_NODE, null);
@@ -190,4 +198,19 @@
     public void addToExtendList(YangIdentity identity) {
         extendList.add(identity);
     }
+
+    @Override
+    public String getSuffix() {
+        return IDENTITY;
+    }
+
+    @Override
+    public boolean isNameConflict() {
+        return nameConflict;
+    }
+
+    @Override
+    public void setConflictFlag() {
+        nameConflict = true;
+    }
 }
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
index 59ec805..17ac363 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
@@ -40,6 +40,7 @@
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.linkInterFileReferences;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.updateMap;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.validateUniqueInList;
 import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MODULE_DATA;
 
@@ -278,6 +279,12 @@
     private final List<YangAugment> augments;
 
     /**
+     * Map of typedef or identity with the list of corresponding schema
+     * node to find the name conflict.
+     */
+    private final Map<String, LinkedList<YangNode>> identityTypedefMap;
+
+    /**
      * List of unique identifiers List.
      */
     private List<YangUniqueHolder> uniqueHolderList;
@@ -324,6 +331,7 @@
         augments = new LinkedList<>();
         uniqueHolderList = new LinkedList<>();
         usesAugmentList = new LinkedList<>();
+        identityTypedefMap = new HashMap<>();
     }
 
     @Override
@@ -949,6 +957,14 @@
         isModuleForDeviation = moduleForDeviation;
     }
 
+    @Override
+    public void addToIdentityTypedefMap(String name, YangNode node)
+            throws DataModelException {
+        if (node instanceof ConflictResolveNode) {
+            updateMap(name, node, identityTypedefMap);
+        }
+    }
+
     /**
      * Sets true if rpc is present.
      *
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
index 8130e01..a37d262 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
@@ -17,6 +17,7 @@
 
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
@@ -317,6 +318,10 @@
 
         if (newChild.getParent() == null) {
             newChild.setParent(this);
+            if (this instanceof RpcNotificationContainer) {
+                ((RpcNotificationContainer) this).addToIdentityTypedefMap(
+                        YangIoUtils.getCamelCase(newChild.getName(), null), newChild);
+            }
         } else if (newChild.getParent() != this) {
             throw new DataModelException("Node is already part of a tree " +
                                                  getName() + " in " +
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
index 61ad3f4..42173f4 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
@@ -20,6 +20,7 @@
 import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +42,7 @@
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.linkInterFileReferences;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.updateMap;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.validateUniqueInList;
 import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.SUB_MODULE_DATA;
 
@@ -304,6 +306,12 @@
     private boolean isRpcPresent;
 
     /**
+     * Map of typedef or identity with the list of corresponding schema
+     * node to find the name conflict.
+     */
+    private final Map<String, LinkedList<YangNode>> identityTypedefMap;
+
+    /**
      * Creates a sub module node.
      */
     public YangSubModule() {
@@ -327,6 +335,7 @@
         augments = new LinkedList<>();
         uniqueHolderList = new LinkedList<>();
         usesAugmentList = new LinkedList<>();
+        identityTypedefMap = new LinkedHashMap<>();
     }
 
     @Override
@@ -955,6 +964,14 @@
         }
     }
 
+    @Override
+    public void addToIdentityTypedefMap(String name, YangNode node)
+            throws DataModelException {
+        if (node instanceof ConflictResolveNode) {
+            updateMap(name, node, identityTypedefMap);
+        }
+    }
+
     /**
      * Returns true if rpc is present.
      *
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java
index ed7f3c2..401a982 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java
@@ -18,6 +18,7 @@
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.compiler.datamodel.utils.Parsable;
 import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.utils.UtilConstants;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -67,7 +68,7 @@
 public abstract class YangTypeDef
         extends YangNode
         implements YangCommonInfo, Parsable, YangTypeHolder, CollisionDetector,
-        YangTranslatorOperatorNode, YangUnits, YangDefault {
+        YangTranslatorOperatorNode, YangUnits, YangDefault, ConflictResolveNode {
 
     private static final long serialVersionUID = 806201615L;
 
@@ -104,6 +105,11 @@
     private final List<YangType<?>> typeList;
 
     /**
+     * Flag to distinguish name conflict between typedef and identity.
+     */
+    private boolean nameConflict = false;
+
+    /**
      * Creates a typedef node.
      */
     public YangTypeDef() {
@@ -314,4 +320,19 @@
                                          TYPEDEF, getFileName()));
         }
     }
+
+    @Override
+    public String getSuffix() {
+        return UtilConstants.TYPEDEF;
+    }
+
+    @Override
+    public boolean isNameConflict() {
+        return nameConflict;
+    }
+
+    @Override
+    public void setConflictFlag() {
+        nameConflict = true;
+    }
 }
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
index 390ca67..e1caeb0 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
@@ -17,6 +17,7 @@
 package org.onosproject.yang.compiler.datamodel.utils;
 
 import org.onosproject.yang.compiler.datamodel.CollisionDetector;
+import org.onosproject.yang.compiler.datamodel.ConflictResolveNode;
 import org.onosproject.yang.compiler.datamodel.DefaultYangNamespace;
 import org.onosproject.yang.compiler.datamodel.SchemaDataNode;
 import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
@@ -116,6 +117,8 @@
 public final class DataModelUtils {
     public static final String TRUE = "true";
     public static final String FALSE = "false";
+    public static final String TYPEDEF = "Typedef";
+    public static final String IDENTITY = "Identity";
     private static final String SLASH = File.separator;
     public static final String FMT_NOT_EXIST =
             "Requested %s is not child in %s.";
@@ -130,6 +133,9 @@
             " node in unique reference path is invalid";
     private static final String E_DATATREE = "Internal datamodel error: Datam" +
             "odel tree is not correct";
+    public static final String E_NOT_ALLOWED =
+            "%s with the name %s in file %s at line %s is not allowed. Please" +
+                    " avoid the %s extension in the name.";
 
     /**
      * Creates a new data model tree utility.
@@ -1462,4 +1468,52 @@
         }
         return null;
     }
+
+    /**
+     * Updates the identity and typedef info in module/sub-module map.
+     *
+     * @param name java name of the node
+     * @param node YANG node
+     * @param map  typedef and identity map
+     * @throws DataModelException exception when two identity or
+     *                            typedef present with same name
+     */
+    public static void updateMap(String name, YangNode node, Map<String,
+            LinkedList<YangNode>> map) throws DataModelException {
+        YangNode oldNode;
+        if (!map.containsKey(name)) {
+            LinkedList<YangNode> list = new LinkedList<>();
+            list.push(node);
+            map.put(name, list);
+        } else {
+            LinkedList<YangNode> value = map.get(name);
+            oldNode = value.get(0);
+            if (value.size() >= 2) {
+                if (!node.getNodeType().equals(oldNode.getNodeType())) {
+                    oldNode = value.get(1);
+                }
+                throw new DataModelException(composeErrorMsg(node, oldNode));
+            }
+            if (oldNode.getNodeType().equals(node.getNodeType())) {
+                throw new DataModelException(composeErrorMsg(node, oldNode));
+            }
+            ((ConflictResolveNode) oldNode).setConflictFlag();
+            ((ConflictResolveNode) node).setConflictFlag();
+            value.push(node);
+        }
+    }
+
+    /**
+     * Composes the error message for given new and existing YANG node
+     * name conflict.
+     *
+     * @param node    newly added YANG node
+     * @param oldNode existing YANG node.
+     */
+    private static String composeErrorMsg(YangNode node, YangNode oldNode) {
+        return "Node with name " + node.getName() + " in file " +
+                node.getFileName() + " at line " + node.getLineNumber() +
+                " is already present " + "in file " + oldNode.getFileName() +
+                " at " + "line " + oldNode.getLineNumber() + "" + ".";
+    }
 }
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java
index a8e27d0..c99e0ff 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java
@@ -38,6 +38,7 @@
 import org.onosproject.yang.compiler.datamodel.YangTranslatorOperatorNode;
 import org.onosproject.yang.compiler.datamodel.YangType;
 import org.onosproject.yang.compiler.datamodel.YangTypeHolder;
+import org.onosproject.yang.compiler.datamodel.ConflictResolveNode;
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
 import org.onosproject.yang.compiler.translator.exception.TranslatorException;
 import org.onosproject.yang.compiler.translator.tojava.javamodel.JavaLeafInfoContainer;
@@ -137,6 +138,10 @@
         } else {
             javaGenName = ((YangNode) info).getName();
         }
+        if (info instanceof ConflictResolveNode && ((ConflictResolveNode)
+                info).isNameConflict()) {
+            javaGenName = javaGenName + ((ConflictResolveNode) info).getSuffix();
+        }
         info.getJavaFileInfo().setJavaName(getCamelCase(
                 javaGenName, config.getConflictResolver()));
     }
@@ -190,9 +195,13 @@
     private static void updatePackageInfo(JavaCodeGeneratorInfo info,
                                           YangPluginConfig config,
                                           String pkg) {
-
+        String name = ((YangNode) info).getName();
         JavaFileInfoTranslator translator = info.getJavaFileInfo();
-        translator.setJavaName(getCamelCase(((YangNode) info).getName(),
+        if (info instanceof ConflictResolveNode && ((ConflictResolveNode)
+                info).isNameConflict()) {
+            name = name + ((ConflictResolveNode) info).getSuffix();
+        }
+        translator.setJavaName(getCamelCase(name,
                                             config.getConflictResolver()));
         translator.setPackage(pkg);
         updateCommonPackageInfo(translator, info, config);
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java
index 04a5321..3d1004c 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -23,12 +23,15 @@
 import org.onosproject.yang.compiler.datamodel.YangLeafRef;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
 import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.ConflictResolveNode;
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yang.compiler.translator.exception.TranslatorException;
 import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
 import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
 import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.utils.UtilConstants;
 import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
 
 import java.util.Stack;
@@ -181,8 +184,7 @@
                 case INSTANCE_IDENTIFIER:
                     return STRING_DATA_TYPE;
                 case DERIVED:
-                    return getCapitalCase(
-                            getCamelCase(yangType.getDataTypeName(), pluginConfig));
+                    return getDerivedImplClass(yangType, pluginConfig);
                 default:
                     throw new TranslatorException("given data type is not supported ." +
                                                           yangType.getDataTypeName() + " in " +
@@ -216,8 +218,7 @@
                 case INSTANCE_IDENTIFIER:
                     return STRING_DATA_TYPE;
                 case DERIVED:
-                    return getCapitalCase(
-                            getCamelCase(yangType.getDataTypeName(), pluginConfig));
+                    return getDerivedImplClass(yangType, pluginConfig);
                 default:
                     return null;
             }
@@ -225,6 +226,25 @@
     }
 
     /**
+     * Returns the derived type import class.
+     *
+     * @param yangType     yang type
+     * @param pluginConfig YANG to java naming conflict util
+     * @return import class
+     */
+    private static String getDerivedImplClass(
+            YangType<?> yangType, YangToJavaNamingConflictUtil pluginConfig) {
+        String name = yangType.getDataTypeName();
+        YangDerivedInfo derivedInfo = (YangDerivedInfo) yangType
+                .getDataTypeExtendedInfo();
+        YangTypeDef typeDef = derivedInfo.getReferredTypeDef();
+        if (typeDef.isNameConflict()) {
+            name = name + UtilConstants.TYPEDEF;
+        }
+        return getCapitalCase(getCamelCase(name, pluginConfig));
+    }
+
+    /**
      * Returns java import package.
      *
      * @param yangType         YANG type
@@ -451,11 +471,11 @@
      * Update the referred data model nodes java file info, this will be called,
      * when the linked node is yet to translate. Then resolve until the parent hierarchy.
      *
-     * @param yangNode         node whose java info needs to be updated
-     * @param conflictResolver yang plugin config
+     * @param yangNode node whose java info needs to be updated
+     * @param conf     yang plugin config
      */
     public static void updateJavaFileInfo(YangNode yangNode,
-                                          YangToJavaNamingConflictUtil conflictResolver) {
+                                          YangToJavaNamingConflictUtil conf) {
         Stack<YangNode> nodesToUpdatePackage = new Stack<>();
 
         /*
@@ -478,12 +498,12 @@
             if (yangNode instanceof YangJavaModuleTranslator) {
                 YangJavaModuleTranslator module = (YangJavaModuleTranslator) yangNode;
                 pkg = getRootPackage(module.getVersion(), module.getModuleName(),
-                                     module.getRevision(), conflictResolver);
+                                     module.getRevision(), conf);
             } else if (yangNode instanceof YangJavaSubModuleTranslator) {
                 YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) yangNode;
                 pkg = getRootPackage(submodule.getVersion(),
                                      submodule.getModuleName(),
-                                     submodule.getRevision(), conflictResolver);
+                                     submodule.getRevision(), conf);
             } else {
                 throw new TranslatorException("Invalid root node of data model tree " +
                                                       yangNode.getName() + " in " +
@@ -491,15 +511,7 @@
                                                       yangNode.getCharPosition()
                                                       + " in " + yangNode.getFileName());
             }
-
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setPackage(pkg);
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setPackageFilePath(getPackageDirPathFromJavaJPackage(
-                            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                                    .getPackage()));
+            setJavaCodeGenInfo(yangNode, conf, pkg);
         }
 
         /*
@@ -508,18 +520,32 @@
          */
         while (nodesToUpdatePackage.size() != 0) {
             yangNode = nodesToUpdatePackage.pop();
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setPackage(getCurNodePackage(yangNode));
-            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                    .setPackageFilePath(getPackageDirPathFromJavaJPackage(
-                            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
-                                    .getPackage()));
+            setJavaCodeGenInfo(yangNode, conf, getCurNodePackage(yangNode));
         }
     }
 
     /**
+     * Sets the java code generator info for given YANG node.
+     *
+     * @param node YANG node
+     * @param conf conflict util
+     * @param pkg  current node package
+     */
+    private static void setJavaCodeGenInfo(
+            YangNode node, YangToJavaNamingConflictUtil conf, String pkg) {
+        String name = node.getName();
+        JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) node)
+                .getJavaFileInfo();
+        if (node instanceof ConflictResolveNode && (
+                (ConflictResolveNode) node).isNameConflict()) {
+            name = name + ((ConflictResolveNode) node).getSuffix();
+        }
+        info.setJavaName(getCamelCase(name, conf));
+        info.setPackage(pkg);
+        info.setPackageFilePath(getPackageDirPathFromJavaJPackage(pkg));
+    }
+
+    /**
      * Returns the referred type from leaf/leaf-list.
      *
      * @param type current type in leaf
@@ -559,7 +585,11 @@
             return OBJECT_STRING;
         }
         YangIdentity identity = ir.getReferredIdentity();
-        return getCapitalCase(getCamelCase(identity.getName(), cnfg));
+        String name = identity.getName();
+        if (identity.isNameConflict()) {
+            name = name + UtilConstants.IDENTITY;
+        }
+        return getCapitalCase(getCamelCase(name, cnfg));
     }
 
     /**
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java
index 265107e..3b7fa5e 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java
@@ -48,6 +48,7 @@
 import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
 import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IDENTITY;
 import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_FILE_EXTENSION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
 import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
@@ -190,10 +191,16 @@
      */
     private List<String> getImportOfDerId(List<YangIdentity> idList,
                                           List<String> imports, String className) {
+        String derClassName;
         if (idList != null) {
             for (YangIdentity id : idList) {
-                String derClassName = getCapitalCase(
-                        getCamelCase(id.getName(), null));
+                if (id.isNameConflict()) {
+                    derClassName = getCapitalCase(
+                            getCamelCase(id.getName() + IDENTITY, null));
+                } else {
+                    derClassName = getCapitalCase(
+                            getCamelCase(id.getName(), null));
+                }
                 JavaFileInfoTranslator info = ((
                         YangJavaIdentityTranslator) id).getJavaFileInfo();
                 String derPkg = info.getPackage();
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java
index c7630fa..ed46a96 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java
@@ -94,6 +94,7 @@
 import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
 import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.signatureClose;
 import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.valueAssign;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getIdentityRefName;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ADD;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_AUGMENTATION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_STRING;
@@ -140,6 +141,7 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.GET_METHOD_PREFIX;
 import static org.onosproject.yang.compiler.utils.UtilConstants.HASH;
 import static org.onosproject.yang.compiler.utils.UtilConstants.HASH_CODE_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IDENTITY;
 import static org.onosproject.yang.compiler.utils.UtilConstants.IF;
 import static org.onosproject.yang.compiler.utils.UtilConstants.IMPLEMENTS;
 import static org.onosproject.yang.compiler.utils.UtilConstants.INSTANCE_OF;
@@ -1728,8 +1730,9 @@
                 YangIdentityRef ir = (YangIdentityRef) type
                         .getDataTypeExtendedInfo();
                 YangIdentity identity = ir.getReferredIdentity();
-                String idName = getCamelCase(identity.getName(), null);
-                return getCapitalCase(idName) + PERIOD + idName + TO_CAPS +
+                String idName = getCamelCase(getIdentityRefName(type), null);
+                return getCapitalCase(idName) + PERIOD +
+                        getCamelCase(identity.getName(), null) + TO_CAPS +
                         STRING_DATA_TYPE + OPEN_CLOSE_BRACKET_STRING;
             case ENUMERATION:
             case INSTANCE_IDENTIFIER:
@@ -1883,7 +1886,11 @@
             for (YangIdentity id : idList) {
                 cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
                                               getQuotedString(id.getName()));
-                name = getCamelCase(id.getName(), null);
+                if (id.isNameConflict()) {
+                    name = getCamelCase(id.getName() + IDENTITY, null);
+                } else {
+                    name = getCamelCase(id.getName(), null);
+                }
                 caps = getCapitalCase(name);
                 returnVal = caps + PERIOD + CLASS;
                 builder.append(getElseIfConditionBegin(
@@ -1947,7 +1954,7 @@
      *
      * @param name         class name
      * @param modifierType modifier type
-     * @param params       parameters for constrcutor
+     * @param params       parameters for constructor
      * @param space        indentation for constructor
      * @return parameterisied constructor method string
      */
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java
index 421899a..ff8c231 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java
@@ -18,8 +18,6 @@
 
 import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
 import org.onosproject.yang.compiler.datamodel.YangDataStructure;
-import org.onosproject.yang.compiler.datamodel.YangIdentity;
-import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
 import org.onosproject.yang.compiler.datamodel.YangType;
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yang.compiler.translator.exception.TranslatorException;
@@ -47,6 +45,7 @@
 import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE;
 import static org.onosproject.yang.compiler.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
 import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getIdentityRefName;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ABSTRACT;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ADD;
 import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_STRING;
@@ -752,10 +751,8 @@
                 return targetDataType + PERIOD + OF;
 
             case IDENTITYREF:
-                YangIdentityRef ir = (YangIdentityRef) yangType
-                        .getDataTypeExtendedInfo();
-                YangIdentity identity = ir.getReferredIdentity();
-                return getCapitalCase(getCamelCase(identity.getName(), null))
+                return getCapitalCase(getCamelCase(
+                        getIdentityRefName(yangType), null))
                         + PERIOD + FROM_STRING_METHOD_NAME;
             case DERIVED:
             case UNION:
@@ -1051,7 +1048,6 @@
                     classDef = classDef + COMMA + SPACE;
                 }
             }
-
         }
         return classDef + defCloseString();
     }
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java
index b1105cf..8e0a149 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java
@@ -17,12 +17,16 @@
 package org.onosproject.yang.compiler.translator.tojava.utils;
 
 import org.onosproject.yang.compiler.datamodel.LocationInfo;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
 import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
 import org.onosproject.yang.compiler.translator.tojava.TempJavaBeanFragmentFiles;
 import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
 import org.onosproject.yang.compiler.translator.tojava.TempJavaTypeFragmentFiles;
+import org.onosproject.yang.compiler.utils.UtilConstants;
 
 import java.io.IOException;
 
@@ -143,4 +147,21 @@
          * input.
          */
     }
+
+    /**
+     * Returns the identity ref name with name conflict checking.
+     *
+     * @param yangType YANG type
+     * @return identity ref name
+     */
+    static String getIdentityRefName(YangType<?> yangType) {
+        YangIdentityRef ir = (YangIdentityRef) yangType
+                .getDataTypeExtendedInfo();
+        YangIdentity identity = ir.getReferredIdentity();
+        String name = identity.getName();
+        if (identity.isNameConflict()) {
+            name = name + UtilConstants.IDENTITY;
+        }
+        return name;
+    }
 }
diff --git a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
index 41c17cf..c9cf85e 100644
--- a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
+++ b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
@@ -168,6 +168,7 @@
     @SuppressWarnings("unchecked")
     private YangType<?> getStubExtendedInfo(YangType<?> type) throws DataModelException {
         YangJavaTypeDefTranslator typedef = new YangJavaTypeDefTranslator();
+        typedef.setName("xyz");
         getStubParent().addChild(typedef);
         YangDerivedInfo<?> derInfo = new YangDerivedInfo<>();
         derInfo.setReferredTypeDef(typedef);
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
index dfc3bf0..ec09187 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
@@ -1955,6 +1955,8 @@
     public static final String AUGMENTABLE = "Augmentable";
     public static final String RPC_SERVICE = "RpcService";
 
+    public static final String IDENTITY = "_identity";
+    public static final String TYPEDEF = "_typedef";
     // No instantiation.
     private UtilConstants() {
     }
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTypedefSameNameTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTypedefSameNameTest.java
new file mode 100644
index 0000000..1551f04
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTypedefSameNameTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.tool.YangCompilerManager;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.onosproject.yang.compiler.utils.io.impl.YangFileScanner.getYangFiles;
+
+/**
+ * Unit tests for identity and typedef with same name with different letter
+ * combination translator.
+ */
+public final class IdentityTypedefSameNameTest {
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+    private static final String DIR = "target/IdentityTypedefTestGenFile/";
+    private static final String COMP = System.getProperty("user.dir") + File
+            .separator + DIR;
+    private final YangCompilerManager utilManager = new YangCompilerManager();
+
+    /**
+     * Checks identity and typedef with same name with different letter
+     * combination translation should not result in any exception.
+     *
+     * @throws MojoExecutionException
+     */
+    @Test
+    public void processtest() throws IOException,
+            ParserException, MojoExecutionException {
+        YangIoUtils.deleteDirectory(DIR);
+        String searchDir = "src/test/resources/identityTypedefSameName";
+
+        Set<Path> paths = new HashSet<>();
+        for (String file : getYangFiles(searchDir)) {
+            paths.add(Paths.get(file));
+        }
+
+        utilManager.createYangFileInfoSet(paths);
+        utilManager.parseYangFileInfoSet();
+        utilManager.createYangNodeSet();
+        utilManager.resolveDependenciesUsingLinker();
+
+        YangPluginConfig yangPluginConfig = new YangPluginConfig();
+        yangPluginConfig.setCodeGenDir(DIR);
+        utilManager.translateToJava(yangPluginConfig);
+        YangPluginConfig.compileCode(COMP);
+        YangIoUtils.deleteDirectory(DIR);
+    }
+
+    /**
+     * Checks the negative scenario when an identity already present with
+     * name conflict with typedef and one more identity with same name
+     * with different small and caps letter combination.
+     *
+     * @throws MojoExecutionException
+     */
+    @Test
+    public void processNegativetest() throws IOException,
+            ParserException, MojoExecutionException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("Node with name BAsE in file");
+        YangIoUtils.deleteDirectory(DIR);
+        String searchDir = "src/test/resources/identityTypedefSameNameNeg";
+
+        Set<Path> paths = new HashSet<>();
+        for (String file : getYangFiles(searchDir)) {
+            paths.add(Paths.get(file));
+        }
+
+        utilManager.createYangFileInfoSet(paths);
+        utilManager.parseYangFileInfoSet();
+        utilManager.createYangNodeSet();
+        utilManager.resolveDependenciesUsingLinker();
+
+        YangPluginConfig yangPluginConfig = new YangPluginConfig();
+        yangPluginConfig.setCodeGenDir(DIR);
+        utilManager.translateToJava(yangPluginConfig);
+        YangPluginConfig.compileCode(COMP);
+        YangIoUtils.deleteDirectory(DIR);
+    }
+}
diff --git a/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-a.yang b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-a.yang
new file mode 100644
index 0000000..96177d2
--- /dev/null
+++ b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-a.yang
@@ -0,0 +1,36 @@
+module module-a {
+
+    namespace "urn:ietf:params:xml:ns:aug:module:a";
+
+    prefix mod-a;
+
+    import module-b {
+      prefix b;
+    }
+
+    import module-c {
+      prefix c;
+    }
+
+    container abc {
+        leaf arg {
+            type "b:base";
+        }
+        leaf arg2 {
+            type identityref {
+                base b:BASE;
+            }
+        }
+        leaf arg3 {
+            type "c:base";
+        }
+        leaf arg4 {
+            type identityref {
+                base c:BASE;
+            }
+        }
+        leaf arg5 {
+            type c:base1;
+        }
+    }
+}
diff --git a/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-b.yang b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-b.yang
new file mode 100644
index 0000000..8f0dff4
--- /dev/null
+++ b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-b.yang
@@ -0,0 +1,32 @@
+module module-b {
+
+    namespace "urn:ietf:params:xml:ns:aug:module:b";
+
+    prefix mod-a;
+
+    import module-c {
+        prefix c;
+    }
+
+    identity BASE;
+
+    identity DER1 {
+        base c:BASE;
+    }
+
+    identity DER2 {
+        base c:BASE;
+    }
+
+    typedef base {
+        type identityref {
+            base BASE;
+        }
+    }
+
+    typedef der1 {
+        type identityref {
+            base c:BASE;
+        }
+    }
+}
diff --git a/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-c.yang b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-c.yang
new file mode 100644
index 0000000..250e537
--- /dev/null
+++ b/compiler/plugin/maven/src/test/resources/identityTypedefSameName/module-c.yang
@@ -0,0 +1,30 @@
+module module-c {
+
+    namespace "urn:ietf:params:xml:ns:aug:module:c";
+
+    prefix mod-a;
+
+    identity BASE;
+
+    typedef ip-address {
+       type string;
+    }
+
+    typedef base {
+        type union {
+            type ip-address;
+            type identityref {
+                base BASE;
+            }
+        }
+    }
+
+    typedef base1 {
+        type union {
+            type base;
+            type identityref {
+                base BASE;
+            }
+        }
+    }
+}
diff --git a/compiler/plugin/maven/src/test/resources/identityTypedefSameNameNeg/module-b.yang b/compiler/plugin/maven/src/test/resources/identityTypedefSameNameNeg/module-b.yang
new file mode 100644
index 0000000..fb3f427
--- /dev/null
+++ b/compiler/plugin/maven/src/test/resources/identityTypedefSameNameNeg/module-b.yang
@@ -0,0 +1,16 @@
+module module-b {
+
+    namespace "urn:ietf:params:xml:ns:aug:module:b";
+
+    prefix mod-a;
+
+    identity BASE;
+
+    typedef base {
+        type identityref {
+            base BASE;
+        }
+    }
+    identity BAsE;
+
+}
