Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 32414)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 32415)
@@ -52,5 +52,5 @@
 	 *         already has an attribute with that role.
 	 */
-	public boolean addStopElement(RelationMember member) {
+	protected boolean addStopElement(RelationMember member) {
 
 		// each element is only allowed once per stop
@@ -97,5 +97,5 @@
 	}
 
-	public String getName() {
+	protected String getName() {
 		return this.name;
 	}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 32415)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 32415)
@@ -0,0 +1,133 @@
+package org.openstreetmap.josm.plugins.pt_assistant.gui;
+
+import java.awt.Graphics2D;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.RenameLayerAction;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
+import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.LayerPositionStrategy;
+import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+public class PTAssistantLayer extends Layer implements SelectionChangedListener {
+	
+	private List<OsmPrimitive> primitives = new ArrayList<>();
+
+	
+	public PTAssistantLayer() {
+		super("pt_assistant layer");
+	}
+	
+	public void addPrimitive(OsmPrimitive primitive) {
+		this.primitives.add(primitive);
+	}
+	
+	public void clear() {
+		this.primitives.clear();
+	}
+
+	
+    @Override
+    public void paint(final Graphics2D g, final MapView mv, Bounds bounds) {
+
+        PTAssistantPaintVisitor paintVisitor = new PTAssistantPaintVisitor(g, mv);
+        for (OsmPrimitive primitive: primitives) {
+            paintVisitor.visit(primitive);
+
+        }
+        
+    }
+
+	@Override
+	public Icon getIcon() {
+        return ImageProvider.get("layer", "osmdata_small");
+	}
+
+	@Override
+	public Object getInfoComponent() {
+		return getToolTipText();
+	}
+
+	@Override
+	public Action[] getMenuEntries() {
+        return new Action[] {
+                LayerListDialog.getInstance().createShowHideLayerAction(),
+                LayerListDialog.getInstance().createDeleteLayerAction(),
+                SeparatorLayerAction.INSTANCE,
+                new RenameLayerAction(null, this),
+                SeparatorLayerAction.INSTANCE,
+                new LayerListPopup.InfoAction(this) };
+	}
+
+	@Override
+	public String getToolTipText() {
+		return "pt_assistant layer";
+	}
+
+	@Override
+	public boolean isMergable(Layer arg0) {
+		return false;
+	}
+
+	@Override
+	public void mergeFrom(Layer arg0) {
+		// do nothing
+		
+	}
+
+	@Override
+	public void visitBoundingBox(BoundingXYVisitor arg0) {
+		// do nothing
+		
+	}
+
+	
+    @Override
+    public LayerPositionStrategy getDefaultLayerPosition() {
+        return LayerPositionStrategy.IN_FRONT;
+    }
+
+	@Override
+	public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+		
+		
+		ArrayList<Relation> routes = new ArrayList<>();
+		
+		for (OsmPrimitive primitive: newSelection) {
+			if (primitive.getType().equals(OsmPrimitiveType.RELATION)) {
+				Relation relation = (Relation) primitive;
+				if (RouteUtils.isTwoDirectionRoute(relation)) {
+					routes.add(relation);
+				}
+			}
+		}
+		
+		if (!routes.isEmpty()) {
+			this.primitives.clear();
+			this.primitives.addAll(routes);
+			if (!Main.getLayerManager().containsLayer(this)) {
+				Main.getLayerManager().addLayer(this);
+			}
+		}
+		
+
+		
+	}
+    
+    
+}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java	(revision 32415)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java	(revision 32415)
@@ -0,0 +1,137 @@
+package org.openstreetmap.josm.plugins.pt_assistant.gui;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.util.List;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.data.validation.PaintVisitor;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
+
+public class PTAssistantPaintVisitor extends PaintVisitor {
+
+	/** The graphics */
+	private final Graphics g;
+	/** The MapView */
+	private final MapView mv;
+
+
+	public PTAssistantPaintVisitor(Graphics g, MapView mv) {
+		super(g, mv);
+		this.g = g;
+		this.mv = mv;
+	}
+
+	@Override
+	public void visit(Relation r) {
+
+		int stopCount = 1;
+		for (RelationMember rm : r.getMembers()) {
+			if (RouteUtils.isPTStop(rm)) {
+				drawStop(rm.getMember(), Color.BLUE, Color.BLACK, (new Integer(stopCount)).toString());
+				stopCount++;
+			} else if (RouteUtils.isPTWay(rm)) {
+				if (rm.isWay()) {
+					visit(rm.getWay());
+				} else if (rm.isRelation()) {
+					visit(rm.getRelation());
+				} else {
+					// if the relation has members that do not fit with the
+					// PT_Assistant data model, do nothing
+				}
+			} else {
+				// if the relation has members that do not fit with the
+				// PT_Assistant data model, do nothing
+			}
+		}
+
+
+	}
+
+	@Override
+	public void visit(List<Node> nodes) {
+		Node lastN = null;
+		for (Node n : nodes) {
+			if (lastN == null) {
+				lastN = n;
+				continue;
+			}
+			drawSegment(lastN, n, Color.BLUE);
+			lastN = n;
+		}
+	}
+
+	/**
+	 * Draw a small rectangle. White if selected (as always) or red otherwise.
+	 *
+	 * @param n
+	 *            The node to draw.
+	 */
+	@Override
+	public void visit(Node n) {
+		if (n.isDrawable() && isNodeVisible(n)) {
+			drawNode(n, Color.BLUE);
+		}
+	}
+
+	/**
+	 * Draws a line around the segment
+	 *
+	 * @param p1
+	 *            The first point of segment
+	 * @param p2
+	 *            The second point of segment
+	 * @param color
+	 *            The color
+	 */
+	protected void drawSegment(Point p1, Point p2, Color color) {
+
+		double t = Math.atan2((double) p2.x - p1.x, (double) p2.y - p1.y);
+		double cosT = 5 * Math.cos(t);
+		double sinT = 5 * Math.sin(t);
+
+		g.setColor(color);
+		g.drawLine((int) (p1.x + cosT), (int) (p1.y - sinT), (int) (p2.x + cosT), (int) (p2.y - sinT));
+		g.drawLine((int) (p1.x - cosT), (int) (p1.y + sinT), (int) (p2.x - cosT), (int) (p2.y + sinT));
+
+	}
+
+	/**
+	 * Draws a circle around the node
+	 * 
+	 * @param n
+	 *            The node
+	 * @param color
+	 *            The circle color
+	 */
+	protected void drawNode(Node n, Color color) {
+
+		Point p = mv.getPoint(n);
+
+		g.setColor(color);
+		g.drawOval(p.x - 5, p.y - 5, 10, 10);
+
+	}
+
+	protected void drawStop(OsmPrimitive primitive, Color fillColor, Color outlineColor, String label) {
+
+		// find the point to which the stop visualization will be linked:
+		Node n = new Node(primitive.getBBox().getCenter());
+
+		Point p = mv.getPoint(n);
+
+		g.setColor(fillColor);
+		// g.drawRect(p.x-10, p.y-10, 20, 20);
+		g.fillOval(p.x - 5, p.y - 5, 10, 10);
+		g.setColor(outlineColor);
+		g.drawOval(p.x - 5, p.y - 5, 10, 10);
+
+		g.setColor(Color.WHITE);
+		g.drawString(label, p.x - 20, p.y - 20);
+	}
+}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32414)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32415)
@@ -1,16 +1,5 @@
 package org.openstreetmap.josm.plugins.pt_assistant.utils;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JCheckBox;
