Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java	(revision 28361)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java	(revision 28364)
@@ -129,6 +129,6 @@
      * Coordinates fields
      */
-    public static final String X_STRING = "X|LON|LONGI|LONGITUDE|EASTING";
-    public static final String Y_STRING = "Y|LAT|LATI|LATITUDE|NORTHING";
+    public static final String X_STRING = "X|LON|LONGI|LONGITUDE.*|EASTING";
+    public static final String Y_STRING = "Y|LAT|LATI|LATITUDE.*|NORTHING";
     
     // The list of all ProjectionPatterns (filled at each constructor call)
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java	(revision 28361)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java	(revision 28364)
@@ -22,5 +22,9 @@
 
 	private int sheetNumber = -1;
+	private int lineNumber = -1;
 	private boolean handlesProjection = false;
+	
+	private int xCol = -1;
+	private int yCol = -1;
 	
 	@Override
@@ -48,3 +52,33 @@
 		return null;
 	}
+
+	@Override
+	public void setLineNumber(int n) {
+		lineNumber = n;
+	}
+
+	@Override
+	public int getLineNumber() {
+		return lineNumber;
+	}
+
+	@Override
+	public void setXCol(int i) {
+		xCol = i;
+	}
+
+	@Override
+	public void setYCol(int i) {
+		yCol = i;
+	}
+
+	@Override
+	public int getXCol() {
+		return xCol;
+	}
+
+	@Override
+	public int getYCol() {
+		return yCol;
+	}
 }
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java	(revision 28361)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java	(revision 28364)
@@ -30,3 +30,15 @@
 
 	public LatLon getCoor(EastNorth en, String[] fields);
+
+	public void setLineNumber(int n);
+	
+	public int getLineNumber();
+
+	public void setXCol(int i);
+
+	public void setYCol(int i);
+	
+	public int getXCol();
+
+	public int getYCol();
 }
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 28361)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 28364)
@@ -74,4 +74,8 @@
 	}
 	
+	protected final int getLineNumber() {
+		return handler != null ? handler.getLineNumber() : -1;
+	}
+	
 	private class CoordinateColumns {
 		public int xCol = -1;
@@ -148,4 +152,8 @@
 			lineNumber++;
 			EastNorth en = new EastNorth(Double.NaN, Double.NaN);
+			if (handler != null) {
+				handler.setXCol(-1);
+				handler.setYCol(-1);
+			}
 			Node n = new Node();
 			for (int i = 0; i<fields.length; i++) {
@@ -155,6 +163,12 @@
 					} else if (i == columns.xCol) {
 						en.setLocation(parseDouble(fields[i]), en.north());
+						if (handler != null) {
+							handler.setXCol(i);
+						}
 					} else if (i == columns.yCol) {
 						en.setLocation(en.east(), parseDouble(fields[i]));
+						if (handler != null) {
+							handler.setYCol(i);
+						}
 					} else if (!allProjIndexes.contains(i)) {
 						if (!fields[i].isEmpty()) {
@@ -185,12 +199,16 @@
 		String[] header = null;
 		int length = 0;
+		int n = 0;
 		
 		while (header == null || length == 0) {
+			n++;
 			header = readLine(progressMonitor);
 			length = 0;
-			if (header == null) {
+			if (header == null && n > getLineNumber()) {
 				return null;
-			} else for (String field : header) {
-				length += field.length();
+			} else if (header != null && (getLineNumber() == -1 || getLineNumber() == n)) {
+				for (String field : header) {
+					length += field.length();
+				}
 			}
 		}
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 28361)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 28364)
@@ -72,3 +72,11 @@
 		return lang;
 	}
+	
+    public static final double convertMinuteSecond(double minute, double second) {
+        return (minute/60.0) + (second/3600.0);
+    }
+
+    public static final double convertDegreeMinuteSecond(double degree, double minute, double second) {
+        return degree + convertMinuteSecond(minute, second);
+    }
 }
