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 33344)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 33345)
@@ -8,5 +8,5 @@
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -18,7 +18,5 @@
 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.Way;
@@ -46,7 +44,6 @@
  */
 public final class PTAssistantLayer extends Layer
-        implements SelectionChangedListener, PropertyChangeListener, LayerChangeListener {
-
-    private static PTAssistantLayer layer;
+        implements PropertyChangeListener, LayerChangeListener {
+
     private List<OsmPrimitive> primitives = new ArrayList<>();
     private PTAssistantPaintVisitor paintVisitor;
@@ -54,16 +51,9 @@
     private HashMap<Way, List<Character>> wayColoring = new HashMap<>();
 
-    private PTAssistantLayer() {
+    public PTAssistantLayer() {
         super("pt_assistant layer");
         KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(this);
         Main.getLayerManager().addLayerChangeListener(this);
-        layer = this;
-    }
-
-    public static PTAssistantLayer getLayer() {
-        if (layer == null) {
-            new PTAssistantLayer();
-        }
-        return layer;
+        Main.getLayerManager().addLayer(this);
     }
 
@@ -135,4 +125,10 @@
     }
 
+    public void setPrimitives(List<OsmPrimitive> primitives)
+    {
+    	this.primitives.clear();
+    	this.primitives.addAll(primitives);
+    }
+
     @Override
     public void paint(final Graphics2D g, final MapView mv, Bounds bounds) {
@@ -193,32 +189,4 @@
 
     /**
-     * Listens to a selection change
-     */
-    @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);
-            }
-        }
-
-    }
-
-    /**
      * Listens to a focus change, sets the primitives attribute to the route
      * relation in the top Relation Editor and repaints the map
@@ -239,9 +207,7 @@
 
                 if (RouteUtils.isTwoDirectionRoute(relation)) {
-
                     this.repaint(relation);
 
                 }
-
             }
         }
@@ -296,4 +262,16 @@
         }
 
+        if (event.getRemovedLayer() instanceof OsmDataLayer && event.getSource().getLayersOfType(OsmDataLayer.class).size() < 1)
+            event.scheduleRemoval(Collections.singleton(this));
+
+        if(event.getRemovedLayer() == this)
+        	PTAssistantLayerManager.PTLM.resetLayer();
+    }
+
+    @Override
+    public synchronized void destroy() {
+    	KeyboardFocusManager.getCurrentKeyboardFocusManager().removePropertyChangeListener(this);
+        Main.getLayerManager().removeLayerChangeListener(this);
+    	super.destroy();
     }
 }
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayerManager.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayerManager.java	(revision 33345)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayerManager.java	(revision 33345)
@@ -0,0 +1,51 @@
+package org.openstreetmap.josm.plugins.pt_assistant.gui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+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.plugins.pt_assistant.utils.RouteUtils;
+
+public class PTAssistantLayerManager implements SelectionChangedListener{
+
+	public static PTAssistantLayerManager PTLM = new PTAssistantLayerManager();
+    private PTAssistantLayer layer;
+
+    public PTAssistantLayer getLayer() {
+        if (layer == null) {
+            layer = new PTAssistantLayer();
+        }
+        return layer;
+    }
+
+    public void resetLayer()
+    {
+    	layer = null;
+    }
+
+    /**
+     * Listens to a selection change
+     */
+    @Override
+    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+
+        ArrayList<OsmPrimitive> routes = new ArrayList<>();
+
+        for (OsmPrimitive primitive : newSelection) {
+            if (primitive.getType().equals(OsmPrimitiveType.RELATION)) {
+                if (RouteUtils.isTwoDirectionRoute((Relation) primitive)) {
+                    routes.add(primitive);
+                }
+
+            }
+        }
+
+        if (!routes.isEmpty()) {
+        	getLayer().setPrimitives(routes);
+        }
+
+    }
+}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java	(revision 33344)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java	(revision 33345)
@@ -21,5 +21,5 @@
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayer;
+import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayerManager;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
 