-import javax.swing.JOptionPane;
-
-import org.openstreetmap.josm.actions.DownloadPrimitiveAction;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -45,5 +34,9 @@
 				|| r.hasTag("route", "tram") || r.hasTag("route", "light_rail") || r.hasTag("route", "subway")
 				|| r.hasTag("route", "train")) {
-			return true;
+			
+			if (!r.hasTag("bus", "on_demand")) {
+				return true;
+			}
+			
 		}
 		return false;
@@ -60,35 +53,23 @@
 	public static boolean isPTStop(RelationMember rm) {
 
-		if (rm.getType().equals(OsmPrimitiveType.NODE)) {
+		if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
+				|| rm.hasRole("platform") || rm.hasRole("platform_entry_only") || rm.hasRole("platform_exit_only")) {
 
-			if (rm.hasRole("stop") || rm.hasRole("stop_entry_only") || rm.hasRole("stop_exit_only")
-					|| rm.hasRole("platform") || rm.hasRole("platform_entry_only")
-					|| rm.hasRole("platform_exit_only")) {
+			if (rm.getType().equals(OsmPrimitiveType.NODE)) {
 
 				if (rm.getNode().hasTag("public_transport", "stop_position")
 						|| rm.getNode().hasTag("highway", "bus_stop")
 						|| rm.getNode().hasTag("public_transport", "platform")
-						|| rm.getNode().hasTag("public_transport", "platform_entry_only")
-						|| rm.getNode().hasTag("public_transport", "platform_exit_only")
-						|| rm.getNode().hasTag("highway", "platform")
-						|| rm.getNode().hasTag("highway", "platform_entry_only")
-						|| rm.getNode().hasTag("highway", "platform_exit_only")
-						|| rm.getNode().hasTag("railway", "platform")
-						|| rm.getNode().hasTag("railway", "platform_entry_only")
-						|| rm.getNode().hasTag("railway", "platform_exit_only")) {
+						|| rm.getNode().hasTag("highway", "platform") || rm.getNode().hasTag("railway", "platform")) {
+					return true;
+
+				}
+			}
+
+			if (rm.getType().equals(OsmPrimitiveType.WAY)) {
+				if (rm.getWay().hasTag("public_transport", "platform") || rm.getWay().hasTag("highway", "platform")
+						|| rm.getWay().hasTag("railway", "platform")) {
 					return true;
 				}
-			}
-		}
-
-		if (rm.getType().equals(OsmPrimitiveType.WAY)) {
-			if (rm.getWay().hasTag("public_transport", "platform")
-					|| rm.getWay().hasTag("public_transport", "platform_entry_only")
-					|| rm.getWay().hasTag("public_transport", "platform_exit_only")
-					|| rm.getWay().hasTag("highway", "platform") || rm.getWay().hasTag("highway", "platform_entry_only")
-					|| rm.getWay().hasTag("highway", "platform_exist_only") || rm.getWay().hasTag("railway", "platform")
-					|| rm.getWay().hasTag("railway", "platform_entry_only")
-					|| rm.getWay().hasTag("railway", "platform_exit_only")) {
-				return true;
 			}
 		}
@@ -115,4 +96,8 @@
 
 		if (rm.getType().equals(OsmPrimitiveType.WAY)) {
+			if (rm.getWay().hasTag("public_transport", "platform") || rm.getWay().hasTag("highway", "platform")
+					|| rm.getWay().hasTag("railway", "platform")) {
+				return false;
+			}
 			return true;
 		}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32414)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssitantValidatorTest.java	(revision 32415)
@@ -7,9 +7,10 @@
 
 import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -24,4 +25,5 @@
 import org.openstreetmap.josm.plugins.pt_assistant.actions.IncompleteMembersDownloadThread;
 import org.openstreetmap.josm.plugins.pt_assistant.gui.IncompleteMembersDownloadDialog;
+import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayer;
 import org.openstreetmap.josm.plugins.pt_assistant.gui.ProceedDialog;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
@@ -31,4 +33,5 @@
 	public static final int ERROR_CODE_SORTING = 3711;
 	public static final int ERROR_CODE_ROAD_TYPE = 3721;
+	public static final int ERROR_CODE_CONSTRUCTION = 3722;
 	public static final int ERROR_CODE_DIRECTION = 3731;
 	public static final int ERROR_CODE_END_STOP = 3141;
@@ -36,7 +39,12 @@
 	public static final int ERROR_CODE_RELAITON_MEMBER_ROLES = 3143;
 
+	private PTAssistantLayer layer;
+
 	public PTAssitantValidatorTest() {
 		super(tr("Public Transport Assistant tests"),
 				tr("Check if route relations are compatible with public transport version 2"));
+
+		layer = new PTAssistantLayer();
+		DataSet.addSelectionListener(layer);
 
 	}
@@ -60,4 +68,10 @@
 			return;
 		}
