Index: /trunk/images_nodist/dialogs/wireframe.svg
===================================================================
--- /trunk/images_nodist/dialogs/wireframe.svg	(revision 3894)
+++ /trunk/images_nodist/dialogs/wireframe.svg	(revision 3894)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="40"
+   height="40"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47pre4 r22446"
+   sodipodi:docname="wireframe.svg"
+   inkscape:export-xdpi="45"
+   inkscape:export-ydpi="45">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2839"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607-7"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607-73"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3607-56"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.2043771"
+     inkscape:cx="-0.12854809"
+     inkscape:cy="16.079138"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1400"
+     inkscape:window-height="974"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       empspacing="5"
+       visible="false"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="1px"
+       spacingy="1px" />
+    <inkscape:grid
+       type="xygrid"
+       id="grid3666"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="2px"
+       spacingy="2px"
+       color="#00ff4b"
+       opacity="0.1254902"
+       empcolor="#04ff00"
+       empopacity="0.25098039"
+       dotted="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1012.3622)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 23,1033.3622 -12,4"
+       id="path3670" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 33,1019.3622 2,14 -4,12 -26,2"
+       id="path3668"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8"
+       width="4"
+       height="4"
+       x="3"
+       y="1045.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-7"
+       width="4"
+       height="4"
+       x="31"
+       y="1017.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-1"
+       width="4"
+       height="4"
+       x="33"
+       y="1031.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-9"
+       width="4"
+       height="4"
+       x="29"
+       y="1043.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-76"
+       width="4"
+       height="4"
+       x="21"
+       y="1031.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-6"
+       width="4"
+       height="4"
+       x="9"
+       y="1035.3622" />
+    <rect
+       style="color:#000000;fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2816-7-8-3"
+       width="4"
+       height="4"
+       x="11"
+       y="1019.3622" />
+  </g>
+</svg>
Index: /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 3894)
@@ -68,3 +68,7 @@
         setEnabled(Main.map != null && Main.main.getEditLayer() != null);
     }
+
+    public boolean isSelected() {
+        return selected;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 3894)
@@ -138,4 +138,5 @@
 
     /* View menu */
+    public final WireframeToggleAction wireFrameToggleAction = new WireframeToggleAction();
     public final JosmAction toggleGPXLines = new ToggleGPXLinesAction();
     public final InfoAction info = new InfoAction();
@@ -272,5 +273,4 @@
 
         // -- wireframe toggle action
-        WireframeToggleAction wireFrameToggleAction = new WireframeToggleAction();
         final JCheckBoxMenuItem wireframe = new JCheckBoxMenuItem(wireFrameToggleAction);
         viewMenu.add(wireframe);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 3894)
@@ -9,7 +9,9 @@
 import java.awt.Font;
 import java.awt.GridBagLayout;
+import java.awt.Insets;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
@@ -26,5 +28,7 @@
 
 import javax.swing.AbstractAction;
+import javax.swing.DefaultButtonModel;
 import javax.swing.DefaultListSelectionModel;
+import javax.swing.JCheckBox;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
@@ -38,6 +42,8 @@
 import javax.swing.ListSelectionModel;
 import javax.swing.SingleSelectionModel;
+import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
@@ -46,4 +52,5 @@
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableModel;
 
@@ -72,4 +79,7 @@
     protected OnOffAction onoffAction;
     protected ReloadAction reloadAction;
+    protected MoveUpDownAction upAction;
+    protected MoveUpDownAction downAction;
+    protected JCheckBox cbWireframe;
 
     public MapPaintDialog() {
@@ -84,4 +94,25 @@
 
         model = new StylesModel();
+
+        cbWireframe = new JCheckBox();
+        JLabel wfLabel = new JLabel(tr("Wireframe View"), ImageProvider.get("dialogs/mappaint", "wireframe_small"), JLabel.HORIZONTAL);
+        wfLabel.setFont(wfLabel.getFont().deriveFont(Font.PLAIN));
+
+        cbWireframe.setModel(new DefaultButtonModel() {
+            @Override
+            public void setSelected(boolean b) {
+                super.setSelected(b);
+                tblStyles.setEnabled(!b);
+                onoffAction.updateEnabledState();
+                upAction.updateEnabledState();
+                downAction.updateEnabledState();
+            }
+        });
+        cbWireframe.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                Main.main.menu.wireFrameToggleAction.actionPerformed(null);
+            }
+        });
+        cbWireframe.setBorder(new EmptyBorder(new Insets(1,1,1,1)));
         
         tblStyles = new StylesTable(model);
