Index: /trunk/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AbstractMergeAction.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/actions/AbstractMergeAction.java	(revision 5429)
@@ -11,5 +11,4 @@
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.Icon;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -20,4 +19,5 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -58,5 +58,5 @@
 
     protected Layer askTargetLayer(List<Layer> targetLayers) {
-        JComboBox layerList = new JComboBox();
+        JosmComboBox layerList = new JosmComboBox();
         layerList.setRenderer(new LayerListCellRenderer());
         layerList.setModel(new DefaultComboBoxModel(targetLayers.toArray()));
Index: /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5429)
@@ -3,13 +3,4 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.GridBagLayout;
-import java.awt.event.ActionListener;
-import java.util.Collection;
-import java.util.Collections;
-
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
 
 import org.openstreetmap.josm.data.Bounds;
@@ -19,6 +10,4 @@
 import org.openstreetmap.josm.data.projection.proj.LambertConformalConic;
 import org.openstreetmap.josm.data.projection.proj.ProjParameters;
-import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 5429)
@@ -29,5 +29,4 @@
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -44,4 +43,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -252,5 +252,5 @@
         p.setLayout(new FlowLayout(FlowLayout.LEFT));
         p.add(new JLabel(tr("Compare ")));
-        JComboBox cbComparePair =new JComboBox(model.getComparePairListModel());
+        JosmComboBox cbComparePair = new JosmComboBox(model.getComparePairListModel());
         cbComparePair.setRenderer(new ComparePairListCellRenderer());
         p.add(cbComparePair);
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java	(revision 5429)
@@ -13,5 +13,4 @@
 import javax.swing.AbstractCellEditor;
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -20,4 +19,6 @@
 import javax.swing.UIManager;
 import javax.swing.table.TableCellEditor;
+
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
 /**
@@ -40,5 +41,5 @@
 
     /** the combo box used as editor */
-    private JComboBox editor;
+    private JosmComboBox editor;
     private DefaultComboBoxModel editorModel;
     private CopyOnWriteArrayList<NavigationListener> listeners;
