Index: applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RelationEditMode.java
===================================================================
--- applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RelationEditMode.java	(revision 33289)
+++ 	(revision )
@@ -1,99 +1,0 @@
-package org.openstreetmap.josm.plugins.routes;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Cursor;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-import java.util.Collection;
-
-import javax.swing.JOptionPane;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.mapmode.MapMode;
-import org.openstreetmap.josm.command.ChangeCommand;
-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.osm.Way;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.tools.Shortcut;
-
-public class RelationEditMode extends MapMode {
-    private static final long serialVersionUID = -7767329767438266289L;
-
-    private Way highlightedWay;
-
-    public RelationEditMode(MapFrame mapFrame) {
-        super(tr("Edit relation"), "node/autonode", tr("Edit relations"),
-                Shortcut.registerShortcut("mapmode:editRelation", tr("Mode: {0}", tr("Edit relation")), KeyEvent.VK_H, Shortcut.DIRECT),
-                mapFrame, Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-    }
-
-    @Override
-    public void enterMode() {
-        super.enterMode();
-        Main.map.mapView.addMouseListener(this);
-        Main.map.mapView.addMouseMotionListener(this);
-    }
-
-    @Override
-    public void exitMode() {
-        super.exitMode();
-        Main.map.mapView.removeMouseListener(this);
-        Main.map.mapView.removeMouseMotionListener(this);
-    }
-
-    @Override
-    public void mouseMoved(MouseEvent e) {
-        Way nearestWay = Main.map.mapView.getNearestWay(e.getPoint(), OsmPrimitive::isUsable);
-        if (nearestWay != highlightedWay) {
-            if (highlightedWay != null) {
-                highlightedWay.setHighlighted(false);
-            }
-            if (nearestWay != null) {
-                nearestWay.setHighlighted(true);
-            }
-            highlightedWay = nearestWay;
-            Main.map.mapView.repaint();
-        }
-    }
-
-    @Override
-    public void mouseClicked(MouseEvent e) {
-        if (getLayerManager().getEditDataSet() == null)
-            return;
-
-        Way way = Main.map.mapView.getNearestWay(e.getPoint(), OsmPrimitive::isUsable);
-        Collection<Relation> selectedRelations = getLayerManager().getEditDataSet().getSelectedRelations();
-
-        if (way != null) {
-
-            if (selectedRelations.isEmpty()) {
-                JOptionPane.showMessageDialog(Main.parent, tr("No relation is selected"));
-            }
-
-            for (OsmPrimitive rel:selectedRelations) {
-                Relation r = (Relation)rel;
-                RelationMember foundMember = null;
-                for (RelationMember member:r.getMembers()) {
-                    if (member.getMember() == way) {
-                        foundMember = member;
-                        break;
-                    }
-                }
-
-                if (foundMember != null) {
-                    Main.main.undoRedo.add(new RemoveRelationMemberCommand(r, new RelationMember("", way)));
-                } else {
-                    Relation newRelation = new Relation(r);
-                    newRelation.addMember(new RelationMember("", way));
-                    Main.main.undoRedo.add(new ChangeCommand(r, newRelation));
-                }
-            }
-        }
-    }
-
-
-
-}
Index: applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RemoveRelationMemberCommand.java
===================================================================
--- applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RemoveRelationMemberCommand.java	(revision 33289)
+++ 	(revision )
@@ -1,81 +1,0 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
-package org.openstreetmap.josm.plugins.routes;
-
-import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.util.Collection;
-
-import javax.swing.Icon;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.Command;
-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.RelationMember;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/**
- * Command that adds a relation to an OSM object
- *
- * @author daveh
- */
-public class RemoveRelationMemberCommand extends Command {
-
-    // container object in which to replace a sub object
-    private final Relation relation;
-    // the sub-object to be replaced
-    private final RelationMember member;
-    // its replacement
-    private int location = -1;
-
-    public RemoveRelationMemberCommand(Relation _relation, RelationMember _member) {
-        this.relation = _relation;
-        this.member = _member;
-    }
-    public RemoveRelationMemberCommand(Relation _relation, RelationMember _member, int _location) {
-        this.relation = _relation;
-        this.member = _member;
-        location = _location;
-    }
-
-    @Override public boolean executeCommand() {
-        super.executeCommand();
-        int removeIndex = relation.getMembers().indexOf(member);
-        if ((location != -1) && (removeIndex != location)) {
-            Main.debug("error removing relation member");
-            return false;
-        } else {
-            relation.removeMember(removeIndex);
-            relation.setModified(true);
-            return true;
-        }
-    }
-
-    @Override public void undoCommand() {
-        super.undoCommand();
-        relation.addMember(member);
-        relation.setModified(this.getOrig(relation).isModified());
-    }
-
-    @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {}
-
-    @Override public String getDescriptionText() {
-        String msg = "";
-        switch(OsmPrimitiveType.from(member.getMember())) {
-            case NODE: msg = marktr("Remove node ''{0}'' at position {1} from relation ''{2}''"); break;
-            case WAY: msg = marktr("Remove way ''{0}'' at position {1} from relation ''{2}''"); break;
-            case RELATION: msg = marktr("Remove relation ''{0}'' at position {1} from relation ''{2}''"); break;
-        }
-        return tr(msg,
-            member.getMember().getDisplayName(DefaultNameFormatter.getInstance()),
-            relation.getMembers().indexOf(member),
-            relation.getDisplayName(DefaultNameFormatter.getInstance()));
-    }
-
-    @Override public Icon getDescriptionIcon() {
-        return ImageProvider.get(OsmPrimitiveType.from(relation));
-    }
-}
Index: applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RouteLayer.java
===================================================================
--- applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RouteLayer.java	(revision 33289)
+++ applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RouteLayer.java	(revision 33290)
@@ -154,3 +154,7 @@
     }
 