@@ -94,9 +125,15 @@
         tblStyles.getColumnModel().getColumn(0).setMaxWidth(1);
         tblStyles.getColumnModel().getColumn(0).setResizable(false);
+        tblStyles.getColumnModel().getColumn(0).setCellRenderer(new MyCheckBoxRenderer());
         tblStyles.getColumnModel().getColumn(1).setCellRenderer(new StyleSourceRenderer());
         tblStyles.setShowGrid(false);
         tblStyles.setIntercellSpacing(new Dimension(0, 0));
 
-        pnl.add(new JScrollPane(tblStyles), BorderLayout.CENTER);
+        JPanel p = new JPanel(new GridBagLayout());
+        p.add(cbWireframe, GBC.std(0, 0));
+        p.add(wfLabel, GBC.std(1, 0).weight(1, 0));
+        p.add(tblStyles, GBC.std(0, 1).span(2).fill());
+
+        pnl.add(new JScrollPane(p), BorderLayout.CENTER);
 
         pnl.add(buildButtonRow(), BorderLayout.SOUTH);
@@ -126,13 +163,13 @@
         reloadAction = new ReloadAction();
         onoffAction = new OnOffAction();
-        MoveUpDownAction up = new MoveUpDownAction(false);
-        MoveUpDownAction down = new MoveUpDownAction(true);
+        upAction = new MoveUpDownAction(false);
+        downAction = new MoveUpDownAction(true);
         selectionModel.addListSelectionListener(onoffAction);
         selectionModel.addListSelectionListener(reloadAction);
-        selectionModel.addListSelectionListener(up);
-        selectionModel.addListSelectionListener(down);
+        selectionModel.addListSelectionListener(upAction);
+        selectionModel.addListSelectionListener(downAction);
         p.add(new SideButton(onoffAction));
-        p.add(new SideButton(up));
-        p.add(new SideButton(down));
+        p.add(new SideButton(upAction));
+        p.add(new SideButton(downAction));
         p.add(new SideButton(new LaunchMapPaintPreferencesAction()));
 
@@ -143,8 +180,10 @@
     public void showNotify() {
         MapPaintStyles.addMapPaintSylesUpdateListener(model);
+        Main.main.menu.wireFrameToggleAction.addButtonModel(cbWireframe.getModel());
     }
 
     @Override
     public void hideNotify() {
+        Main.main.menu.wireFrameToggleAction.removeButtonModel(cbWireframe.getModel());
         MapPaintStyles.removeMapPaintSylesUpdateListener(model);
     }
@@ -232,5 +271,20 @@
     }
 
-    private static class StyleSourceRenderer extends DefaultTableCellRenderer {
+    private class MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer {
+
+        public MyCheckBoxRenderer() {
+            setHorizontalAlignment(SwingConstants.CENTER);
+            setVerticalAlignment(SwingConstants.CENTER);
+        }
+
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
+            boolean b = (Boolean) value;
+            setSelected(b);
+            setEnabled(!cbWireframe.isSelected());
+            return this;
+        }
+    }
+
+    private class StyleSourceRenderer extends DefaultTableCellRenderer {
         @Override
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
@@ -240,4 +294,5 @@
             label.setIcon(s.getIcon());
             label.setToolTipText(s.getToolTipText());
+            label.setEnabled(!cbWireframe.isSelected());
             return label;
         }
@@ -252,5 +307,5 @@
 
         protected void updateEnabledState() {
-            setEnabled(tblStyles.getSelectedRowCount() > 0);
+            setEnabled(!cbWireframe.isSelected() && tblStyles.getSelectedRowCount() > 0);
         }
 
@@ -274,5 +329,5 @@
      * The action to move down the currently selected entries in the list.
      */
