diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java b/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
index 87db689..2142209 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/ExifInterface.java
@@ -318,6 +318,13 @@
     public static final int TAG_INTEROPERABILITY_INDEX =
         defineTag(IfdId.TYPE_IFD_INTEROPERABILITY, (short) 1);
 
+    private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
+    private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
+    public static final DateFormat DATETIME_FORMAT = new SimpleDateFormat(DATETIME_FORMAT_STR);
+    private final DateFormat mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
+    private final Calendar mGPSTimeStampCalendar = Calendar
+            .getInstance(TimeZone.getTimeZone("UTC"));
+
     /**
      * Tags that contain offset markers. These are included in the banned
      * defines.
@@ -1944,13 +1951,6 @@
         return latLon;
     }
 
-    private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
-    private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
-    private final DateFormat mDateTimeStampFormat = new SimpleDateFormat(DATETIME_FORMAT_STR);
-    private final DateFormat mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
-    private final Calendar mGPSTimeStampCalendar = Calendar
-            .getInstance(TimeZone.getTimeZone("UTC"));
-
     /**
      * Creates, formats, and sets the DateTimeStamp tag for one of:
      * {@link #TAG_DATE_TIME}, {@link #TAG_DATE_TIME_DIGITIZED},
@@ -1964,8 +1964,8 @@
     public boolean addDateTimeStampTag(int tagId, long timestamp, TimeZone timezone) {
         if (tagId == TAG_DATE_TIME || tagId == TAG_DATE_TIME_DIGITIZED
                 || tagId == TAG_DATE_TIME_ORIGINAL) {
-            mDateTimeStampFormat.setTimeZone(timezone);
-            ExifTag t = buildTag(tagId, mDateTimeStampFormat.format(timestamp));
+            DATETIME_FORMAT.setTimeZone(timezone);
+            ExifTag t = buildTag(tagId, DATETIME_FORMAT.format(timestamp));
             if (t == null) {
                 return false;
             }
diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
index 664fcb0..c257bcd 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
@@ -17,7 +17,6 @@
 package com.android.gallery3d.exif;
 
 import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Date;
 
@@ -102,8 +101,6 @@
     // Value offset in exif header.
     private int mOffset;
 
-    private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("yyyy:MM:dd kk:mm:ss");
-
     /**
      * Returns true if the given IFD is a valid IFD.
      */
@@ -536,9 +533,9 @@
      * @return true on success
      */
     public boolean setTimeValue(long time) {
-        // synchronized on TIME_FORMAT as SimpleDateFormat is not thread safe
-        synchronized (TIME_FORMAT) {
-            return setValue(TIME_FORMAT.format(new Date(time)));
+        // synchronized on DATETIME_FORMAT as SimpleDateFormat is not thread safe
+        synchronized (ExifInterface.DATETIME_FORMAT) {
+            return setValue(ExifInterface.DATETIME_FORMAT.format(new Date(time)));
         }
     }
 
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
new file mode 100644
index 0000000..d6da3b1
--- /dev/null
+++ b/res/values/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2012-2014 The CyanogenMod Project
+
+     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.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Text indicating the time a media item was recorded in details window [CHAR LIMIT=14] -->
+    <string name="record_time">Record time</string>
+</resources>
\ No newline at end of file
diff --git a/src/com/android/gallery3d/data/MediaDetails.java b/src/com/android/gallery3d/data/MediaDetails.java
index 359eeeb..7f32473 100755
--- a/src/com/android/gallery3d/data/MediaDetails.java
+++ b/src/com/android/gallery3d/data/MediaDetails.java
@@ -17,15 +17,11 @@
 package com.android.gallery3d.data;
 
 import org.codeaurora.gallery.R;
-import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.exif.ExifInterface;
 import com.android.gallery3d.exif.ExifTag;
-import com.android.gallery3d.exif.Rational;
 
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map.Entry;
@@ -50,15 +46,16 @@
     public static final int INDEX_SIZE = 10;
 
     // for EXIF
-    public static final int INDEX_MAKE = 100;
-    public static final int INDEX_MODEL = 101;
-    public static final int INDEX_FLASH = 102;
-    public static final int INDEX_FOCAL_LENGTH = 103;
-    public static final int INDEX_WHITE_BALANCE = 104;
-    public static final int INDEX_APERTURE = 105;
-    public static final int INDEX_SHUTTER_SPEED = 106;
-    public static final int INDEX_EXPOSURE_TIME = 107;
-    public static final int INDEX_ISO = 108;
+    public static final int INDEX_DATETIME_ORIGINAL = 100;
+    public static final int INDEX_MAKE = 101;
+    public static final int INDEX_MODEL = 102;
+    public static final int INDEX_FLASH = 103;
+    public static final int INDEX_FOCAL_LENGTH = 104;
+    public static final int INDEX_WHITE_BALANCE = 105;
+    public static final int INDEX_APERTURE = 106;
+    public static final int INDEX_SHUTTER_SPEED = 107;
+    public static final int INDEX_EXPOSURE_TIME = 108;
+    public static final int INDEX_ISO = 109;
 
     // Put this last because it may be long.
     public static final int INDEX_PATH = 200;
@@ -148,6 +145,14 @@
                 MediaDetails.INDEX_WIDTH);
         setExifData(details, exif.getTag(ExifInterface.TAG_IMAGE_LENGTH),
                 MediaDetails.INDEX_HEIGHT);