+    @Override
+    public synchronized void destroy() {
+        /* layer is reused, don't destroy it at all */
+    }
 }
Index: applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RoutesPlugin.java
===================================================================
--- applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RoutesPlugin.java	(revision 33289)
+++ applications/editors/josm/plugins/routes/src/org/openstreetmap/josm/plugins/routes/RoutesPlugin.java	(revision 33290)
@@ -29,5 +29,4 @@
 
     private final List<RouteLayer> routeLayers = new ArrayList<>();
-    private boolean isShown;
 
     public RoutesPlugin(PluginInformation info) {
@@ -70,7 +69,4 @@
             e.printStackTrace();
         }
-
-        //new RelationEditMode(Main.map);
-        //Main.main.addLayer(new RouteLayer("Hiking trails"));
     }
 
@@ -79,28 +75,14 @@
     }
 
-    private void checkLayers() {
-        if (Main.map != null && Main.map.mapView != null) {
-            for (Layer layer : Main.getLayerManager().getLayers()) {
-                if (layer instanceof OsmDataLayer) {
-                    if (!isShown) {
-                        isShown = true;
-                        SwingUtilities.invokeLater(() -> {
-                            for (RouteLayer routeLayer : routeLayers) {
-                                Main.getLayerManager().addLayer(routeLayer);
-                            }
-                        });
-                    }
-                    return;
+    @Override
+    public void layerAdded(LayerAddEvent e) {
+        Layer layer = e.getAddedLayer();
+        if (layer instanceof OsmDataLayer) {
+            for (RouteLayer routeLayer : routeLayers) {
+                if (!Main.getLayerManager().containsLayer(routeLayer)) {
+                    SwingUtilities.invokeLater(() -> {
+                        Main.getLayerManager().addLayer(routeLayer);
+                    });
                 }
-            }
-            if (isShown) {
-                isShown = false;
-                SwingUtilities.invokeLater(() -> {
-                    for (RouteLayer routeLayer : routeLayers) {
-                        if (Main.getLayerManager().containsLayer(routeLayer)) {
-                            Main.getLayerManager().removeLayer(routeLayer);
-                        }
-                    }
-                });
             }
         }
@@ -108,11 +90,19 @@
 
     @Override
-    public void layerAdded(LayerAddEvent e) {
-        checkLayers();
-    }
-
-    @Override
     public void layerRemoving(LayerRemoveEvent e) {
-        checkLayers();
+        for (Layer layer : e.getSource().getLayers()) {
+            if (layer instanceof OsmDataLayer)  {
+                return; /* at least one OSM layer left, do nothing */
+            }
+        }
+        if(!e.isLastLayer()) {
+            SwingUtilities.invokeLater(() -> {
+                for (RouteLayer routeLayer : routeLayers) {
+                    if (Main.getLayerManager().containsLayer(routeLayer)) {
+                        Main.getLayerManager().removeLayer(routeLayer);
+                    }
+                }
+            });
+        }
     }
 
