Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 4009)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 4010)
@@ -47,8 +47,8 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -505,5 +505,5 @@
     private static void extractExif(ImageEntry e) {
 
-        int deg;
+        double deg;
         double min, sec;
         double lon, lat;
@@ -525,12 +525,12 @@
             Rational[] components = dir.getRationalArray(GpsDirectory.TAG_GPS_LONGITUDE);
 
-            deg = components[0].intValue();
-            min = components[1].floatValue();
-            sec = components[2].floatValue();
-
-            lon = (deg + (min / 60) + (sec / 3600));
-
-            if (Double.isNaN(lon))
+            deg = components[0].doubleValue();
+            min = components[1].doubleValue();
+            sec = components[2].doubleValue();
+
+            if (Double.isNaN(deg) && Double.isNaN(min) && Double.isNaN(sec))
                 throw new IllegalArgumentException();
+
+            lon = (Double.isNaN(deg) ? 0 : deg + (Double.isNaN(min) ? 0 : (min / 60)) + (Double.isNaN(sec) ? 0 : (sec / 3600)));
 
             if (dir.getString(GpsDirectory.TAG_GPS_LONGITUDE_REF).charAt(0) == 'W') {
@@ -542,9 +542,12 @@
             components = dir.getRationalArray(GpsDirectory.TAG_GPS_LATITUDE);
 
-            deg = components[0].intValue();
-            min = components[1].floatValue();
-            sec = components[2].floatValue();
-
-            lat = (deg + (min / 60) + (sec / 3600));
+            deg = components[0].doubleValue();
+            min = components[1].doubleValue();
+            sec = components[2].doubleValue();
+
+            if (Double.isNaN(deg) && Double.isNaN(min) && Double.isNaN(sec))
+                throw new IllegalArgumentException();
+
+            lat = (Double.isNaN(deg) ? 0 : deg + (Double.isNaN(min) ? 0 : (min / 60)) + (Double.isNaN(sec) ? 0 : (sec / 3600)));
 
             if (Double.isNaN(lat))
