Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2902)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2903)
@@ -554,6 +554,11 @@
         }
 
+        // FIXME: incline=\"-*\" search pattern does not work.
         String reversedDirectionDefault = "oneway=\"-1\" | incline=down | incline=\"-*\"";
-        String directionDefault = "oneway? | incline=* | aerialway=* | waterway=stream | waterway=river | waterway=canal | waterway=drain | waterway=rapids | \"piste:type\"=downhill | \"piste:type\"=sled | man_made=\"piste:halfpipe\" ";
+        
+        String directionDefault = "oneway? | incline=* | aerialway=* | "+
+                                  "waterway=stream | waterway=river | waterway=canal | waterway=drain | waterway=rapids | "+
+                                  "\"piste:type\"=downhill | \"piste:type\"=sled | man_made=\"piste:halfpipe\" | "+
+                                  "junction=roundabout";
 
         try {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 2902)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 2903)
@@ -258,18 +258,4 @@
             list.setElementAt(osm, i++);
         }
-        if (selectionHistory != null && newSelection.size() > 0 && !newSelection.equals(historyIgnoreSelection)) {
-            historyIgnoreSelection = null;
-            try {
-                // Check if the newSelection has already been added to the history
-                Collection<? extends OsmPrimitive> first = selectionHistory.getFirst();
-                if (first.equals(newSelection))
-                    return;
-            } catch (NoSuchElementException e) {
-            }
-            selectionHistory.addFirst(newSelection);
-            while (selectionHistory.size() > SELECTION_HISTORY_SIZE) {
-                selectionHistory.removeLast();
-            }
-        }
 
         int ways = 0;
@@ -290,4 +276,19 @@
         } else {
             setTitle(tr("Selection"));
+        }
+        
+        if (selectionHistory != null && newSelection.size() > 0 && !newSelection.equals(historyIgnoreSelection)) {
+            historyIgnoreSelection = null;
+            try {
+                // Check if the newSelection has already been added to the history
+                Collection<? extends OsmPrimitive> first = selectionHistory.getFirst();
+                if (first.equals(newSelection))
+                    return;
+            } catch (NoSuchElementException e) {
+            }
+            selectionHistory.addFirst(newSelection);
+            while (selectionHistory.size() > SELECTION_HISTORY_SIZE) {
+                selectionHistory.removeLast();
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 2902)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 2903)
@@ -8,4 +8,5 @@
 
 import java.awt.Component;
+import java.awt.Container;
 import java.awt.GridBagLayout;
 import java.awt.Image;
@@ -702,17 +703,39 @@
         }
 
+        JPanel items = new JPanel(new GridBagLayout());
         for (Item i : data){
             if(i instanceof Link) {
                 l.add(i);
             } else {
-                if(i.addToPanel(p, selected)) {
+                if(i.addToPanel(items, selected)) {
                     p.hasElements = true;
                 }
             }
         }
+        p.add(items, GBC.eol().fill());
+        if (selected.size() == 0) {
+            setEnabledRec(items, false);
+        }
+
         for(Item link : l) {
             link.addToPanel(p, selected);
         }
+
         return p;
+    }
+
+    /**
+     * setEnabled() does not propagate to child elements, so we need this workaround.
+     */
+    static void setEnabledRec(Container root, boolean enabled) {
+        root.setEnabled(enabled);
+        Component children[] = root.getComponents();
+        for(int i = 0; i < children.length; i++) {
+            if(children[i] instanceof Container) {
+                setEnabledRec((Container)children[i], enabled);
+            } else {
+                children[i].setEnabled(enabled);
+            }
+        }
     }
 
