diff --git a/release-log.txt b/release-log.txt
index 4a82306..470b085 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -32,6 +32,7 @@
 ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
 
 ALL CHANGES:
+ATLAS-1542 Atlas server fails to start if duplicate types are found during Typesystem bootstrap (svimal2106)
 ATLAS-1442 updated pom.xml to change version number to 0.7.1-incubating (mneethiraj)
 ATLAS-1432 Responsive Loader and css changes (kevalbhatt via mneethiraj)
 ATLAS-1427 update tests for the changes in default SSL protocols support (mneethiraj)
diff --git a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
index 70ba89b..e6c1f99 100755
--- a/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
+++ b/typesystem/src/main/java/org/apache/atlas/typesystem/types/TypeSystem.java
@@ -405,7 +405,8 @@
             for (EnumTypeDefinition eDef : enumDefs) {
                 assert eDef.name != null;
                 if (!update && isRegistered(eDef.name)) {
-                    throw new AtlasException(String.format("Redefinition of type %s not supported", eDef.name));
+                    LOG.warn("Found duplicate definition of type {}. Ignoring..", eDef.name);
+                    continue;
                 }
 
                 EnumType eT = new EnumType(this, eDef.name, eDef.description, eDef.enumValues);
@@ -415,7 +416,8 @@
             for (StructTypeDefinition sDef : structDefs) {
                 assert sDef.typeName != null;
                 if (!update && isRegistered(sDef.typeName)) {
-                    throw new TypeExistsException(String.format("Cannot redefine type %s", sDef.typeName));
+                    LOG.warn("Found duplicate definition of type {}. Ignoring..", sDef.typeName);
+                    continue;
                 }
                 StructType sT = new StructType(this, sDef.typeName, sDef.typeDescription, sDef.attributeDefinitions.length);
                 structNameToDefMap.put(sDef.typeName, sDef);
@@ -425,7 +427,8 @@
             for (HierarchicalTypeDefinition<TraitType> traitDef : traitDefs) {
                 assert traitDef.typeName != null;
                 if (!update && isRegistered(traitDef.typeName)) {
-                    throw new TypeExistsException(String.format("Cannot redefine type %s", traitDef.typeName));
+                    LOG.warn("Found duplicate definition of type {}. Ignoring..", traitDef.typeName);
+                    continue;
                 }
                 TraitType tT = new TraitType(this, traitDef.typeName, traitDef.typeDescription, traitDef.superTypes,
                         traitDef.attributeDefinitions.length);
@@ -436,7 +439,8 @@
             for (HierarchicalTypeDefinition<ClassType> classDef : classDefs) {
                 assert classDef.typeName != null;
                 if (!update && isRegistered(classDef.typeName)) {
-                    throw new TypeExistsException(String.format("Cannot redefine type %s", classDef.typeName));
+                    LOG.warn("Found duplicate definition of type {}. Ignoring..", classDef.typeName);
+                    continue;
                 }
 
                 ClassType cT = new ClassType(this, classDef.typeName, classDef.typeDescription, classDef.superTypes,
