Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7170)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 7171)
@@ -799,4 +799,5 @@
         public String value_on = OsmUtils.trueval;
         public String value_off = OsmUtils.falseval;
+        public boolean disable_off = false;
         public boolean default_ = false; // only used for tagless objects
 
@@ -808,5 +809,6 @@
 
             // find out if our key is already used in the selection.
-            Usage usage = determineBooleanUsage(sel, key);
+            final Usage usage = determineBooleanUsage(sel, key);
+            final String oneValue = usage.values.isEmpty() ? null : usage.values.last();
             def = default_;
 
@@ -819,8 +821,4 @@
             }
 
-            String oneValue = null;
-            for (String s : usage.values) {
-                oneValue = s;
-            }
             if (usage.values.size() < 2 && (oneValue == null || value_on.equals(oneValue) || value_off.equals(oneValue))) {
                 if (def && !PROP_FILL_DEFAULT.get()) {
@@ -834,15 +832,11 @@
                 // all selected objects share the same value which is either true or false or unset,
                 // we can display a standard check box.
-                initialState = value_on.equals(oneValue) ?
-                        QuadStateCheckBox.State.SELECTED :
-                            value_off.equals(oneValue) ?
-                                    QuadStateCheckBox.State.NOT_SELECTED :
-                                        def ? QuadStateCheckBox.State.SELECTED
-                                                : QuadStateCheckBox.State.UNSET;
-                check = new QuadStateCheckBox(locale_text, initialState,
-                        new QuadStateCheckBox.State[] {
-                        QuadStateCheckBox.State.SELECTED,
-                        QuadStateCheckBox.State.NOT_SELECTED,
-                        QuadStateCheckBox.State.UNSET });
+                initialState = value_on.equals(oneValue)
+                        ? QuadStateCheckBox.State.SELECTED
+                        : value_off.equals(oneValue)
+                        ? QuadStateCheckBox.State.NOT_SELECTED
+                        : def
+                        ? QuadStateCheckBox.State.SELECTED
+                        : QuadStateCheckBox.State.UNSET;
             } else {
                 def = false;
@@ -851,11 +845,16 @@
                 // in "partial" state.
                 initialState = QuadStateCheckBox.State.PARTIAL;
-                check = new QuadStateCheckBox(locale_text, QuadStateCheckBox.State.PARTIAL,
-                        new QuadStateCheckBox.State[] {
-                        QuadStateCheckBox.State.PARTIAL,
-                        QuadStateCheckBox.State.SELECTED,
-                        QuadStateCheckBox.State.NOT_SELECTED,
-                        QuadStateCheckBox.State.UNSET });
-            }
+            }
+
+            final List<QuadStateCheckBox.State> allowedStates = new ArrayList<>(4);
+            if (QuadStateCheckBox.State.PARTIAL.equals(initialState))
+                allowedStates.add(QuadStateCheckBox.State.PARTIAL);
+            allowedStates.add(QuadStateCheckBox.State.SELECTED);
+            if (!disable_off || value_off.equals(oneValue))
+                allowedStates.add(QuadStateCheckBox.State.NOT_SELECTED);
+            allowedStates.add(QuadStateCheckBox.State.UNSET);
+            check = new QuadStateCheckBox(locale_text, initialState,
+                    allowedStates.toArray(new QuadStateCheckBox.State[allowedStates.size()]));
+
             p.add(check, GBC.eol().fill(GBC.HORIZONTAL));
             return true;
@@ -881,5 +880,5 @@
         @Override
         public Collection<String> getValues() {
-            return Arrays.asList(value_on, value_off);
+            return disable_off ? Arrays.asList(value_on) : Arrays.asList(value_on, value_off);
         }
 
