 				undo_support: false
 				content_size: @_content_size
 				placeholder: @_placeholder?[key.name]
+				onDataInit: (field, data) =>
+					if @__user_selectable and CUI.util.isEmpty(data[field.getName()])
+						field.hide()
+					return
 
 			input = new CUI.MultiInputInput(input_opts)
 			input.render()
 
 			do (input, key) =>
-				btn = new CUI.defaults.class.Button
+				button = new CUI.defaults.class.Button
 					text: key.tag
 					tabindex: null
-					disabled: !@_control.hasUserControl()
-					onClick: (ev, btn) =>
-						@_control.showUserControl(ev, btn, @__multiInputDiv)
+					disabled: not @_control.hasUserControl() and not @__user_selectable
 					role: "multi-input-tag"
 					class: "cui-multi-input-tag-button"
 					tooltip: key.tooltip
-
-				input.append(btn, "right")
+					onClick: (ev) =>
+						if @__user_selectable
+							form.reload()
+							userSelectablePopover.show()
+						else
+							@_control.showUserControl(ev, button, @__multiInputDiv)
+
+				form = new CUI.Form
+					data: @__userSelectedData
+					fields: =>
+						fields = @_control.getKeys().map((key) =>
+							type: CUI.Checkbox
+							name: key.name
+							text: key.tooltip.text
+							onDataChanged: (data, field) =>
+								if Object.values(@__userSelectedData).some((val) -> val)
+									return
+								data[field.getName()] = true
+								field.reload()
+						)
+						return fields
+					onDataChanged: =>
+						@setInputVisibility()
+				form.start()
+
+				userSelectablePopover = new CUI.Popover
+					pane:
+						padded: true
+						content: form
+					element: button
+
+				input.append(button, "right")
 
 				CUI.Events.listen
 					type: "data-changed"

		ok = false
		for inp in @__inputs
			CUI.dom.append(@__multiInputDiv, inp.DOM)
			if @_control.isEnabled(inp.getName())
				inp.show()
				ok = true
			else
				inp.hide()

		if not ok
			console.warn("MulitInput.setInputVisibility: No input visible.", input: @__inputs, control: @_control)

		CUI.Events.trigger
			type: "content-resize"

			@__inputs.push(input)
		return

	render: ->
		super()
		@__initInputs()