@@ -197,5 +197,5 @@
 
         // make the current relation purple in the pt_assistant layer:
-        PTAssistantLayer.getLayer().repaint(r);
+        PTAssistantLayerManager.PTLM.getLayer().repaint(r);
 
     }
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 33344)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 33345)
@@ -36,5 +36,5 @@
 import org.openstreetmap.josm.plugins.pt_assistant.data.PTWay;
 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.PTAssistantLayerManager;
 import org.openstreetmap.josm.plugins.pt_assistant.gui.ProceedDialog;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
@@ -60,12 +60,9 @@
 	public static final int ERROR_CODE_STOP_AREA_COMPARE_RELATIONS = 3764;
 
-	private PTAssistantLayer layer;
-
 	public PTAssistantValidatorTest() {
 		super(tr("Public Transport Assistant tests"),
 				tr("Check if route relations are compatible with public transport version 2"));
 
-		layer = PTAssistantLayer.getLayer();
-		DataSet.addSelectionListener(layer);
+		DataSet.addSelectionListener(PTAssistantLayerManager.PTLM);
 
 	}
@@ -491,5 +488,5 @@
 		if (testError.getPrimitives().iterator().next().getType().equals(OsmPrimitiveType.RELATION)) {
 			Relation relationToBeFixed = (Relation) testError.getPrimitives().iterator().next();
-			this.layer.repaint(relationToBeFixed);
+			PTAssistantLayerManager.PTLM.getLayer().repaint(relationToBeFixed);
 		}
 
@@ -568,13 +565,13 @@
 
 	public void addFixVariants(List<List<PTWay>> fixVariants) {
-		layer.addFixVariants(fixVariants);
+		PTAssistantLayerManager.PTLM.getLayer().addFixVariants(fixVariants);
 	}
 
 	public void clearFixVariants() {
-		layer.clearFixVariants();
+		PTAssistantLayerManager.PTLM.getLayer().clearFixVariants();
 	}
 
 	public List<PTWay> getFixVariant(Character c) {
-		return layer.getFixVariant(c);
+		return PTAssistantLayerManager.PTLM.getLayer().getFixVariant(c);
 	}
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 33344)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 33345)
@@ -37,5 +37,5 @@
 import org.openstreetmap.josm.plugins.pt_assistant.data.PTStop;
 import org.openstreetmap.josm.plugins.pt_assistant.data.PTWay;
-import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayer;
+import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayerManager;
 import org.openstreetmap.josm.plugins.pt_assistant.utils.StopToWayAssigner;
 
@@ -114,5 +114,5 @@
 	/**
 	 * Used for unit tests
-	 * 
+	 *
 	 * @param error
 	 *            test error
@@ -637,5 +637,5 @@
 
 	/**
-	 * Finds fixes using sorting and removal. 
+	 * Finds fixes using sorting and removal.
 	 */
 	protected void findFixes() {
@@ -897,5 +897,5 @@
 		final PTAssistantValidatorTest test = (PTAssistantValidatorTest) testError.getTester();
 		test.addFixVariants(fixVariants);
-		PTAssistantLayer.getLayer().repaint((Relation) testError.getPrimitives().iterator().next());
+		PTAssistantLayerManager.PTLM.getLayer().repaint((Relation) testError.getPrimitives().iterator().next());
 
 		// prepare the variables for the key listener:
@@ -906,8 +906,10 @@
 		Main.map.mapView.addKeyListener(new KeyListener() {
 
+			@Override
 			public void keyTyped(KeyEvent e) {
 				// TODO Auto-generated method stub
 			}
 
+			@Override
 			public void keyPressed(KeyEvent e) {
 				Character typedKey = e.getKeyChar();
@@ -925,4 +927,5 @@
 			}
 
+			@Override
 			public void keyReleased(KeyEvent e) {
 				// TODO Auto-generated method stub
