Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 844)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 845)
@@ -124,4 +124,6 @@
 	 */
 	public void eventDispatched(AWTEvent event) {
+		if(!Main.map.mapView.isDrawableLayer())
+			return;
 		InputEvent e = (InputEvent) event;
 		ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
@@ -134,4 +136,6 @@
 	 */
 	public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+		if(!Main.map.mapView.isDrawableLayer())
+			return;
 		computeHelperLine();
 	}
@@ -146,4 +150,6 @@
 
 		if (e.getButton() != MouseEvent.BUTTON1)
+			return;
+		if(!Main.map.mapView.isDrawableLayer())
 			return;
 
@@ -331,4 +337,6 @@
 	
 	@Override public void mouseMoved(MouseEvent e) {
+		if(!Main.map.mapView.isDrawableLayer())
+			return;
 
 		// we copy ctrl/alt/shift from the event just in case our global
@@ -441,4 +449,6 @@
 	 */
 	@Override public void mouseExited(MouseEvent e) {
+		if(!Main.map.mapView.isDrawableLayer())
+			return;
 		mousePos = e.getPoint();
 		Main.map.mapView.repaint();
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 844)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 845)
@@ -172,10 +172,25 @@
 		for (Layer.LayerChangeListener l : Layer.listeners)
 			l.layerAdded(layer);
-		// autoselect the new layer
-		Layer old = activeLayer;
-		setActiveLayer(layer);
-		for (Layer.LayerChangeListener l : Layer.listeners)
-			l.activeLayerChange(old, layer);
+		if (layer instanceof OsmDataLayer) {
+			// autoselect the new layer
+			Layer old = activeLayer;
+			setActiveLayer(layer);
+			for (Layer.LayerChangeListener l : Layer.listeners)
+				l.activeLayerChange(old, layer);
+		}
 		repaint();
+	}
+
+	@Override
+	protected DataSet getData()
+	{
+		if(activeLayer != null && activeLayer instanceof OsmDataLayer)
+			return ((OsmDataLayer)activeLayer).data;
+		return new DataSet();
+	}
+
+	public Boolean isDrawableLayer()
+	{
+		return activeLayer != null && activeLayer instanceof OsmDataLayer;
 	}
 
@@ -251,10 +266,10 @@
 		for (int i = layers.size()-1; i >= 0; --i) {
 			Layer l = layers.get(i);
-			if (l.visible && l != getActiveLayer())
+			if (l.visible/* && l != getActiveLayer()*/)
 				l.paint(tempG, this);
 		}
-		
-		if (getActiveLayer() != null && getActiveLayer().visible)
-			getActiveLayer().paint(tempG, this);
+
+		/*if (getActiveLayer() != null && getActiveLayer().visible)
+			getActiveLayer().paint(tempG, this);*/
 
 		for (MapViewPaintable mvp : temporaryLayers) {
@@ -353,6 +368,8 @@
 			editLayer = (OsmDataLayer)layer;
 			Main.ds = editLayer.data;
-			DataSet.fireSelectionChanged(Main.ds.getSelected());
-		}
+		}
+		else
+			Main.ds.setSelected();
+		DataSet.fireSelectionChanged(Main.ds.getSelected());
 		Layer old = activeLayer;
 		activeLayer = layer;
Index: /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 844)
+++ /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 845)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -49,5 +50,10 @@
 	public NavigatableComponent() {
 		setLayout(null);
-    }
+	}
+
+	protected DataSet getData()
+	{
+		return Main.ds;
+	}
 
 	/**
@@ -137,5 +143,5 @@
 		double minDistanceSq = Double.MAX_VALUE;
 		Node minPrimitive = null;
-		for (Node n : Main.ds.nodes) {
+		for (Node n : getData().nodes) {
 			if (n.deleted || n.incomplete)
 				continue;
@@ -163,5 +169,5 @@
 	public final List<WaySegment> getNearestWaySegments(Point p) {
 		TreeMap<Double, List<WaySegment>> nearest = new TreeMap<Double, List<WaySegment>>();
-		for (Way w : Main.ds.ways) {
+		for (Way w : getData().ways) {
 			if (w.deleted || w.incomplete) continue;
 			Node lastN = null;
@@ -273,5 +279,5 @@
 	public Collection<OsmPrimitive> getAllNearest(Point p) {
 		Collection<OsmPrimitive> nearest = new HashSet<OsmPrimitive>();
-			for (Way w : Main.ds.ways) {
+			for (Way w : getData().ways) {
 			if (w.deleted || w.incomplete) continue;
 			Node lastN = null;
@@ -295,5 +301,5 @@
 				}
 			}
-		for (Node n : Main.ds.nodes) {
+		for (Node n : getData().nodes) {
 			if (!n.deleted && !n.incomplete
 					&& getPoint(n.eastNorth).distanceSq(p) < snapDistance) {
@@ -314,5 +320,5 @@
 	public Collection<Node> getNearestNodes(Point p) {
 		Collection<Node> nearest = new HashSet<Node>();
-		for (Node n : Main.ds.nodes) {
+		for (Node n : getData().nodes) {
 			if (!n.deleted && !n.incomplete
 					&& getPoint(n.eastNorth).distanceSq(p) < snapDistance) {
Index: /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 844)
+++ /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 845)
@@ -285,5 +285,5 @@
 		} else {
 			// nodes
-			for (Node n : Main.ds.nodes) {
+			for (Node n : nc.getData().nodes) {
 				if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n.eastNorth)))
 					selection.add(n);
@@ -291,5 +291,5 @@
 			
 			// ways
-			for (Way w : Main.ds.ways) {
+			for (Way w : nc.getData().ways) {
 				if (w.deleted || w.nodes.isEmpty() || w.incomplete)
 						continue;
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 844)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 845)
@@ -288,5 +288,5 @@
 	 */
 	public void layerAdded(Layer newLayer) {
-		model.add(0, newLayer);
+		model.add(model.size(), newLayer);
 		updateButtonEnabled();
 	}
