Index: extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php
===================================================================
--- extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php	(revision 5232)
+++ extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php	(revision 5237)
@@ -131,5 +131,6 @@
            * can't use the timestamp function because not compatible with php < 5.3
            */
-          if($this->entries[$tagD]->getLabel() instanceof DateTime)
+          if($this->entries[$tagD]->getLabel() instanceof DateTime and
+             $this->entries[$tagT]->getLabel() instanceof DateTime)
           {
             $this->entries[$tagD]->getLabel()->setTime(
Index: extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php
===================================================================
--- extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php	(revision 5232)
+++ extensions/AMetaData/JpegMetaData/Readers/XmpReader.class.php	(revision 5237)
@@ -451,4 +451,32 @@
           $returned=explode(":", $value);
           break;
+        case "exif:GPSLatitude":
+        case "exif:GPSLongitude":
+        case "exif:GPSDestLatitude":
+        case "exif:GPSDestLongitude":
+          $returned=Array('coord' => "", 'card'=>"");
+          preg_match_all('/(\d{1,3}),(\d{1,2})(?:\.(\d*)){0,1}(N|S|E|W)/', $value, $result);
+          $returned['coord']=$result[1][0]."° ".$result[2][0]."' ";
+          if(trim($result[3][0])!="")
+          {
+            $returned['coord'].= round(("0.".$result[3][0])*60,2)."\"";
+          }
+          switch($result[4][0])
+          {
+            case "N":
+              $returned['card']="North";
+              break;
+            case "S":
+              $returned['card']="South";
+              break;
+            case "E":
+              $returned['card']="East";
+              break;
+            case "W":
+              $returned['card']="West";
+              break;
+          }
+          $type=ByteType::UNDEFINED;
+          break;
         case "xmp:CreateDate":
         case "xmp:ModifyDate":
@@ -604,8 +632,4 @@
         case "exif:CFAPattern":
         case "exif:DeviceSettingDescription":
-        case "exif:GPSLatitude":
-        case "exif:GPSLongitude":
-        case "exif:GPSDestLatitude":
-        case "exif:GPSDestLongitude":
           $returned=$xmpValue;
           $type=ByteType::UNDEFINED;
Index: extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php
===================================================================
--- extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 5232)
+++ extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 5237)
@@ -1636,5 +1636,5 @@
         'gpsTag'       => 0xFFFF, // combination of tags 0x02 & 0x01
         'implemented'  => true,
-        'translatable' => false,
+        'translatable' => true,
         'type'         => self::TYPE_SIMPLE,
         'schema'       => "exif",
@@ -1643,5 +1643,5 @@
         'gpsTag'       => 0xFFFF, // combination of tags 0x04 & 0x03
         'implemented'  => true,
-        'translatable' => false,
+        'translatable' => true,
         'type'         => self::TYPE_SIMPLE,
         'schema'       => "exif",
@@ -1748,5 +1748,5 @@
         'gpsTag'       => 0xFFFF,  // combination of tags 0x14 & 0x13
         'implemented'  => true,
-        'translatable' => false,
+        'translatable' => true,
         'type'         => self::TYPE_SIMPLE,
         'schema'       => "exif",
@@ -1755,5 +1755,5 @@
         'gpsTag'       => 0xFFFF,  // combination of tags 0x16 & 0x15
         'implemented'  => true,
-        'translatable' => false,
+        'translatable' => true,
         'type'         => self::TYPE_SIMPLE,
         'schema'       => "exif",
Index: extensions/AMetaData/amd_root.class.inc.php
===================================================================
--- extensions/AMetaData/amd_root.class.inc.php	(revision 5232)
+++ extensions/AMetaData/amd_root.class.inc.php	(revision 5237)
@@ -398,4 +398,18 @@
       return(implode($separator, $tmp));
     }
+    elseif(preg_match('/\d{1,3}°\s\d{1,2}\'\s(\d{1,2}\.{0,1}\d{0,2}){0,1}.,\s(north|south|east|west)$/i', $value))
+    {
+      /* \d{1,3}°\s\d{1,2}\'\s(\d{1,2}\.{0,1}\d{0,2}){0,1}.
+       *
+       * keys 'coord' and 'card' are present
+       *
+       * assume this is a GPS coordinate
+       */
+        return(preg_replace(
+          Array('/, north$/i', '/, south$/i', '/, east$/i', '/, west$/i'),
+          Array(" ".L10n::get("North"), " ".L10n::get("South"), " ".L10n::get("East"), " ".L10n::get("West")),
+          $value)
+        );
+    }
     else
     {
