Index: /trunk/data/defaultpresets.xml
===================================================================
--- /trunk/data/defaultpresets.xml	(revision 6113)
+++ /trunk/data/defaultpresets.xml	(revision 6114)
@@ -89,4 +89,7 @@
   match: none/key/key!/keyvalue (default is "none", see below for more information)
 
+checkgroup: group of checks
+  columns: number of columns
+
 check: checkbox
   key: key to set
@@ -2427,20 +2430,22 @@
                 <combo key="shop" text="With shop" values="yes,convenience,kiosk,no" />
                 <label text="Fuel types:" />
-                <check key="fuel:diesel" text="Diesel" default="off" />
-                <check key="fuel:biodiesel" text="Bio Diesel" default="off" />
-                <check key="fuel:GTL_diesel" text="Diesel (Gas To Liquid - ultimate diesel)" default="off" />
-                <check key="fuel:HGV_diesel" text="Diesel for Heavy Good Vehicles" default="off" />
-                <check key="fuel:octane_80" text="Octane 80" default="off" />
-                <check key="fuel:octane_91" text="Octane 91" default="off" />
-                <check key="fuel:octane_92" text="Octane 92" default="off" />
-                <check key="fuel:octane_95" text="Octane 95" default="off" />
-                <check key="fuel:octane_98" text="Octane 98" default="off" />
-                <check key="fuel:octane_100" text="Octane 100" default="off" />
-                <check key="fuel:e10" text="E10 (10% Ethanol mix)" default="off" />
-                <check key="fuel:e85" text="E85 (85% Ethanol mix)" default="off" />
-                <check key="fuel:lpg" text="LPG (Liquefied petroleum gas)" default="off" />
-                <check key="fuel:cng" text="CNG (Compressed Natural Gas)" default="off" />
-                <check key="fuel:1_25" text="1/25 mix (mofa/moped)" default="off" />
-                <check key="fuel:1_50" text="1/50 mix (mofa/moped)" default="off" />
+                <checkgroup columns="2">
+                    <check key="fuel:diesel" text="Diesel" default="off" />
+                    <check key="fuel:biodiesel" text="Bio Diesel" default="off" />
+                    <check key="fuel:GTL_diesel" text="Diesel (Gas To Liquid - ultimate diesel)" default="off" />
+                    <check key="fuel:HGV_diesel" text="Diesel for Heavy Good Vehicles" default="off" />
+                    <check key="fuel:octane_80" text="Octane 80" default="off" />
+                    <check key="fuel:octane_91" text="Octane 91" default="off" />
+                    <check key="fuel:octane_92" text="Octane 92" default="off" />
+                    <check key="fuel:octane_95" text="Octane 95" default="off" />
+                    <check key="fuel:octane_98" text="Octane 98" default="off" />
+                    <check key="fuel:octane_100" text="Octane 100" default="off" />
+                    <check key="fuel:e10" text="E10 (10% Ethanol mix)" default="off" />
+                    <check key="fuel:e85" text="E85 (85% Ethanol mix)" default="off" />
+                    <check key="fuel:lpg" text="LPG (Liquefied petroleum gas)" default="off" />
+                    <check key="fuel:cng" text="CNG (Compressed Natural Gas)" default="off" />
+                    <check key="fuel:1_25" text="1/25 mix (mofa/moped)" default="off" />
+                    <check key="fuel:1_50" text="1/50 mix (mofa/moped)" default="off" />
+                </checkgroup>
             </optional>
         </item>
Index: /trunk/data/tagging-preset.xsd
===================================================================
--- /trunk/data/tagging-preset.xsd	(revision 6113)
+++ /trunk/data/tagging-preset.xsd	(revision 6114)
@@ -81,4 +81,5 @@
 			<element name="combo" type="tns:combo" />
 			<element name="multiselect" type="tns:multiselect" />
+            <element name="checkgroup" type="tns:checkgroup" />
 			<element name="check" type="tns:check" />
 		</choice>
@@ -189,4 +190,14 @@
 	</complexType>
 
+    <complexType name="checkgroup">
+        <sequence>
+            <choice minOccurs="1" maxOccurs="unbounded">
+                <element name="check" type="tns:check" />
+            </choice>
+        </sequence>
+        <attribute name="columns" type="positiveInteger" />
+        <anyAttribute processContents="skip" />
+    </complexType>
+
 	<complexType name="check">
 		<attribute name="key" type="string" use="required" />
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6113)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6114)
@@ -6,4 +6,5 @@
 import java.awt.Font;
 import java.awt.GridBagLayout;
+import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -24,4 +25,5 @@
 import java.util.Map;
 import java.util.TreeSet;
+
 import javax.swing.ButtonGroup;
 import javax.swing.ImageIcon;
