Index: /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php	(revision 5003)
+++ /extensions/AMetaData/JpegMetaData/Readers/GpsReader.class.php	(revision 5004)
@@ -83,11 +83,11 @@
           {
             case "N" :
-              $returned="north";
+              $returned="N";
               break;
             case "S" :
-              $returned="south";
+              $returned="S";
               break;
             default:
-              $returned="unknown";
+              $returned="";
               break;
           }
@@ -107,11 +107,11 @@
           {
             case "E" :
-              $returned="east";
+              $returned="E";
               break;
             case "W" :
-              $returned="west";
+              $returned="W";
               break;
             default:
-              $returned="unknown";
+              $returned="";
               break;
           }
@@ -133,63 +133,19 @@
           break;
         case 0x0009: // GPSStatus
-          switch(substr($values,0,1))
-          {
-            case "A" :
-              $returned="measurement in progress";
-              break;
-            case "V" :
-              $returned="measurement interoperability";
-              break;
-            default:
-              $returned="unknown";
-              break;
-          }
-          break;
         case 0x000A: // GPSMeasureMode
-          switch(substr($values,0,1))
-          {
-            case "2" :
-              $returned="2-dimensional measurement";
-              break;
-            case "3" :
-              $returned="3-dimensional measurement";
-              break;
-            default:
-              $returned="unknown";
-              break;
-          }
-          break;
         case 0x000C: // GPSSpeedRef
         case 0x0019: // GPSDestDistanceRef
-          switch(substr($values,0,1))
-          {
-            case "K" :
-              $returned="kilometers per hour";
-              break;
-            case "M" :
-              $returned="miles per hour";
-              break;
-            case "N" :
-              $returned="knots";
-              break;
-            default:
-              $returned="unknown";
-              break;
-          }
-          break;
         case 0x000E: // GPSTrackRef
         case 0x0010: // GPSImgDirectionRef
         case 0x0017: // GPSDestBearingRef
-          switch(substr($values,0,1))
+          $tag=$this->tagDef->getTagById(0x0009);
+          $key=substr($values,0,1);
+          if(array_key_exists($key, $tag['tagValues.special']))
           {
-            case "T" :
-              $returned="true direction";
-              break;
-            case "M" :
-              $returned="magnetic direction";
-              break;
-            default:
-              $returned="unknown";
-              break;
+            $returned=$tag['tagValues.special'][$key];
+          }
+          else
+          {
+            $returned=$tag['tagValues.special']['unknown'];
           }
           break;
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php	(revision 5003)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/GpsTags.class.php	(revision 5004)
@@ -111,6 +111,6 @@
         'implemented' => true,
         'tagValues'   => Array(
-          0x00 => "above sea level",
-          0x01 => "under sea level"
+          0x00 => "+",
+          0x01 => "-"
         )
       ), // < GPSAltitudeRef
@@ -147,7 +147,12 @@
         'tagName'     => "GPSStatus",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'A' => "measurement in progress",
+          'V' => "measurement interoperability",
+          'unknown' => "Unknown",
+        )
       ), // < GPSStatus
 
@@ -156,7 +161,12 @@
         'tagName'     => "GPSMeasureMode",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          '2' => "2-dimensional measurement",
+          '3' => "3-dimensional measurement",
+          'unknown' => "Unknown",
+        )
       ), // < GPSMeasureMode
 
@@ -174,7 +184,13 @@
         'tagName'     => "GPSSpeedRef",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'K' => "kilometers per hour",
+          'M' => "miles per hour",
+          'N' => "knots",
+          'unknown' => "Unknown",
+        )
       ), // < GPSSpeedRef
 
@@ -192,7 +208,12 @@
         'tagName'     => "GPSTrackRef",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'T' => "true direction",
+          'M' => "magnetic direction",
+          'unknown' => "Unknown",
+        )
       ), // < GPSTrackRef
 
@@ -210,7 +231,12 @@
         'tagName'     => "GPSImgDirectionRef",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'T' => "true direction",
+          'M' => "magnetic direction",
+          'unknown' => "Unknown",
+        )
       ), // < GPSImgDirectionRef
 
@@ -273,7 +299,12 @@
         'tagName'     => "GPSDestBearingRef",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'T' => "true direction",
+          'M' => "magnetic direction",
+          'unknown' => "Unknown",
+        )
       ), // < GPSDestBearingRef
 
@@ -291,7 +322,13 @@
         'tagName'     => "GPSDestDistanceRef",
         'schema'      => "GPS",
-        'translatable'=> false,
-        'combiTag'    => 0,
-        'implemented' => true
+        'translatable'=> true,
+        'combiTag'    => 0,
+        'implemented' => true,
+        'tagValues.special' => Array(
+          'K' => "kilometers per hour",
+          'M' => "miles per hour",
+          'N' => "knots",
+          'unknown' => "Unknown",
+        )
       ), // < GPSDestDistanceRef
 
@@ -338,5 +375,5 @@
         'tagName'     => "GPSDifferential",
         'schema'      => "GPS",
-        'translatable'=> false,
+        'translatable'=> true,
         'combiTag'    => 0,
         'implemented' => true,
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/MagicTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/MagicTags.class.php	(revision 5003)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/MagicTags.class.php	(revision 5004)
@@ -89,5 +89,4 @@
       ),
 
-
       'ShotInfo.Aperture' => Array(
         'implemented'  => true,
@@ -117,7 +116,6 @@
         'tagValues'    => Array(
           "{exif.exif.ISOSpeedRatings}",
+          "{xmp.exif:ISOSpeedRatings}",
           "{exif.Pentax.ISO}",
-          "{exif.Canon.CanonShotInfo.BaseISO}",
-          "{xmp.exif:ISOSpeedRatings}",
         )
       ),
@@ -138,6 +136,6 @@
         'translatable' => false,
         'tagValues'    => Array(
-          "{exif.exif.FocalLengthIn35mm}",
-          "{xmp.exif:FocalLengthIn35mm}",
+          "{exif.exif.FocalLengthIn35mmFilm}",
+          "{xmp.exif:FocalLengthIn35mmFilm}",
         )
       ),
@@ -299,4 +297,31 @@
       ),
 
+      'GPS.Altitude' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'tagValues' => Array(
+          "{exif.gps.GPSAltitudeRef}{exif.gps.GPSAltitude}m",
+          "{xmp.exif:GPSAltitudeRef}{xmp.exif:GPSAltitude}m",
+        )
+      ),
+
+      'GPS.Latitude' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'tagValues' => Array(
+          "{exif.gps.GPSLatitude} {exif.gps.GPSLatitudeRef}",
+          "{xmp.exif:GPSLatitude}",
+        )
+      ),
+
+      'GPS.Longitude' => Array(
+        'implemented'  => true,
+        'translatable' => false,
+        'tagValues' => Array(
+          "{exif.gps.GPSLongitude} {exif.gps.GPSLongitudeRef}",
+          "{xmp.exif:GPSLongitude}",
+        )
+      ),
+
     );
 
Index: /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php
===================================================================
--- /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 5003)
+++ /extensions/AMetaData/JpegMetaData/TagDefinitions/XmpTags.class.php	(revision 5004)
@@ -87,5 +87,12 @@
     {
       $result=preg_match("/([a-z]*)([-|_])([a-z]*)/i", $lang, $arr);
-      return($arr[1]."_".strtoupper($arr[3]));
+      if(is_array($arr) and count($arr))
+      {
+        return($arr[1]."_".strtoupper($arr[3]));
+      }
+      else
+      {
+        return($lang);
+      }
     }
 