@@ -68,5 +69,5 @@
     public MultiValueCellEditor() {
         editorModel = new DefaultComboBoxModel();
-        editor = new JComboBox(editorModel) {
+        editor = new JosmComboBox(editorModel) {
             @Override
             public void processKeyEvent(KeyEvent e) {
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java	(revision 5429)
@@ -4,5 +4,4 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Color;
 import java.awt.Component;
 import java.awt.Font;
@@ -10,5 +9,4 @@
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.ImageIcon;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JTable;
@@ -17,4 +15,5 @@
 
 import org.openstreetmap.josm.gui.conflict.ConflictColors;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -28,5 +27,5 @@
     private ImageIcon iconUndecided;
     private DefaultComboBoxModel model;
-    private JComboBox cbDecisionRenderer;
+    private JosmComboBox cbDecisionRenderer;
 
     public MultiValueCellRenderer() {
@@ -34,5 +33,5 @@
         iconDecided = ImageProvider.get("dialogs/conflict", "tagconflictresolved");
         iconUndecided = ImageProvider.get("dialogs/conflict", "tagconflictunresolved");
-        cbDecisionRenderer = new JComboBox(model = new DefaultComboBoxModel());
+        cbDecisionRenderer = new JosmComboBox(model = new DefaultComboBoxModel());
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java	(revision 5429)
@@ -6,5 +6,4 @@
 
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
 import javax.swing.JTable;
 import javax.swing.event.CellEditorListener;
@@ -12,6 +11,7 @@
 
 import org.openstreetmap.josm.gui.util.TableCellEditorSupport;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
-public class RelationMemberConflictDecisionEditor extends JComboBox implements TableCellEditor {
+public class RelationMemberConflictDecisionEditor extends JosmComboBox implements TableCellEditor {
 
     public RelationMemberConflictDecisionEditor() {
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java	(revision 5429)
@@ -6,5 +6,4 @@
 
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -14,7 +13,9 @@
 import javax.swing.table.TableCellRenderer;
 
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+
 public class RelationMemberConflictDecisionRenderer extends JLabel implements TableCellRenderer, ListCellRenderer{
 
-    private JComboBox cbDecisionTypes;
+    private JosmComboBox cbDecisionTypes;
 
     protected void resetTableRenderer() {
@@ -34,5 +35,5 @@
     public RelationMemberConflictDecisionRenderer() {
         DefaultComboBoxModel model = new DefaultComboBoxModel();
-        cbDecisionTypes = new JComboBox(model);
+        cbDecisionTypes = new JosmComboBox(model);
         model.addElement(RelationMemberConflictDecisionType.KEEP);
         model.addElement(RelationMemberConflictDecisionType.REMOVE);
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java	(revision 5429)
@@ -6,9 +6,10 @@
 
 import javax.swing.AbstractAction;
-import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JTable;
 import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
+
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
 public class RelationMemberConflictResolverTable extends JTable implements MultiValueCellEditor.NavigationListener {
@@ -39,5 +40,5 @@
         getActionMap().put("selectPreviousColumnCell", selectPreviousColumnCellAction);
 
-        setRowHeight((int)new JComboBox().getPreferredSize().getHeight());
+        setRowHeight((int)new JosmComboBox().getPreferredSize().getHeight());
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java	(revision 5429)
@@ -6,9 +6,10 @@
 
 import javax.swing.AbstractAction;
-import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JTable;
 import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
+
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
 public class TagConflictResolverTable extends JTable implements MultiValueCellEditor.NavigationListener {
@@ -41,5 +42,5 @@
         ((MultiValueCellEditor)getColumnModel().getColumn(2).getCellEditor()).addNavigationListeners(this);
 
-        setRowHeight((int)new JComboBox().getPreferredSize().getHeight());
+        setRowHeight((int)new JosmComboBox().getPreferredSize().getHeight());
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 5429)
@@ -53,5 +53,4 @@
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.ImageIcon;
-import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JDialog;
@@ -114,4 +113,5 @@
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
@@ -711,5 +711,5 @@
     private final JTable membershipTable = new JTable(membershipData);
 
-    public JComboBox taggingPresets = new JComboBox();
+    public JosmComboBox taggingPresets = new JosmComboBox();
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 5429)
@@ -3,5 +3,4 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trc;
 
 import java.awt.BorderLayout;
@@ -29,5 +28,4 @@
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.JButton;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -53,4 +51,5 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.GBC;
@@ -75,5 +74,5 @@
         //new Server("Namefinder","http://gazetteer.openstreetmap.org/namefinder/search.xml?find=",tr("Near"),trc("placeselection", "Zoom"))
     };
-    private final JComboBox server = new JComboBox(servers);
+    private final JosmComboBox server = new JosmComboBox(servers);
 
     private static class Server {
@@ -103,6 +102,6 @@
         lpanel.add(server);
         String s = Main.pref.get("namefinder.server", servers[0].name);
-        for(int i = 0; i < servers.length; ++i) {
-            if(servers[i].name.equals(s)) {
+        for (int i = 0; i < servers.length; ++i) {
+            if (servers[i].name.equals(s)) {
                 server.setSelectedIndex(i);
             }
Index: /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 5429)
@@ -18,5 +18,4 @@
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
@@ -28,4 +27,5 @@
 import org.openstreetmap.josm.data.osm.ChangesetCache;
 import org.openstreetmap.josm.gui.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -54,5 +54,5 @@
     private JRadioButton rbUseNew;
     private JRadioButton rbExisting;
-    private JComboBox cbOpenChangesets;
+    private JosmComboBox cbOpenChangesets;
     private JButton btnRefresh;
     private JButton btnClose;
@@ -108,5 +108,5 @@
         model = new OpenChangesetComboBoxModel();
         ChangesetCache.getInstance().addChangesetCacheListener(model);
-        cbOpenChangesets = new JComboBox(model);
+        cbOpenChangesets = new JosmComboBox(model);
         cbOpenChangesets.setToolTipText(tr("Select an open changeset"));
         cbOpenChangesets.setRenderer(new ChangesetCellRenderer());
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 5429)
@@ -44,5 +44,4 @@
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.Icon;
-import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JFileChooser;
@@ -96,4 +95,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressTaskIds;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.io.OsmTransferException;
@@ -1396,5 +1396,5 @@
             }
 
-            JComboBox layerList = new JComboBox();
+            JosmComboBox layerList = new JosmComboBox();
             layerList.setRenderer(new LayerListCellRenderer());
             layerList.setModel(new DefaultComboBoxModel(targetLayers.toArray()));
Index: /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 5429)
@@ -45,5 +45,4 @@
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
@@ -74,4 +73,5 @@
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.GpxReader;
 import org.openstreetmap.josm.tools.ExifReader;
@@ -117,5 +117,5 @@
     Vector<GpxDataWrapper> gpxLst = new Vector<GpxDataWrapper>();
     JPanel outerPanel;
-    JComboBox cbGpx;
+    JosmComboBox cbGpx;
     JTextField tfTimezone;
     JTextField tfOffset;
@@ -231,5 +231,5 @@
         JLabel lbExifTime;
         JTextField tfGpsTime;
-        JComboBox cbTimezones;
+        JosmComboBox cbTimezones;
         ImageDisplay imgDisp;
         JList imgList;
@@ -309,5 +309,5 @@
             Collections.sort(vtTimezones);
 
-            cbTimezones = new JComboBox(vtTimezones);
+            cbTimezones = new JosmComboBox(vtTimezones);
 
             String tzId = Main.pref.get("geoimage.timezoneid", "");
@@ -482,5 +482,5 @@
         panelCb.add(new JLabel(tr("GPX track: ")));
 
-        cbGpx = new JComboBox(gpxLst);
+        cbGpx = new JosmComboBox(gpxLst);
         if (defaultItem != null) {
             cbGpx.setSelectedItem(defaultItem);
Index: /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBox.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBox.java	(revision 5429)
@@ -7,5 +7,4 @@
 
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -13,5 +12,7 @@
 import javax.swing.UIManager;
 
-public class AuthorizationProcedureComboBox extends JComboBox {
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+
+public class AuthorizationProcedureComboBox extends JosmComboBox {
 
     public AuthorizationProcedureComboBox() {
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 5429)
@@ -13,5 +13,4 @@
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -27,4 +26,5 @@
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker.TemplateEntryProperty;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -58,5 +58,5 @@
     private JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)"));
     private JRadioButton colorTypeGlobal  = new JRadioButton(tr("Use global settings"));
-    private JComboBox colorTypeVelocityTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")});
+    private JosmComboBox colorTypeVelocityTune = new JosmComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")});
     private JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX"));
     private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));
@@ -64,7 +64,7 @@
     private JTextField drawGpsArrowsMinDist = new JTextField(8);
     private JCheckBox colorDynamic = new JCheckBox(tr("Dynamic color range based on data limits"));
-    private JComboBox waypointLabel = new JComboBox(LABEL_PATTERN_DESC);
+    private JosmComboBox waypointLabel = new JosmComboBox(LABEL_PATTERN_DESC);
     private JTextField waypointLabelPattern = new JTextField();
-    private JComboBox audioWaypointLabel = new JComboBox(LABEL_PATTERN_DESC);
+    private JosmComboBox audioWaypointLabel = new JosmComboBox(LABEL_PATTERN_DESC);
     private JTextField audioWaypointLabelPattern = new JTextField();
 
@@ -414,5 +414,5 @@
     }
 
-    private void updateWaypointLabelCombobox(JComboBox cb, JTextField tf, TemplateEntryProperty property) {
+    private void updateWaypointLabelCombobox(JosmComboBox cb, JTextField tf, TemplateEntryProperty property) {
         String labelPattern = property.getAsString();
         boolean found = false;
@@ -431,5 +431,5 @@
     }
 
-    private void updateWaypointPattern(JComboBox cb, JTextField tf) {
+    private void updateWaypointPattern(JosmComboBox cb, JTextField tf) {
         if (cb.getSelectedIndex() == WAYPOINT_LABEL_CUSTOM) {
             tf.setEnabled(true);
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 5429)
@@ -11,5 +11,4 @@
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -27,4 +26,5 @@
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -40,5 +40,5 @@
      * ComboBox with all look and feels.
      */
-    private JComboBox lafCombo;
+    private JosmComboBox lafCombo;
     public JPanel panel;
     private JCheckBox showSplashScreen = new JCheckBox(tr("Show splash screen at startup"));
@@ -49,5 +49,5 @@
 
     public void addGui(PreferenceTabbedPane gui) {
-        lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels());
+        lafCombo = new JosmComboBox(UIManager.getInstalledLookAndFeels());
 
         // let's try to load additional LookAndFeels and put them into the list
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 5429)
@@ -13,5 +13,4 @@
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.DefaultListCellRenderer;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -25,4 +24,5 @@
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
@@ -36,5 +36,5 @@
 
     /** the combo box with the available locales */
-    private JComboBox langCombo;
+    private JosmComboBox langCombo;
     /** the model for the combo box */
     private LanguageComboBoxModel model;
@@ -45,5 +45,5 @@
         // See http://stackoverflow.com/questions/3194958/fast-replacement-for-jcombobox-basiccomboboxui 
         model.selectLanguage(Main.pref.get("language"));
-        langCombo = new JComboBox(model);
+        langCombo = new JosmComboBox(model);
         langCombo.setRenderer(new LanguageCellRenderer(langCombo.getRenderer()));
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java	(revision 5429)
@@ -36,5 +36,4 @@
 import javax.swing.JCheckBox;
 import javax.swing.JColorChooser;
-import javax.swing.JComboBox;
 import javax.swing.JEditorPane;
 import javax.swing.JLabel;
@@ -80,4 +79,5 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.imagery.HTMLGrabber;
 import org.openstreetmap.josm.io.imagery.OffsetServer;
@@ -107,10 +107,10 @@
     private JButton btnFadeColor;
     private JSlider fadeAmount = new JSlider(0, 100);
-    private JComboBox sharpen;
+    private JosmComboBox sharpen;
     private JCheckBox useOffsetServer;
     private JTextField offsetServerUrl;
 
     // WMS Settings
-    private JComboBox browser;
+    private JosmComboBox browser;
     private JCheckBox overlapCheckBox;
     private JSpinner spinEast;
@@ -157,5 +157,5 @@
         p.add(this.fadeAmount, GBC.eol().fill(GBC.HORIZONTAL));
 
-        this.sharpen = new JComboBox(new String[] {
+        this.sharpen = new JosmComboBox(new String[] {
                 tr("None"),
                 tr("Soft"),
@@ -181,5 +181,5 @@
     private JPanel buildWMSSettingsPanel() {
         final JPanel p = new JPanel(new GridBagLayout());
-        browser = new JComboBox(new String[] {
+        browser = new JosmComboBox(new String[] {
                 "webkit-image {0}",
                 "gnome-web-photo --mode=photo --format=png {0} /dev/stdout",
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java	(revision 5429)
@@ -7,8 +7,8 @@
 import java.util.Collections;
 
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -72,8 +72,8 @@
 
     protected class CBPanel extends JPanel {
-        public JComboBox prefcb;
+        public JosmComboBox prefcb;
 
         public CBPanel(Object[] entries, int initialIndex, String label, final ActionListener listener) {
-            prefcb = new JComboBox(entries);
+            prefcb = new JosmComboBox(entries);
 
             prefcb.setSelectedIndex(initialIndex);
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 5429)
@@ -16,5 +16,4 @@
 
 import javax.swing.BorderFactory;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -43,4 +42,5 @@
 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -113,12 +113,12 @@
      * Combobox with all projections available
      */
-    private JComboBox projectionCombo = new JComboBox(projectionChoices.toArray());
+    private JosmComboBox projectionCombo = new JosmComboBox(projectionChoices.toArray());
 
     /**
      * Combobox with all coordinate display possibilities
      */
-    private JComboBox coordinatesCombo = new JComboBox(CoordinateFormat.values());
-
-    private JComboBox unitsCombo = new JComboBox(unitsValuesTr);
+    private JosmComboBox coordinatesCombo = new JosmComboBox(CoordinateFormat.values());
+
+    private JosmComboBox unitsCombo = new JosmComboBox(unitsValuesTr);
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java	(revision 5429)
@@ -25,5 +25,4 @@
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -46,4 +45,5 @@
 import javax.swing.table.TableRowSorter;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -134,5 +134,5 @@
     private JCheckBox cbDefault = new JCheckBox();
     private JCheckBox cbDisable = new JCheckBox();
-    private JComboBox tfKey = new JComboBox();
+    private JosmComboBox tfKey = new JosmComboBox();
 
     JTable shortcutTable = new JTable();
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 5429)
@@ -10,5 +10,4 @@
 import java.awt.Font;
 import java.awt.GridBagLayout;
-import java.awt.Image;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
@@ -36,5 +35,4 @@
 import javax.swing.Action;
 import javax.swing.ImageIcon;
-import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
@@ -74,4 +72,5 @@
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.io.MirroredInputStream;
 import org.openstreetmap.josm.tools.GBC;
@@ -396,5 +395,5 @@
             } else {
                 // the objects have different values
-                JComboBox comboBox = new JComboBox(usage.values.toArray());
+                JosmComboBox comboBox = new JosmComboBox(usage.values.toArray());
                 comboBox.setEditable(true);
                 comboBox.setEditor(textField);
@@ -421,6 +420,6 @@
 
             // return if unchanged
-            String v = (value instanceof JComboBox)
-                    ? ((JComboBox) value).getEditor().getItem().toString()
+            String v = (value instanceof JosmComboBox)
+                    ? ((JosmComboBox) value).getEditor().getItem().toString()
                             : ((JTextField) value).getText();
                     v = v.trim();
@@ -800,5 +799,5 @@
 
         public boolean editable = true;
-        protected JComboBox combo;
+        protected JosmComboBox combo;
 
         public Combo() {
@@ -820,9 +819,9 @@
             lhm.put("", new PresetListEntry(""));
 
-            combo = new JComboBox(lhm.values().toArray());
+            combo = new JosmComboBox(lhm.values().toArray());
             component = combo;
             combo.setRenderer(getListCellRenderer());
             combo.setEditable(editable);
-            combo.setMaximumRowCount(13);
+            //combo.setMaximumRowCount(13);
             AutoCompletingTextField tf = new AutoCompletingTextField();
             initAutoCompletionField(tf, key);
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 5429)
@@ -13,5 +13,4 @@
 import javax.swing.ComboBoxModel;
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
@@ -24,9 +23,10 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
 /**
  * @author guilhem.bonnefille@gmail.com
  */
-public class AutoCompletingComboBox extends JComboBox {
+public class AutoCompletingComboBox extends JosmComboBox {
 
     private boolean autocompleteEnabled = true;
@@ -35,13 +35,13 @@
 
     /**
-     * Auto-complete a JComboBox.
+     * Auto-complete a JosmComboBox.
      *
      * Inspired by http://www.orbital-computer.de/JComboBox/
      */
     class AutoCompletingComboBoxDocument extends PlainDocument {
-        private JComboBox comboBox;
+        private JosmComboBox comboBox;
         private boolean selecting = false;
 
-        public AutoCompletingComboBoxDocument(final JComboBox comboBox) {
+        public AutoCompletingComboBoxDocument(final JosmComboBox comboBox) {
             this.comboBox = comboBox;
         }
@@ -167,6 +167,4 @@
                 }
         );
-        int maxsize=Math.max(getMaximumRowCount(),java.awt.Toolkit.getDefaultToolkit().getScreenSize().height/getPreferredSize().height - 1);
-        setMaximumRowCount(maxsize);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java	(revision 5429)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java	(revision 5429)
@@ -0,0 +1,111 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.widgets;
+
+import java.util.Vector;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+
+/**
+ * Class overriding each {@link JComboBox} in JOSM to control consistently the number of displayed items at once.<br/>
+ * This is needed because of the default Java behaviour that may display the top-down list off the screen (see #).
+ * <p>
+ * The property {@code gui.combobox.maximum-row-count} can be setup to control this behaviour.
+ * 
+ * @since 5429
+ */
+public class JosmComboBox extends JComboBox implements PreferenceChangedListener {
+
+    /**
+     * This property allows to control the {@link #getMaximumRowCount} of all combo boxes used in JOSM.
+     */
+    public static final String PROP_MAXIMUM_ROW_COUNT = "gui.combobox.maximum-row-count";
+    
+    /**
+     * Creates a <code>JosmComboBox</code> with a default data model.
+     * The default data model is an empty list of objects.
+     * Use <code>addItem</code> to add items.  By default the first item
+     * in the data model becomes selected.
+     *
+     * @see DefaultComboBoxModel
+     */
+    public JosmComboBox() {
+        super();
+        init();
+    }
+
+    /**
+     * Creates a <code>JosmComboBox</code> that takes its items from an
+     * existing <code>ComboBoxModel</code>.  Since the
+     * <code>ComboBoxModel</code> is provided, a combo box created using
+     * this constructor does not create a default combo box model and
+     * may impact how the insert, remove and add methods behave.
+     *
+     * @param aModel the <code>ComboBoxModel</code> that provides the 
+     *      displayed list of items
+     * @see DefaultComboBoxModel
+     */
+    public JosmComboBox(ComboBoxModel aModel) {
+        super(aModel);
+        init();
+    }
+
+    /** 
+     * Creates a <code>JosmComboBox</code> that contains the elements
+     * in the specified array.  By default the first item in the array
+     * (and therefore the data model) becomes selected.
+     *
+     * @param items  an array of objects to insert into the combo box
+     * @see DefaultComboBoxModel
+     */
+    public JosmComboBox(Object[] items) {
+        super(items);
+        init();
+    }
+
+    /**
+     * Creates a <code>JosmComboBox</code> that contains the elements
+     * in the specified Vector.  By default the first item in the vector
+     * (and therefore the data model) becomes selected.
+     *
+     * @param items  an array of vectors to insert into the combo box
+     * @see DefaultComboBoxModel
+     */
+    public JosmComboBox(Vector<?> items) {
+        super(items);
+        init();
+    }
+    
+    protected void init() {
+        setMaximumRowCount(Main.pref.getInteger(PROP_MAXIMUM_ROW_COUNT, 20));
+    }
+    
+    /**
+     * Registers this combo box to the change of the property {@code gui.combobox.maximum-row-count}.<br/>
+     * Do not forget to call {@link #unregisterFromPreferenceChange} when the combo box is no longer needed.
+     * @see #unregisterFromPreferenceChange
+     */
+    public final void registerToPreferenceChange() {
+        Main.pref.addPreferenceChangeListener(this);
+    }
+    
+    /**
+     * Unregisters this combo box previously registered by {@link #registerToPreferenceChange}.
+     * @see #registerToPreferenceChange
+     */
+    public final void unregisterFromPreferenceChange() {
+        Main.pref.removePreferenceChangeListener(this);
+    }
+
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if (PROP_MAXIMUM_ROW_COUNT.equals(e.getKey())) {
+            setMaximumRowCount(Main.pref.getInteger(PROP_MAXIMUM_ROW_COUNT, 20));
+        }
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/widgets/OsmPrimitiveTypesComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/OsmPrimitiveTypesComboBox.java	(revision 5428)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/OsmPrimitiveTypesComboBox.java	(revision 5429)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
-
-import javax.swing.JComboBox;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -9,5 +7,5 @@
  * @author Matthias Julius
  */
-public class OsmPrimitiveTypesComboBox extends JComboBox {
+public class OsmPrimitiveTypesComboBox extends JosmComboBox {
 
     public OsmPrimitiveTypesComboBox() {