+        ExifTag recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME_ORIGINAL);
+        if (recordTag == null) {
+            recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME_DIGITIZED);
+        }
+        if (recordTag == null) {
+            recordTag = exif.getTag(ExifInterface.TAG_DATE_TIME);
+        }
+        setExifData(details, recordTag, MediaDetails.INDEX_DATETIME_ORIGINAL);
         setExifData(details, exif.getTag(ExifInterface.TAG_MAKE),
                 MediaDetails.INDEX_MAKE);
         setExifData(details, exif.getTag(ExifInterface.TAG_MODEL),
diff --git a/src/com/android/gallery3d/ui/DetailsHelper.java b/src/com/android/gallery3d/ui/DetailsHelper.java
index 860ace7..167615b 100644
--- a/src/com/android/gallery3d/ui/DetailsHelper.java
+++ b/src/com/android/gallery3d/ui/DetailsHelper.java
@@ -139,6 +139,8 @@
                 return context.getString(R.string.exposure_time);
             case MediaDetails.INDEX_ISO:
                 return context.getString(R.string.iso);
+            case MediaDetails.INDEX_DATETIME_ORIGINAL:
+                return context.getString(R.string.record_time);
             default:
                 return "Unknown key" + key;
         }
diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java
index efe5754..5b3a016 100644
--- a/src/com/android/gallery3d/ui/DialogDetailsView.java
+++ b/src/com/android/gallery3d/ui/DialogDetailsView.java
@@ -36,14 +36,18 @@
 import com.android.gallery3d.app.AbstractGalleryActivity;
 import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.data.MediaDetails;
+import com.android.gallery3d.exif.ExifInterface;
 import com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
 import com.android.gallery3d.ui.DetailsHelper.CloseListener;
 import com.android.gallery3d.ui.DetailsHelper.DetailsSource;
 import com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer;
 import com.android.gallery3d.ui.DetailsHelper.ResolutionResolvingListener;
 
+import java.text.DateFormat;
 import java.text.DecimalFormat;
+import java.text.ParseException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.Locale;
 import java.util.Map.Entry;
 
@@ -154,6 +158,15 @@
             setDetails(context, details);
         }
 
+        private String exifDateToFormatedDate(String exifDt) {
+            try {
+                Date date = ExifInterface.DATETIME_FORMAT.parse(exifDt);
+                return DateFormat.getDateTimeInstance().format(date);
+            } catch (ParseException e) {
+                return exifDt;
+            }
+        }
+
         private void setDetails(Context context, MediaDetails details) {
             boolean resolutionIsValid = true;
             String path = null;
@@ -244,6 +257,9 @@
                     case MediaDetails.INDEX_ORIENTATION:
                         value = toLocalInteger(detail.getValue());
                         break;
+                    case MediaDetails.INDEX_DATETIME_ORIGINAL:
+                        value = exifDateToFormatedDate(detail.getValue().toString());
+                        break;
                     default: {
                         Object valueObj = detail.getValue();
                         // This shouldn't happen, log its key to help us diagnose the problem.
