Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java	(revision 10767)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java	(revision 10774)
@@ -138,5 +138,5 @@
 		}
 
-		cmds.add(new DeleteCommand(nodes));
+		cmds.add(DeleteCommand.delete(nodes));
 		cmds.add(new ChangeCommand(target, newtarget));
 		return new SequenceCommand(tr("Merge Nodes"), cmds);
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicatedWayNodes.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicatedWayNodes.java	(revision 10767)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicatedWayNodes.java	(revision 10774)
@@ -58,5 +58,5 @@
 		if (wnew.nodes.size() < 2) {
 			// Empty way, delete
-			return new DeleteCommand(Collections.singleton(w));
+			return DeleteCommand.delete(Collections.singleton(w));
 		} else {
 			return new ChangeCommand(w, wnew);
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnconnectedWays.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnconnectedWays.java	(revision 10767)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnconnectedWays.java	(revision 10774)
@@ -30,4 +30,5 @@
 	Set<MyWaySegment> ways;
 	Set<Node> endnodes; // nodes at end of way
+	Set<Node> endnodes_highway; // nodes at end of way
 	Set<Node> middlenodes; // nodes in middle of way
 	Set<Node> othernodes; // nodes appearing at least twice
@@ -49,4 +50,5 @@
 		ways = new HashSet<MyWaySegment>();
 		endnodes = new HashSet<Node>();
+		endnodes_highway = new HashSet<Node>();
 		middlenodes = new HashSet<Node>();
 		othernodes = new HashSet<Node>();
@@ -59,4 +61,30 @@
 	{
 		Map<Node, Way> map = new HashMap<Node, Way>();
+		for(Node en : endnodes_highway)
+		{
+			for(MyWaySegment s : ways)
+			{
+				if(s.highway && s.nearby(en, mindist))
+					map.put(en, s.w);
+			}
+		}
+		if(map.size() > 0)
+		{
+			for(Map.Entry<Node, Way> error : map.entrySet())
+			{
+				errors.add(new TestError(this, Severity.WARNING,
+				tr("Way end node near other highway"), UNCONNECTED_WAYS,
+				Arrays.asList(error.getKey(), error.getValue())));
+			}
+		}
+		map.clear();
+		for(Node en : endnodes_highway)
+		{
+			for(MyWaySegment s : ways)
+			{
+				if(!s.highway && s.nearby(en, mindist))
+					map.put(en, s.w);
+			}
+		}
 		for(Node en : endnodes)
 		{
@@ -124,8 +152,10 @@
 		private Line2D line;
 		public Way w;
+		public Boolean highway;
 
 		public MyWaySegment(Way w, Node n1, Node n2)
 		{
 			this.w = w;
+			this.highway = w.get("highway") != null || w.get("railway") != null;
 			line = new Line2D.Double(n1.eastNorth.east(), n1.eastNorth.north(),
 			n2.eastNorth.east(), n2.eastNorth.north());
@@ -153,6 +183,9 @@
 			ways.add(new MyWaySegment(w, w.nodes.get(i-1), w.nodes.get(i)));
 		}
-		addNode(w.nodes.get(0), endnodes);
-		addNode(w.nodes.get(size-1), endnodes);
+		Set<Node> set = endnodes;
+		if(w.get("highway") != null || w.get("railway") != null)
+			set = endnodes_highway;
+		addNode(w.nodes.get(0), set);
+		addNode(w.nodes.get(size-1), set);
 	}
 	private void addNode(Node n, Set<Node> s)
@@ -160,6 +193,7 @@
 		Boolean m = middlenodes.contains(n);
 		Boolean e = endnodes.contains(n);
+		Boolean eh = endnodes_highway.contains(n);
 		Boolean o = othernodes.contains(n);
-		if(!m && !e && !o)
+		if(!m && !e && !o && !eh)
 			s.add(n);
 		else if(!o)
@@ -168,4 +202,6 @@
 			if(e)
 				endnodes.remove(n);
+			else if(eh)
+				endnodes_highway.remove(n);
 			else
 				middlenodes.remove(n);
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedNode.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedNode.java	(revision 10767)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedNode.java	(revision 10774)
@@ -94,5 +94,5 @@
 	public Command fixError(TestError testError)
 	{
-		return new DeleteCommand(testError.getPrimitives());
+		return DeleteCommand.delete(testError.getPrimitives());
 	}
 
Index: applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java
===================================================================
--- applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java	(revision 10767)
+++ applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java	(revision 10774)
@@ -110,5 +110,5 @@
 	public Command fixError(TestError testError)
 	{
-		return new DeleteCommand(testError.getPrimitives());
+		return DeleteCommand.delete(testError.getPrimitives());
 	}
 }
