Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1404)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1405)
@@ -34,5 +34,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangeCommand;
@@ -49,6 +48,6 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -69,4 +68,5 @@
     private boolean mouseOnExistingNode;
     private boolean drawHelperLine;
+    private boolean wayIsFinished = false;
     private Point mousePos;
     private Color selectedColor;
@@ -97,5 +97,6 @@
         selectedColor = Main.pref.getColor(marktr("selected"), Color.red);
         drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
-
+        wayIsFinished = false;
+        
         Main.map.mapView.addMouseListener(this);
         Main.map.mapView.addMouseMotionListener(this);
@@ -161,4 +162,6 @@
             // A double click equals "user clicked last node again, finish way"
             lastUsedNode = null;
+            wayIsFinished = true;
+            Main.map.selectSelectTool(true);
             return;
         }
@@ -178,5 +181,4 @@
         boolean newNode = false;
         Node n = null;
-        boolean wayIsFinished = false;
 
         if (!ctrl)
@@ -252,5 +254,7 @@
         // If the above does not apply, the selection is cleared and a new try is started
         boolean extendedWay = false;
-        if (!shift && selection.size() > 0) {
+        boolean wayIsFinishedTemp = wayIsFinished;
+        wayIsFinished = false;
+        if (!shift && selection.size() > 0 && !wayIsFinishedTemp) {
             Node selectedNode = null;
             Way selectedWay = null;
@@ -326,4 +330,6 @@
             if(n0 == n) {
                 lastUsedNode = null;
+                wayIsFinished = true;
+                Main.map.selectSelectTool(true);
                 return;
             }
@@ -373,5 +379,5 @@
             Main.ds.setSelected(way);
         }
-                
+      
         String title;
         if (!extendedWay) {
@@ -505,5 +511,5 @@
         updateStatusLine();
 
-        if (!drawHelperLine) return;
+        if (!drawHelperLine || wayIsFinished) return;
 
         Main.map.mapView.repaint();
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1404)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1405)
@@ -19,6 +19,6 @@
 import org.openstreetmap.josm.actions.MergeNodesAction;
 import org.openstreetmap.josm.command.AddCommand;
+import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.command.RotateCommand;
@@ -32,10 +32,10 @@
 import org.openstreetmap.josm.data.osm.visitor.AllNodesVisitor;
 import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.SelectionManager;
 import org.openstreetmap.josm.gui.SelectionManager.SelectionEnded;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -329,4 +329,7 @@
         if (mode == Mode.select) {
             selectionManager.unregister(Main.map.mapView);
+            if(Main.ds.getSelected().size() == 0)
+                Main.map.selectDrawTool(true);
+                return;
         }
         restoreCursor();
Index: /trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 1404)
+++ /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 1405)
@@ -112,4 +112,19 @@
         statusLine = new MapStatus(this);
     }
+    
+    public void selectSelectTool(boolean onlyIfModeless) {
+        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+            return;
+        
+        selectMapMode((MapMode)getDefaultButtonAction());
+    }
+    
+    public void selectDrawTool(boolean onlyIfModeless) {
+        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+            return;
+        
+        Action drawAction = ((AbstractButton)toolBarActions.getComponent(1)).getAction();
+        selectMapMode((MapMode)drawAction);
+    }
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/LafPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/LafPreference.java	(revision 1404)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/LafPreference.java	(revision 1405)
@@ -33,4 +33,5 @@
     private JCheckBox showID = new JCheckBox(tr("Show object ID in selection lists"));
     private JCheckBox drawHelperLine = new JCheckBox(tr("Draw rubber-band helper line"));
+    private JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
 
     public void addGui(PreferenceDialog gui) {
@@ -82,4 +83,8 @@
         panel.add(drawHelperLine, GBC.eop().insets(20, 0, 0, 0));
 
+        modeless.setToolTipText(tr("Do not require to switch modes (potlatch style workflow)"));
+        modeless.setSelected(Main.pref.getBoolean("modeless", false));
+        panel.add(modeless, GBC.eop().insets(20, 0, 0, 0));
+
         panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
 
@@ -97,4 +102,5 @@
         Main.pref.put("osm-primitives.showid", showID.isSelected());
         Main.pref.put("draw.helper-line", drawHelperLine.isSelected());
+        Main.pref.put("modeless", modeless.isSelected());
         return Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName());
     }
