public final BooleanProperty selectedProperty() {
        if (null == selected) {
            selected = new BooleanPropertyBase() {
                @Override protected void invalidated() {
                    if (null != getToggleGroup()) {
                        if (get()) {
                            getToggleGroup().selectToggle(IconSwitch.this);
                        } else if (getToggleGroup().getSelectedToggle() == IconSwitch.this) {
                            getToggleGroup().selectToggle(null);
                        }
                    }
                    if (selected.get()) {
                        fireSelectionEvent(new SelectionEvent(this, null, SelectionEvent.SELECT));
                    } else {
                        fireSelectionEvent(new SelectionEvent(this, null, SelectionEvent.DESELECT));
                    }
                    pseudoClassStateChanged(PSEUDO_CLASS_SELECTED, get());
                }
                @Override public Object getBean() { return this; }
                @Override public String getName() { return "selected"; }
            };
        }
        return selected;
    }