-    class MoveUpDownAction extends AbstractAction implements ListSelectionListener {
+    protected class MoveUpDownAction extends AbstractAction implements ListSelectionListener {
 
         final int increment;
@@ -287,5 +342,5 @@
         public void updateEnabledState() {
             int[] sel = tblStyles.getSelectedRows();
-            setEnabled(MapPaintStyles.canMoveStyles(sel, increment));
+            setEnabled(!cbWireframe.isSelected() && MapPaintStyles.canMoveStyles(sel, increment));
         }
 
@@ -328,22 +383,23 @@
             putValue(SHORT_DESCRIPTION, tr("reload selected styles from file"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
-            updateEnabledState();
-        }
-
-        protected void updateEnabledState() {
+            setEnabled(getEnabledState());
+        }
+
+        protected boolean getEnabledState() {
+            if (cbWireframe.isSelected())
+                return false;
             int[] pos = tblStyles.getSelectedRows();
-            boolean e = pos.length > 0;
+            if (pos.length == 0)
+                return false;
             for (int i : pos) {
-                if (!model.getRow(i).isLocal()) {
-                    e = false;
-                    break;
-                }
-            }
-            setEnabled(e);
+                if (!model.getRow(i).isLocal())
+                    return false;
+            }
+            return true;
         }
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            updateEnabledState();
+            setEnabled(getEnabledState());
         }
 
@@ -599,4 +655,6 @@
         @Override
         public void launch(MouseEvent evt) {
+            if (cbWireframe.isSelected())
+                return;
             Point p = evt.getPoint();
             int index = tblStyles.rowAtPoint(p);
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java	(revision 3894)
@@ -15,4 +15,5 @@
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -23,10 +24,19 @@
     public File zipIcons;
 
-    public StyleSource(String url, String name, String shortdescription) {
-        super(url, name, shortdescription, true);
+    private ImageIcon imageIcon;
+
+    /******
+     * The following fields is additional information found in the header
+     * of the source file.
+     */
+    
+    public String icon;
+
+    public StyleSource(String url, String name, String title) {
+        super(url, name, title, true);
     }
 
     public StyleSource(SourceEntry entry) {
-        super(entry.url, entry.name, entry.shortdescription, entry.active);
+        super(entry.url, entry.name, entry.title, entry.active);
     }
 
@@ -45,15 +55,29 @@
     }
 
-    protected void clearErrors() {
+    protected void init() {
         errors.clear();
+        imageIcon = null;
+        icon = null;
     }
 
-    private static ImageIcon pencil;
+    private static ImageIcon defaultIcon;
+
+    private static ImageIcon getDefaultIcon() {
+        if (defaultIcon == null) {
+            defaultIcon = ImageProvider.get("dialogs/mappaint", "pencil");
+        }
+        return defaultIcon;
+    }
 
     protected ImageIcon getSourceIcon() {
-        if (pencil == null) {
-            pencil = ImageProvider.get("dialogs/mappaint", "pencil");
+        if (imageIcon == null) {
+            if (icon != null) {
+                imageIcon = MapPaintStyles.getIcon(new IconReference(icon, this), false);
+            }
+            if (imageIcon == null) {
+                imageIcon = getDefaultIcon();
+            }
         }
-        return pencil;
+        return imageIcon;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 3894)
@@ -41,6 +41,6 @@
     @Override
     public void loadStyleSource() {
+        init();
         rules.clear();
-        clearErrors();
         try {
             MapCSSParser parser = new MapCSSParser(getSourceInputStream(), "UTF-8");
@@ -100,7 +100,11 @@
         }
         Cascade c = mc.getCascade("default");
-        String sd = c.get("title", null, String.class);
-        if (sd != null) {
-            this.shortdescription = sd;
+        String pTitle = c.get("title", null, String.class);
+        if (title == null) {
+            title = pTitle;
+        }
+        String pIcon = c.get("icon", null, String.class);
+        if (icon == null) {
+            icon = pIcon;
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java	(revision 3894)
@@ -50,5 +50,5 @@
 
     protected void init() {
-        clearErrors();
+        super.init();
         icons.clear();
         lines.clear();
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java	(revision 3894)
@@ -160,6 +160,9 @@
                     style.name = atts.getValue("name");
                 }
-                if (style.shortdescription == null) {
-                    style.shortdescription = atts.getValue("shortdescription");
+                if (style.title == null) {
+                    style.title = atts.getValue("shortdescription");
+                }
+                if (style.icon == null) {
+                    style.icon = atts.getValue("icon");
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/MapPaintPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/MapPaintPreference.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/MapPaintPreference.java	(revision 3894)
@@ -242,5 +242,5 @@
             ExtendedSourceEntry i = new ExtendedSourceEntry("elemstyles.xml", "resource://styles/standard/elemstyles.xml");
             i.name = "standard";
-            i.shortdescription = tr("Internal Style");
+            i.title = tr("JOSM Internal Style");
             i.description = tr("Internal style to be used as base for runtime switchable overlay styles");
             return Collections.singletonList(i);
@@ -249,5 +249,5 @@
         @Override
         public Collection<String> serialize(SourceEntry entry) {
-            return Arrays.asList(new String[] {entry.url, entry.name, entry.shortdescription, Boolean.toString(entry.active)});
+            return Arrays.asList(new String[] {entry.url, entry.name, entry.title, Boolean.toString(entry.active)});
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 3894)
@@ -621,5 +621,5 @@
             super(url, null, null, true);
             this.simpleFileName = simpleFileName;
-            version = author = link = description = shortdescription = null;
+            version = author = link = description = title = null;
         }
 
@@ -628,5 +628,5 @@
          */
         public String getDisplayName() {
-            return shortdescription == null ? simpleFileName : shortdescription;
+            return title == null ? simpleFileName : title;
         }
 
@@ -656,8 +656,5 @@
     protected class EditSourceEntryDialog extends ExtendedDialog {
 
-        /**
-         * We call this text field "name", but it is actually the shortdescription.
-         */
-        private JTextField tfName;
+        private JTextField tfTitle;
         private JTextField tfURL;
         private JCheckBox cbActive;
@@ -670,7 +667,7 @@
             JPanel p = new JPanel(new GridBagLayout());
 
-            tfName = new JTextField(60);
+            tfTitle = new JTextField(60);
             p.add(new JLabel(tr("Name (optional):")), GBC.std().insets(15, 0, 5, 5));
-            p.add(tfName, GBC.eol().insets(0, 0, 5, 5));
+            p.add(tfTitle, GBC.eol().insets(0, 0, 5, 5));
 
             tfURL = new JTextField(60);
@@ -682,6 +679,6 @@
 
             if (e != null) {
-                if (e.shortdescription != null) {
-                    tfName.setText(e.shortdescription);
+                if (e.title != null) {
+                    tfTitle.setText(e.title);
                 }
                 tfURL.setText(e.url);
@@ -738,6 +735,6 @@
         }
 
-        public String getShortdescription() {
-            return tfName.getText();
+        public String getTitle() {
+            return tfTitle.getText();
         }
 
@@ -773,5 +770,5 @@
                 activeSourcesModel.addSource(new SourceEntry(
                         editEntryDialog.getURL(),
-                        null, editEntryDialog.getShortdescription(), active));
+                        null, editEntryDialog.getTitle(), active));
                 activeSourcesModel.fireTableDataChanged();
             }
@@ -828,8 +825,8 @@
             editEntryDialog.showDialog();
             if (editEntryDialog.getValue() == 1) {
-                if (e.shortdescription != null || !equal(editEntryDialog.getShortdescription(), "")) {
-                    e.shortdescription = editEntryDialog.getShortdescription();
-                    if (equal(e.shortdescription, "")) {
-                        e.shortdescription = null;
+                if (e.title != null || !equal(editEntryDialog.getTitle(), "")) {
+                    e.title = editEntryDialog.getTitle();
+                    if (equal(e.title, "")) {
+                        e.title = null;
                     }
                 }
@@ -1174,6 +1171,8 @@
                             } else if ("description".equals(key) && last.description == null) {
                                 last.description = value;
-                            } else if ("shortdescription".equals(key) && last.shortdescription == null) {
-                                last.shortdescription = value;
+                            } else if ((lang + "shortdescription").equals(key) && last.title == null) {
+                                last.title = value;
+                            } else if ("shortdescription".equals(key) && last.title == null) {
+                                last.title = value;
                             } else if ("name".equals(key) && last.name == null) {
                                 last.name = value;
@@ -1184,6 +1183,4 @@
                             } else if ((lang + "description").equals(key)) {
                                 last.description = value;
-                            } else if ((lang + "shortdescription").equals(key)) {
-                                last.shortdescription = value;
                             }
                         }
@@ -1222,9 +1219,9 @@
         private String fromSourceEntry(SourceEntry entry) {
             StringBuilder s = new StringBuilder("<html><b>");
-            if (entry.shortdescription != null) {
-                s.append(entry.shortdescription).append("</b> (");
+            if (entry.title != null) {
+                s.append(entry.title).append("</b> (");
             }
             s.append(entry.url);
-            if (entry.shortdescription != null) {
+            if (entry.title != null) {
                 s.append(")");
             }
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java	(revision 3894)
@@ -32,7 +32,7 @@
 
     /**
-     * A short description that can be used as menu entry.
+     * A title that can be used as menu entry.
      */
-    public String shortdescription;
+    public String title;
 
     /**
@@ -45,5 +45,5 @@
         this.url = url;
         this.name = equal(name, "") ? null : name;
-        this.shortdescription = equal(shortdescription, "") ? null : shortdescription;
+        this.title = equal(shortdescription, "") ? null : shortdescription;
         this.active = active;
     }
@@ -52,5 +52,5 @@
         this.url = e.url;
         this.name = e.name;
-        this.shortdescription = e.shortdescription;
+        this.title = e.title;
         this.active = e.active;
     }
@@ -63,5 +63,5 @@
         return equal(other.url, url) && 
                 equal(other.name, name) &&
-                equal(other.shortdescription, shortdescription) &&
+                equal(other.title, title) &&
                 other.active == active;
     }
@@ -72,5 +72,5 @@
         hash = 89 * hash + (this.url != null ? this.url.hashCode() : 0);
         hash = 89 * hash + (this.name != null ? this.name.hashCode() : 0);
-        hash = 89 * hash + (this.shortdescription != null ? this.shortdescription.hashCode() : 0);
+        hash = 89 * hash + (this.title != null ? this.title.hashCode() : 0);
         hash = 89 * hash + (this.active ? 1 : 0);
         return hash;
@@ -79,5 +79,5 @@
     @Override
     public String toString() {
-        return shortdescription != null ? shortdescription : url;
+        return title != null ? title : url;
     }
 
@@ -88,6 +88,6 @@
      */
     public String getDisplayString() {
-        if (shortdescription != null)
-            return shortdescription;
+        if (title != null)
+            return title;
         else
             return getFileNamePart();
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 3894)
@@ -329,5 +329,5 @@
         public Collection<ExtendedSourceEntry> getDefault() {
             ExtendedSourceEntry i = new ExtendedSourceEntry("defaultpresets.xml", "resource://data/defaultpresets.xml");
-            i.shortdescription = tr("Internal Preset");
+            i.title = tr("Internal Preset");
             i.description = tr("The default preset for JOSM");
             return Collections.singletonList(i);
@@ -336,5 +336,5 @@
         @Override
         public Collection<String> serialize(SourceEntry entry) {
-            return Arrays.asList(new String[] {entry.url, entry.shortdescription});
+            return Arrays.asList(new String[] {entry.url, entry.title});
         }
 
Index: /trunk/src/org/openstreetmap/josm/tools/GBC.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/GBC.java	(revision 3893)
+++ /trunk/src/org/openstreetmap/josm/tools/GBC.java	(revision 3894)
@@ -120,3 +120,29 @@
         return new Box.Filler(new Dimension(x,y), new Dimension(x,y), new Dimension(maxx,maxy));
     }
+
+    public GBC grid(int x, int y) {
+        gridx = x;
+        gridy = y;
+        return this;
+    }
+
+    public GBC span(int width, int height) {
+        gridwidth = width;
+        gridheight = height;
+        return this;
+    }
+
+    public GBC span(int width) {
+        gridwidth = width;
+        return this;
+    }
+
+    public static GBC std(int x, int y) {
+        GBC c = new GBC();
+        c.anchor = WEST;
+        c.gridx = x;
+        c.gridy = y;
+        return c;
+    }
+
 }
Index: /trunk/styles/standard/elemstyles.xml
===================================================================
--- /trunk/styles/standard/elemstyles.xml	(revision 3893)
+++ /trunk/styles/standard/elemstyles.xml	(revision 3894)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <rules xmlns="http://josm.openstreetmap.de/mappaint-style-1.0"
-       name="standard">
+       name="standard" icon="dialogs/mappaint/josm_small.png">
 <!--
 A little help:
