diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java
index 5592b66..9176fb9 100755
--- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java
+++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java
@@ -180,7 +180,7 @@ public class HiveHookIT extends HiveITBase {
     private void verifyTimestamps(Referenceable ref, String property, long expectedTime) throws ParseException {
         //Verify timestamps.
         String createTimeStr = (String) ref.get(property);
-        Date createDate = AtlasBaseTypeDef.DATE_FORMATTER.parse(createTimeStr);
+        Date createDate = AtlasBaseTypeDef.getDateFormatter().parse(createTimeStr);
         Assert.assertNotNull(createTimeStr);
 
         if (expectedTime > 0) {
diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java
index 995ff54..41061bc 100644
--- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java
+++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasStruct.java
@@ -39,6 +39,7 @@ import javax.xml.bind.annotation.XmlSeeAlso;
 
 import org.apache.atlas.model.PList;
 import org.apache.atlas.model.SearchFilter.SortType;
+import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 
@@ -58,6 +59,7 @@ public class AtlasStruct implements Serializable {
     private static final long serialVersionUID = 1L;
 
     public static final String     SERIALIZED_DATE_FORMAT_STR = "yyyyMMdd-HH:mm:ss.SSS-Z";
+    @Deprecated
     public static final DateFormat DATE_FORMATTER             = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR);
 
     private String              typeName;
@@ -266,7 +268,7 @@ public class AtlasStruct implements Serializable {
         if (value == null) {
             sb.append(value);
         } else {
-            sb.append(DATE_FORMATTER.format(value));
+            sb.append(AtlasBaseTypeDef.getDateFormatter().format(value));
         }
 
         return sb;
diff --git a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java
index 8437300..d8e7184 100644
--- a/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java
+++ b/intg/src/main/java/org/apache/atlas/model/typedef/AtlasBaseTypeDef.java
@@ -123,13 +123,31 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable {
         ATLAS_TYPE_OBJECT_ID,
     };
 
+
     public static final String     SERIALIZED_DATE_FORMAT_STR = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
+
+    @Deprecated
     public static final DateFormat DATE_FORMATTER             = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR);
 
     static {
         DATE_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC"));
     }
 
+    public static DateFormat getDateFormatter() {
+        return THREAD_LOCAL_DATE_FORMAT.get();
+    }
+
+    private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATE_FORMAT = new ThreadLocal<DateFormat>() {
+        @Override
+        public DateFormat initialValue() {
+            DateFormat ret = new SimpleDateFormat(SERIALIZED_DATE_FORMAT_STR);
+
+            ret.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+            return ret;
+        }
+    };
+
     private final TypeCategory category;
     private String  guid       = null;
     private String  createdBy  = null;
@@ -390,7 +408,7 @@ public abstract class AtlasBaseTypeDef implements java.io.Serializable {
         if (value == null) {
             sb.append(value);
         } else {
-            sb.append(DATE_FORMATTER.format(value));
+            sb.append(getDateFormatter().format(value));
         }
 
         return sb;
diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
index 139d4ec..1039de6 100644
--- a/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
+++ b/intg/src/main/java/org/apache/atlas/type/AtlasBuiltInTypes.java
@@ -479,7 +479,7 @@ public class AtlasBuiltInTypes {
                     return new Date(((Number) obj).longValue());
                 } else {
                     try {
-                        return AtlasBaseTypeDef.DATE_FORMATTER.parse(obj.toString());
+                        return AtlasBaseTypeDef.getDateFormatter().parse(obj.toString());
                     } catch (ParseException excp) {
                         try { // try to read it as a number
                             long longDate = Long.valueOf(obj.toString());
diff --git a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java
index ec185d2..a82b7ba 100644
--- a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java
+++ b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java
@@ -39,8 +39,6 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.util.Collection;
 import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 
 public class AtlasJson {
@@ -187,7 +185,7 @@ public class AtlasJson {
         @Override
         public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
             if (value != null) {
-                jgen.writeString(AtlasBaseTypeDef.DATE_FORMATTER.format(value));
+                jgen.writeString(AtlasBaseTypeDef.getDateFormatter().format(value));
             }
         }
     }
@@ -201,7 +199,7 @@ public class AtlasJson {
 
             if (value != null) {
                 try {
-                    ret = AtlasBaseTypeDef.DATE_FORMATTER.parse(value);
+                    ret = AtlasBaseTypeDef.getDateFormatter().parse(value);
                 } catch (ParseException excp) {
                 }
             }
diff --git a/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java b/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java
index 8ad752a..a7b699a 100644
--- a/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java
+++ b/intg/src/main/java/org/apache/atlas/v1/model/instance/Id.java
@@ -236,7 +236,7 @@ public class Id implements Serializable {
             }
 
             try {
-                return AtlasBaseTypeDef.DATE_FORMATTER.parse(val.toString());
+                return AtlasBaseTypeDef.getDateFormatter().parse(val.toString());
             } catch (ParseException excp) {
                 // ignore
             }
diff --git a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java
index 6236a6d..9e84331 100644
--- a/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java
+++ b/intg/src/test/java/org/apache/atlas/type/TestAtlasDateType.java
@@ -46,7 +46,7 @@ public class TestAtlasDateType {
     private final Object[] invalidValues  = { "12ab", "abcd", "-12ab", };
 
     private final Date   now    = new Date();
-    private final String strNow = AtlasBaseTypeDef.DATE_FORMATTER.format(now);
+    private final String strNow = AtlasBaseTypeDef.getDateFormatter().format(now);
 
     @Test
     public void testDateTypeDefaultValue() {