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 29299)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java	(revision 29493)
@@ -60,4 +60,7 @@
 	public static final String PREF_MAXDISTANCE = "opendata.maxdistance";
     public static final double DEFAULT_MAXDISTANCE = 10;
+
+    public static final String PREF_TOLERANCE = "opendata.spreadsheet.tolerance";
+    public static final double DEFAULT_TOLERANCE = 0.1;
 
     public static final String PREF_MODULES = "opendata.modules";
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 29299)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 29493)
@@ -72,4 +72,5 @@
 	
 	public static class CoordinateColumns {
+        public Projection proj = null;
 		public int xCol = -1;
 		public int yCol = -1;
@@ -77,7 +78,6 @@
 			return xCol > -1 && yCol > -1;
 		}
-        @Override
-        public String toString() {
-            return "[xCol=" + xCol + ", yCol=" + yCol + "]";
+        @Override public String toString() {
+            return "CoordinateColumns [proj=" + proj + ", xCol=" + xCol + ", yCol=" + yCol + "]";
         }
 	}
@@ -112,5 +112,4 @@
 		}
 
-		Projection proj = null;
 		final List<CoordinateColumns> columns = new ArrayList<CoordinateColumns>();
 		
@@ -119,6 +118,6 @@
 	            if (col.isOk()) {
                     columns.add(col);
-	                if (proj == null) {
-	                    proj = pp.getProjection(header[col.xCol], header[col.yCol]);
+	                if (col.proj == null) {
+	                    col.proj = pp.getProjection(header[col.xCol], header[col.yCol]);
 	                }
 	            }
@@ -128,5 +127,14 @@
 		final boolean handlerOK = handler != null && handler.handlesProjection();
 
-		if (proj != null) {
+		boolean projFound = false;
+		
+		for (CoordinateColumns c : columns) {
+		    if (c.proj != null) {
+		        projFound = true;
+		        break;
+		    }
+		}
+		
+		if (projFound) {
 			// projection identified, do nothing
 		} else if (!columns.isEmpty()) {
@@ -137,5 +145,8 @@
 					return null; // User clicked Cancel
 				}
-				proj = dialog.getProjection();
+				Projection proj = dialog.getProjection();
+		        for (CoordinateColumns c : columns) {
+		            c.proj = proj;
+		        }
 			}
 			
@@ -149,8 +160,8 @@
 		        message += "; ";
 		    }
-		    message += header[c.xCol]+", "+header[c.yCol];
-		}
-		
-		System.out.println("Loading data using projection "+proj+" ("+message+")");
+		    message += c.proj + "("+header[c.xCol]+", "+header[c.yCol]+")";
+		}
+		
+		System.out.println("Loading data using projections "+message);
 		
 		final DataSet ds = new DataSet();
@@ -204,14 +215,22 @@
 				}
 			}
+			Node firstNode = null;
 			for (CoordinateColumns c : columns) {
 			    Node n = nodes.get(c);
 			    EastNorth en = ens.get(c);
     			if (en.isValid()) {
-    				n.setCoor(proj != null && !handlerOK ? proj.eastNorth2latlon(en) : handler.getCoor(en, fields));
+    				n.setCoor(c.proj != null && !handlerOK ? c.proj.eastNorth2latlon(en) : handler.getCoor(en, fields));
     			} else {
     				System.err.println("Warning: Skipping line "+lineNumber+" because no valid coordinates have been found at columns "+c);
     			}
     			if (n.getCoor() != null) {
-    				ds.addPrimitive(n);
+    			    if (firstNode == null) {
+    			        firstNode = n;
+    			    }
+    			    if (n == firstNode || n.getCoor().greatCircleDistance(firstNode.getCoor()) > Main.pref.getDouble(PREF_TOLERANCE, DEFAULT_TOLERANCE)) {
+    			        ds.addPrimitive(n);
+    			    } else {
+    			        nodes.remove(c);
+    			    }
     			}
 			}