+
+//		if (!Main.getLayerManager().containsLayer(layer)) {
+//			Main.getLayerManager().addLayer(layer);
+//		}
+//		layer.clear();
+//		layer.addPrimitive(r);
 
 		// Check individual ways using the oneway direction test and the road
@@ -192,5 +206,5 @@
 		// Check if the creation of the route data model in the segment checker
 		// worked. If it did not, it means the roles in the route relation do
-		// not match the tags of the route members. 
+		// not match the tags of the route members.
 		if (!segmentChecker.getErrors().isEmpty()) {
 			this.errors.addAll(segmentChecker.getErrors());
@@ -202,5 +216,5 @@
 		// TODO: perform segment test
 		this.errors.addAll(segmentChecker.getErrors());
-//		performDummyTest(r);
+		// performDummyTest(r);
 	}
 
@@ -211,5 +225,5 @@
 	public boolean isFixable(TestError testError) {
 		if (testError.getCode() == ERROR_CODE_DIRECTION || testError.getCode() == ERROR_CODE_ROAD_TYPE
-				|| testError.getCode() == ERROR_CODE_SORTING) {
+				|| testError.getCode() == ERROR_CODE_CONSTRUCTION || testError.getCode() == ERROR_CODE_SORTING) {
 			return true;
 		}
@@ -222,5 +236,6 @@
 		List<Command> commands = new ArrayList<>();
 
-		if (testError.getCode() == ERROR_CODE_DIRECTION || testError.getCode() == ERROR_CODE_ROAD_TYPE) {
+		if (testError.getCode() == ERROR_CODE_DIRECTION || testError.getCode() == ERROR_CODE_ROAD_TYPE
+				|| testError.getCode() == ERROR_CODE_CONSTRUCTION) {
 			commands.add(fixErrorByRemovingWay(testError));
 		}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java	(revision 32414)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java	(revision 32415)
@@ -22,4 +22,5 @@
 
 	public static final int ERROR_CODE_ROAD_TYPE = 3721;
+	public static final int ERROR_CODE_CONSTRUCTION = 3722;
 
 	public RoadTypeTest() {
@@ -87,4 +88,15 @@
 							tr("PT: Route type does not match the type of the road it passes on"), ERROR_CODE_ROAD_TYPE,
 							primitives, highlighted));
+				}
+				
+				if ((way.hasTag("highway", "construction") || way.hasTag("railway", "construction")) && way.hasKey("construction")) {
+					List<Relation> primitives = new ArrayList<>(1);
+					primitives.add(r);
+					List<Way> highlighted = new ArrayList<>(1);
+					highlighted.add(way);
+					TestError e = new TestError(this, Severity.WARNING,
+							tr("PT: Road is under construction"),
+							PTAssitantValidatorTest.ERROR_CODE_CONSTRUCTION, primitives, highlighted);
+					errors.add(e);
 				}
 
@@ -168,5 +180,5 @@
 	@Override
 	public boolean isFixable(TestError testError) {
-		if (testError.getCode() == ERROR_CODE_ROAD_TYPE) {
+		if (testError.getCode() == ERROR_CODE_ROAD_TYPE || testError.getCode() == ERROR_CODE_CONSTRUCTION) {
 			return true;
 		}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32414)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java	(revision 32415)
@@ -95,4 +95,15 @@
 
 				}
+				
+				if ((way.hasTag("highway", "construction") || way.hasTag("railway", "construction")) && way.hasKey("construction")) {
+					List<Relation> primitives = new ArrayList<>(1);
+					primitives.add(relation);
+					List<Way> highlighted = new ArrayList<>(1);
+					highlighted.add(way);
+					TestError e = new TestError(this.test, Severity.WARNING,
+							tr("PT: Road is under construction"),
+							PTAssitantValidatorTest.ERROR_CODE_CONSTRUCTION, primitives, highlighted);
+					errors.add(e);
+				}
 			}
 		}
