Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4055)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 4056)
@@ -683,4 +683,5 @@
         public boolean use_last_as_default = false;
         public boolean required = false;
+        public long rows = -1;
 
         private List<String> short_description_list;
@@ -752,5 +753,6 @@
 
             list = new ConcatenatingJList(delimiter, lhm.values().toArray());
-            list.setCellRenderer(new PresetListCellRenderer());
+            PresetListCellRenderer renderer = new PresetListCellRenderer();
+            list.setCellRenderer(renderer);
 
             if (usage.hasUniqueValue() && !usage.unused()) {
@@ -776,5 +778,14 @@
             }
             p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
-            p.add(new JScrollPane(list), GBC.eol().fill(GBC.HORIZONTAL));
+            JScrollPane sp = new JScrollPane(list);
+            // if a number of rows has been specified in the preset,
+            // modify preferred height of scroll pane to match that row count.
+            if (rows != -1)
+            {
+                double height = renderer.getListCellRendererComponent(list, 
+                    new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * rows;
+                sp.setPreferredSize(new Dimension((int) sp.getPreferredSize().getWidth(), (int) height));
+            }
+            p.add(sp, GBC.eol().fill(GBC.HORIZONTAL));
             return true;
         }
