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) {
