Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1816)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1817)
@@ -39,4 +39,6 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Pair;
@@ -48,5 +50,5 @@
  * @author Imi
  */
-public class CombineWayAction extends JosmAction implements SelectionChangedListener {
+public class CombineWayAction extends JosmAction implements SelectionChangedListener,LayerChangeListener {
 
     public CombineWayAction() {
@@ -54,7 +56,11 @@
                 Shortcut.registerShortcut("tools:combineway", tr("Tool: {0}", tr("Combine Way")), KeyEvent.VK_C, Shortcut.GROUP_EDIT), true);
         DataSet.selListeners.add(this);
+        Layer.listeners.add(this);
+        refreshEnabled();
     }
 
     public void actionPerformed(ActionEvent event) {
+        if (getCurrentDataSet() == null)
+            return;
         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
         LinkedList<Way> selectedWays = new LinkedList<Way>();
@@ -298,15 +304,35 @@
      */
     public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        boolean first = false;
-        for (OsmPrimitive osm : newSelection) {
+        refreshEnabled();
+    }
+
+    protected void refreshEnabled() {
+        if (getCurrentDataSet() == null) {
+            setEnabled(false);
+            return;
+        }
+        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        int numWays = 0;
+
+        for (OsmPrimitive osm : selection)
             if (osm instanceof Way) {
-                if (first) {
-                    setEnabled(true);
-                    return;
-                }
-                first = true;
-            }
-        }
-        setEnabled(false);
-    }
+                numWays++;
+            }
+        setEnabled(numWays >= 2);
+    }
+
+
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        refreshEnabled();
+    }
+
+    public void layerAdded(Layer newLayer) {
+        refreshEnabled();
+
+    }
+
+    public void layerRemoved(Layer oldLayer) {
+        refreshEnabled();
+    }
+
 }