@@ -35,6 +37,6 @@
 import javax.swing.ListCellRenderer;
 import javax.swing.ListModel;
+
 import org.xml.sax.SAXException;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.search.SearchCompiler;
@@ -315,4 +317,14 @@
         public void addCommands(List<Tag> changedTags) {
         }
+
+        @Override
+        public String toString() {
+            return "Label ["
+                    + (text != null ? "text=" + text + ", " : "")
+                    + (text_context != null ? "text_context=" + text_context
+                            + ", " : "")
+                    + (locale_text != null ? "locale_text=" + locale_text : "")
+                    + "]";
+        }
     }
 
@@ -391,4 +403,9 @@
         public void addCommands(List<Tag> changedTags) {
         }
+
+        @Override
+        public String toString() {
+            return "Optional";
+        }
     }
 
@@ -403,4 +420,9 @@
         @Override
         public void addCommands(List<Tag> changedTags) {
+        }
+
+        @Override
+        public String toString() {
+            return "Space";
         }
     }
@@ -643,4 +665,44 @@
                 return Collections.emptyList();
             return Collections.singleton(default_);
+        }
+    }
+
+    /**
+     * A group of {@link Check}s.
+     * @since 6114
+     */
+    public static class CheckGroup extends TaggingPresetItem {
+        
+        /**
+         * Number of columns (positive integer)
+         */
+        public String columns;
+        
+        /**
+         * List of checkboxes
+         */
+        public final List<Check> checks = new LinkedList<Check>();
+
+        @Override
+        boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+            Integer cols = new Integer(columns);
+            int rows = (int) Math.ceil((double)checks.size()/cols.doubleValue());
+            JPanel panel = new JPanel(new GridLayout(rows, cols));
+            
+            for (Check check : checks) {
+                check.addToPanel(panel, sel);
+            }
+            
+            p.add(panel, GBC.eol());
+            return false;
+        }
+
+        @Override
+        void addCommands(List<Tag> changedTags) {
+        }
+
+        @Override
+        public String toString() {
+            return "CheckGroup [columns=" + columns + "]";
         }
     }
@@ -734,4 +796,16 @@
         public Collection<String> getValues() {
             return Arrays.asList(value_on, value_off);
+        }
+
+        @Override
+        public String toString() {
+            return "Check ["
+                    + (locale_text != null ? "locale_text=" + locale_text + ", " : "")
+                    + (value_on != null ? "value_on=" + value_on + ", " : "")
+                    + (value_off != null ? "value_off=" + value_off + ", " : "")
+                    + "default_=" + default_ + ", "
+                    + (check != null ? "check=" + check + ", " : "")
+                    + (initialState != null ? "initialState=" + initialState
+                            + ", " : "") + "def=" + def + "]";
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java	(revision 6113)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java	(revision 6114)
@@ -12,7 +12,8 @@
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.swing.JOptionPane;
+
 import org.xml.sax.SAXException;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
@@ -58,4 +59,5 @@
         parser.mapOnStart("roles", TaggingPresetItems.Roles.class);
         parser.map("role", TaggingPresetItems.Role.class);
+        parser.map("checkgroup", TaggingPresetItems.CheckGroup.class);
         parser.map("check", TaggingPresetItems.Check.class);
         parser.map("combo", TaggingPresetItems.Combo.class);
@@ -69,4 +71,5 @@
         TaggingPresetMenu lastmenu = null;
         TaggingPresetItems.Roles lastrole = null;
+        final List<TaggingPresetItems.Check> checks = new LinkedList<TaggingPresetItems.Check>();
         List<TaggingPresetItems.PresetListEntry> listEntries = new LinkedList<TaggingPresetItems.PresetListEntry>();
 
@@ -113,7 +116,17 @@
                             throw new SAXException(tr("Preset role element without parent"));
                         lastrole.roles.add((TaggingPresetItems.Role) o);
+                    } else if (o instanceof TaggingPresetItems.Check) {
+                        checks.add((TaggingPresetItems.Check) o);
                     } else if (o instanceof TaggingPresetItems.PresetListEntry) {
                         listEntries.add((TaggingPresetItems.PresetListEntry) o);
+                    } else if (o instanceof TaggingPresetItems.CheckGroup) {
+                        all.getLast().data.add((TaggingPresetItem) o);
+                        ((TaggingPresetItems.CheckGroup) o).checks.addAll(checks);
+                        checks.clear();
                     } else {
+                        if (!checks.isEmpty()) {
+                            all.getLast().data.addAll(checks);
+                            checks.clear();
+                        }
                         all.getLast().data.add((TaggingPresetItem) o);
                         if (o instanceof TaggingPresetItems.ComboMultiSelect) {
