You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2018/07/05 13:26:19 UTC

[myfaces-tobago] branch master updated: TOBAGO-1907: New toggle component:

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new 7a433e9  TOBAGO-1907: New toggle component: <tc:selectBooleanToggle>
7a433e9 is described below

commit 7a433e908c9be35a4a952582c0d50848e6250d13
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Thu Jul 5 15:26:04 2018 +0200

    TOBAGO-1907: New toggle component: <tc:selectBooleanToggle>
---
 .../myfaces/tobago/component/RendererTypes.java    |   2 +
 ...nCheckbox.java => AbstractUISelectBoolean.java} |  11 +-
 .../component/AbstractUISelectBooleanCheckbox.java |  68 +---------
 .../component/AbstractUISelectBooleanToggle.java   |  26 ++++
 ...SelectBooleanCheckboxInsideCommandRenderer.java |   6 +-
 .../renderer/SelectBooleanCheckboxRenderer.java    |  18 ++-
 .../renderer/SelectBooleanToggleRenderer.java      |  29 ++++
 .../SelectBooleanToggleTagDeclaration.java         |  81 +++++++++++
 .../myfaces/tobago/renderkit/css/TobagoClass.java  |   5 +-
 tobago-core/src/main/resources/scss/_tobago.scss   |  44 +++++-
 .../demo/SelectBooleanToggleController.java        |  88 ++++++++++++
 .../apache/myfaces/tobago/example/demo/Demo.xml    |   1 +
 .../selectBooleanToggle.test.js                    | 148 +++++++++++++++++++++
 .../selectBooleanToggle.xhtml                      |  77 +++++++++++
 .../content/20-component/030-select/select.xhtml   |   5 +
 .../tobago-theme-charlotteville/rebuild-theme.txt  |  46 +++----
 .../tobago-bootstrap/_version/css/bootstrap.css    |  57 ++++++--
 .../_version/css/bootstrap.css.map                 |   2 +-
 .../_version/css/bootstrap.min.css                 |   2 +-
 .../_version/css/bootstrap.min.css.map             |   2 +-
 .../tobago-theme-roxborough/rebuild-theme.txt      |  36 ++---
 .../tobago-bootstrap/_version/css/bootstrap.css    |  57 ++++++--
 .../_version/css/bootstrap.css.map                 |   2 +-
 .../_version/css/bootstrap.min.css                 |   2 +-
 .../_version/css/bootstrap.min.css.map             |   2 +-
 .../tobago-theme-scarborough/rebuild-theme.txt     |  48 +++----
 .../tobago-bootstrap/_version/css/bootstrap.css    |  57 ++++++--
 .../_version/css/bootstrap.css.map                 |   2 +-
 .../_version/css/bootstrap.min.css                 |   2 +-
 .../_version/css/bootstrap.min.css.map             |   2 +-
 .../tobago-theme-speyside/rebuild-theme.txt        |  46 +++----
 .../tobago-bootstrap/_version/css/bootstrap.css    |  57 ++++++--
 .../_version/css/bootstrap.css.map                 |   2 +-
 .../_version/css/bootstrap.min.css                 |   2 +-
 .../_version/css/bootstrap.min.css.map             |   2 +-
 .../tobago-theme-standard/rebuild-theme.txt        |  44 +++---
 .../tobago-bootstrap/_version/css/bootstrap.css    |  57 ++++++--
 .../_version/css/bootstrap.css.map                 |   2 +-
 .../_version/css/bootstrap.min.css                 |   2 +-
 .../_version/css/bootstrap.min.css.map             |   2 +-
 .../tobago-bootstrap/_version/js/tobago.js         |  18 +++
 41 files changed, 906 insertions(+), 256 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
index 0c3cb11..4dbc3f7 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/component/RendererTypes.java
@@ -73,6 +73,7 @@ public enum RendererTypes {
   SegmentLayout,
   SelectBooleanCheckbox,
   SelectBooleanCheckboxInsideCommand,
+  SelectBooleanToggle,
   SelectManyCheckbox,
   SelectManyCheckboxInsideCommand,
   SelectManyListbox,
@@ -162,6 +163,7 @@ public enum RendererTypes {
   public static final String SEGMENT_LAYOUT = "SegmentLayout";
   public static final String SELECT_BOOLEAN_CHECKBOX = "SelectBooleanCheckbox";
   public static final String SELECT_BOOLEAN_CHECKBOX_INSIDE_COMMAND = "SelectBooleanCheckboxInsideCommand";
+  public static final String SELECT_BOOLEAN_TOGGLE = "SelectBooleanToggle";
   public static final String SELECT_MANY_CHECKBOX = "SelectManyCheckbox";
   public static final String SELECT_MANY_CHECKBOX_INSIDE_COMMAND = "SelectManyCheckboxInsideCommand";
   public static final String SELECT_MANY_LISTBOX = "SelectManyListbox";
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
similarity index 94%
copy from tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java
copy to tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
index afe8285..82f78d6 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
@@ -32,10 +32,7 @@ import javax.faces.component.UISelectBoolean;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 import javax.faces.context.FacesContext;
 
-/**
- * {@link org.apache.myfaces.tobago.internal.taglib.component.SelectBooleanCheckboxTagDeclaration}
- */
-public abstract class AbstractUISelectBooleanCheckbox extends UISelectBoolean
+public abstract class AbstractUISelectBoolean extends UISelectBoolean
     implements Visual, ClientBehaviorHolder, SupportFieldId, SupportsAccessKey, SupportsLabelLayout {
 
   @Override
@@ -74,14 +71,14 @@ public abstract class AbstractUISelectBooleanCheckbox extends UISelectBoolean
 
   public abstract Integer getTabIndex();
 
-  @Override
-  public abstract String getLabel();
-
   public abstract String getItemLabel();
 
   public abstract void setItemLabel(String itemLabel);
 
   @Override
+  public abstract String getLabel();
+
+  @Override
   public String getFieldId(final FacesContext facesContext) {
     return getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "field";
   }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java
index afe8285..5272989 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanCheckbox.java
@@ -19,74 +19,8 @@
 
 package org.apache.myfaces.tobago.internal.component;
 
-import org.apache.myfaces.tobago.component.LabelLayout;
-import org.apache.myfaces.tobago.component.SupportFieldId;
-import org.apache.myfaces.tobago.component.SupportsAccessKey;
-import org.apache.myfaces.tobago.component.SupportsLabelLayout;
-import org.apache.myfaces.tobago.component.Visual;
-import org.apache.myfaces.tobago.util.ComponentUtils;
-import org.apache.myfaces.tobago.util.MessageUtils;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UISelectBoolean;
-import javax.faces.component.behavior.ClientBehaviorHolder;
-import javax.faces.context.FacesContext;
-
 /**
  * {@link org.apache.myfaces.tobago.internal.taglib.component.SelectBooleanCheckboxTagDeclaration}
  */
-public abstract class AbstractUISelectBooleanCheckbox extends UISelectBoolean
-    implements Visual, ClientBehaviorHolder, SupportFieldId, SupportsAccessKey, SupportsLabelLayout {
-
-  @Override
-  public boolean isSelected() {
-    Object value = getSubmittedValue();
-    if (value == null) {
-      value = getValue();
-    }
-    if (value instanceof Boolean) {
-      return (Boolean) value;
-    } else {
-      return value != null && Boolean.valueOf(value.toString());
-    }
-  }
-
-  @Override
-  protected void validateValue(final FacesContext facesContext, final Object convertedValue) {
-    if (isRequired()) {
-      if (convertedValue instanceof Boolean && !((Boolean) convertedValue)
-          // String: e. g. if there is no ValueExpression
-          || convertedValue instanceof String && !Boolean.parseBoolean((String) convertedValue)) {
-        MessageUtils.addMessage(
-            facesContext, this, FacesMessage.SEVERITY_ERROR, REQUIRED_MESSAGE_ID, new Object[]{getId()});
-        setValid(false);
-        return;
-      }
-    }
-    super.validateValue(facesContext, convertedValue);
-  }
-
-  public abstract boolean isDisabled();
-
-  public abstract boolean isReadonly();
-
-  public abstract boolean isFocus();
-
-  public abstract Integer getTabIndex();
-
-  @Override
-  public abstract String getLabel();
-
-  public abstract String getItemLabel();
-
-  public abstract void setItemLabel(String itemLabel);
-
-  @Override
-  public String getFieldId(final FacesContext facesContext) {
-    return getClientId(facesContext) + ComponentUtils.SUB_SEPARATOR + "field";
-  }
-
-  public boolean isLabelLayoutSkip() {
-    return getLabelLayout() == LabelLayout.skip;
-  }
+public abstract class AbstractUISelectBooleanCheckbox extends AbstractUISelectBoolean {
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanToggle.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanToggle.java
new file mode 100644
index 0000000..514103f
--- /dev/null
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBooleanToggle.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.internal.component;
+
+/**
+ * {@link org.apache.myfaces.tobago.internal.taglib.component.SelectBooleanToggleTagDeclaration}
+ */
+public abstract class AbstractUISelectBooleanToggle extends AbstractUISelectBoolean {
+}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
index 12eeb59..4a5b8a7 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxInsideCommandRenderer.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanCheckbox;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectBoolean;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
 import org.apache.myfaces.tobago.renderkit.css.CssItem;
 
@@ -40,12 +40,12 @@ public class SelectBooleanCheckboxInsideCommandRenderer extends SelectBooleanChe
   }
 
   @Override
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBooleanCheckbox select) {
+  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
     return new CssItem[]{BootstrapClass.DROPDOWN_ITEM};
   }
 
   @Override
-  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBooleanCheckbox select) {
+  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
     return new CssItem[]{};
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
index 4a28467..6d60940 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
@@ -20,7 +20,7 @@
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
 import org.apache.myfaces.tobago.context.Markup;
-import org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanCheckbox;
+import org.apache.myfaces.tobago.internal.component.AbstractUISelectBoolean;
 import org.apache.myfaces.tobago.internal.util.AccessKeyLogger;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
@@ -70,7 +70,7 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
 
   @Override
   protected void encodeBeginField(final FacesContext facesContext, final UIComponent component) throws IOException {
-    final AbstractUISelectBooleanCheckbox select = (AbstractUISelectBooleanCheckbox) component;
+    final AbstractUISelectBoolean select = (AbstractUISelectBoolean) component;
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     final String clientId = select.getClientId(facesContext);
@@ -90,8 +90,8 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
     }
 
     writer.writeClassAttribute(
-        TobagoClass.SELECT_BOOLEAN_CHECKBOX,
-        TobagoClass.SELECT_BOOLEAN_CHECKBOX.createMarkup(markup),
+        getTobagoClass(),
+        getTobagoClass().createMarkup(markup),
         getOuterCssItems(facesContext, select),
         disabled ? BootstrapClass.DISABLED : null,
         select.getCustomClass());
@@ -133,6 +133,10 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
     }
   }
 
+  protected TobagoClass getTobagoClass() {
+    return TobagoClass.SELECT_BOOLEAN_CHECKBOX;
+  }
+
   @Override
   protected void encodeEndField(final FacesContext facesContext, final UIComponent component) throws IOException {
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
@@ -140,17 +144,17 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
     writer.endElement(HtmlElements.DIV);
   }
 
-  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBooleanCheckbox select) {
+  protected CssItem[] getOuterCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
     return new CssItem[]{BootstrapClass.FORM_CHECK};
   }
 
-  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBooleanCheckbox select) {
+  protected CssItem[] getCssItems(final FacesContext facesContext, final AbstractUISelectBoolean select) {
     return null;
   }
 
   @Override
   protected String getFieldId(final FacesContext facesContext, final UIComponent component) {
-    final AbstractUISelectBooleanCheckbox select = (AbstractUISelectBooleanCheckbox) component;
+    final AbstractUISelectBoolean select = (AbstractUISelectBoolean) component;
     return select.getFieldId(facesContext);
   }
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanToggleRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanToggleRenderer.java
new file mode 100644
index 0000000..4ee5497
--- /dev/null
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanToggleRenderer.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.internal.renderkit.renderer;
+
+import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
+
+public class SelectBooleanToggleRenderer extends SelectBooleanCheckboxRenderer {
+
+  protected TobagoClass getTobagoClass() {
+    return TobagoClass.SELECT_BOOLEAN_TOGGLE;
+  }
+}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
new file mode 100644
index 0000000..b774e94
--- /dev/null
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.internal.taglib.component;
+
+import org.apache.myfaces.tobago.apt.annotation.Behavior;
+import org.apache.myfaces.tobago.apt.annotation.BodyContentDescription;
+import org.apache.myfaces.tobago.apt.annotation.Tag;
+import org.apache.myfaces.tobago.apt.annotation.UIComponentTag;
+import org.apache.myfaces.tobago.component.ClientBehaviors;
+import org.apache.myfaces.tobago.component.RendererTypes;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasAccessKey;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverter;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverterMessage;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRendered;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemLabel;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabel;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabelLayout;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasRequiredMessageForSelect;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasTabIndex;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasValidator;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasValidatorMessage;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasValue;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasValueChangeListener;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsDisabled;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsFocus;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsReadonly;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsRequiredForSelect;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
+
+import javax.faces.component.UISelectBoolean;
+
+/**
+ * Renders a checkbox as toggle.
+ */
+@Tag(name = "selectBooleanToggle")
+@BodyContentDescription(anyTagOf = "<f:facet>* ")
+@UIComponentTag(
+    uiComponent = "org.apache.myfaces.tobago.component.UISelectBooleanToggle",
+    uiComponentBaseClass = "org.apache.myfaces.tobago.internal.component.AbstractUISelectBooleanToggle",
+    uiComponentFacesClass = "javax.faces.component.UISelectBoolean",
+    componentFamily = UISelectBoolean.COMPONENT_FAMILY,
+    rendererType = {RendererTypes.SELECT_BOOLEAN_TOGGLE},
+    allowedChildComponenents = "NONE",
+    behaviors = {
+        @Behavior(
+            name = ClientBehaviors.CHANGE,
+            isDefault = true),
+        @Behavior(
+            name = ClientBehaviors.CLICK),
+        @Behavior(
+            name = ClientBehaviors.DBLCLICK),
+        @Behavior(
+            name = ClientBehaviors.FOCUS),
+        @Behavior(
+            name = ClientBehaviors.BLUR)
+    })
+
+public interface SelectBooleanToggleTagDeclaration extends HasValidator,
+    HasValueChangeListener, HasIdBindingAndRendered, HasValue, IsDisabled,
+    HasTip, IsReadonly, HasTabIndex, IsRequiredForSelect, HasConverter, IsFocus,
+    HasValidatorMessage, HasRequiredMessageForSelect, HasConverterMessage, IsVisual,
+    HasAccessKey, HasItemLabel, HasLabel, HasLabelLayout {
+}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
index 35e280c..7ea0a4f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
@@ -23,8 +23,6 @@ import org.apache.myfaces.tobago.apt.annotation.Preliminary;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.layout.AlignItems;
 import org.apache.myfaces.tobago.layout.JustifyContent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -161,6 +159,7 @@ public enum TobagoClass implements CssItem {
   SECTION__CONTENT("tobago-section-content"),
   SEGMENT_LAYOUT("tobago-segmentLayout"),
   SELECT_BOOLEAN_CHECKBOX("tobago-selectBooleanCheckbox"),
+  SELECT_BOOLEAN_TOGGLE("tobago-selectBooleanToggle"),
   SELECT_MANY_CHECKBOX("tobago-selectManyCheckbox"),
   SELECT_MANY_CHECKBOX__INLINE("tobago-selectManyCheckbox-inline"),
   SELECT_MANY_LISTBOX("tobago-selectManyListbox"),
@@ -230,8 +229,6 @@ public enum TobagoClass implements CssItem {
   TREE_SELECT("tobago-treeSelect"),
   TREE_SELECT__LABEL("tobago-treeSelect-label");
 
-  private static final Logger LOG = LoggerFactory.getLogger(TobagoClass.class);
-
   private final String name;
 
   TobagoClass(final String name) {
diff --git a/tobago-core/src/main/resources/scss/_tobago.scss b/tobago-core/src/main/resources/scss/_tobago.scss
index d6f2d53..e301aa7 100644
--- a/tobago-core/src/main/resources/scss/_tobago.scss
+++ b/tobago-core/src/main/resources/scss/_tobago.scss
@@ -78,6 +78,8 @@ $fa-check-square-o: "\f046";
 $fa-circle-thin: "\f1db";
 $fa-dot-circle-o: "\f192";
 $zero-width-space: "\200b";
+$fa-toggle-off: "\f204";
+$fa-toggle-on: "\f205";
 
 /* badge -------------------------------------------------------------- */
 .tobago-badge {
@@ -834,7 +836,10 @@ h1, h2, h3, h4, h5, h6 {
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox, .tobago-selectManyCheckbox, .tobago-selectOneRadio {
+
+.tobago-selectBooleanCheckbox, .tobago-selectBooleanToggle,
+.tobago-selectManyCheckbox, .tobago-selectManyToggle,
+.tobago-selectOneRadio {
   .form-check-label {
     input {
       position: absolute;
@@ -847,7 +852,7 @@ h1, h2, h3, h4, h5, h6 {
       font-style: normal;
       display: inline-block;
       transition: all 0.2s;
-      position: absolute;
+      position: relative;
       margin-left: -$form-check-input-gutter;
     }
     img {
@@ -859,10 +864,19 @@ h1, h2, h3, h4, h5, h6 {
   }
 }
 
+.tobago-selectBooleanToggle, .tobago-selectManyToggle {
+  .form-check-label {
+    .tobago-inputPseudo:before {
+      font-size: larger;
+    }
+  }
+}
+
 .tobago-selectBooleanCheckbox, .tobago-selectManyCheckbox {
   .form-check-label {
     .tobago-inputPseudo:before {
       content: $fa-square-o;
+      position: absolute;
     }
     input[type="checkbox"]:checked + .tobago-inputPseudo:before {
       content: $fa-check-square-o;
@@ -877,10 +891,31 @@ h1, h2, h3, h4, h5, h6 {
   }
 }
 
+.tobago-selectBooleanToggle, .tobago-selectManyToggle {
+  .form-check-label {
+    .tobago-inputPseudo:before {
+      content: $fa-toggle-off;
+      position: relative;
+      margin-right: 0.5rem;
+    }
+    input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+      content: $fa-toggle-on;
+    }
+    input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+    input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+      text-shadow: 0 0 1px black;
+    }
+    input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+      opacity: 0.5;
+    }
+  }
+}
+
 .tobago-selectOneRadio {
   .form-check-label {
     .tobago-inputPseudo:before {
       content: $fa-circle-thin;
+      position: absolute;
     }
     input[type="radio"]:checked + .tobago-inputPseudo:before {
       content: $fa-dot-circle-o;
@@ -905,6 +940,7 @@ h1, h2, h3, h4, h5, h6 {
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
   padding-bottom: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
@@ -915,7 +951,9 @@ h1, h2, h3, h4, h5, h6 {
   }
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
   padding-bottom: calc(#{$input-btn-padding-y} - #{$input-btn-border-width} * 2);
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectBooleanToggleController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectBooleanToggleController.java
new file mode 100644
index 0000000..83d3a45
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectBooleanToggleController.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.example.demo;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+import java.io.Serializable;
+
+@RequestScoped
+@Named
+public class SelectBooleanToggleController implements Serializable {
+
+  private boolean a;
+  private boolean b;
+  private boolean c;
+  private boolean d;
+  private boolean e;
+  private boolean f;
+
+  public boolean isA() {
+    return a;
+  }
+
+  public void setA(final boolean a) {
+    this.a = a;
+  }
+
+  public boolean isB() {
+    return b;
+  }
+
+  public void setB(final boolean b) {
+    this.b = b;
+  }
+
+  public boolean isC() {
+    return c;
+  }
+
+  public void setC(final boolean c) {
+    this.c = c;
+  }
+
+  public boolean isD() {
+    return d;
+  }
+
+  public void setD(final boolean d) {
+    this.d = d;
+  }
+
+  public boolean isE() {
+    return e;
+  }
+
+  public void setE(final boolean e) {
+    this.e = e;
+  }
+
+  public boolean isF() {
+    return f;
+  }
+
+  public void setF(final boolean f) {
+    this.f = f;
+  }
+
+  public String getSelectedItems() {
+    return (a ? "A " : "") + (b ? "B " : "") + (c ? "C " : "");
+  }
+}
diff --git a/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/Demo.xml b/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/Demo.xml
index 857952e..d65cd70 100644
--- a/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/Demo.xml
+++ b/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/Demo.xml
@@ -75,6 +75,7 @@
   <entry key="object">External Object (iframe)</entry>
   <entry key="select">Select Controls</entry>
   <entry key="selectBooleanCheckbox">Checkbox</entry>
+  <entry key="selectBooleanToggle">Toggle</entry>
   <entry key="selectOneChoice">Dropdown Box</entry>
   <entry key="selectOneRadio">Radio Button</entry>
   <entry key="selectOneListbox">Singleselection List</entry>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.test.js
new file mode 100644
index 0000000..826b250
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.test.js
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+QUnit.test("submit: select A", function (assert) {
+  var selectAFn = jQueryFrameFn("#page\\:mainForm\\:selectA input");
+  var selectBFn = jQueryFrameFn("#page\\:mainForm\\:selectB input");
+  var selectCFn = jQueryFrameFn("#page\\:mainForm\\:selectC input");
+  var submitFn = jQueryFrameFn("#page\\:mainForm\\:submit");
+  var outputFn = jQueryFrameFn("#page\\:mainForm\\:submitOutput span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectAFn().prop("checked", true);
+    selectBFn().prop("checked", false);
+    selectCFn().prop("checked", false);
+    submitFn().click();
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputFn().text(), "A ");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("submit: select B and C", function (assert) {
+  var selectAFn = jQueryFrameFn("#page\\:mainForm\\:selectA input");
+  var selectBFn = jQueryFrameFn("#page\\:mainForm\\:selectB input");
+  var selectCFn = jQueryFrameFn("#page\\:mainForm\\:selectC input");
+  var submitFn = jQueryFrameFn("#page\\:mainForm\\:submit");
+  var outputFn = jQueryFrameFn("#page\\:mainForm\\:submitOutput span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectAFn().prop("checked", false);
+    selectBFn().prop("checked", true);
+    selectCFn().prop("checked", true);
+    submitFn().click();
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputFn().text(), "B C ");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: select D", function (assert) {
+  var selectDFn = jQueryFrameFn("#page\\:mainForm\\:selectD input");
+  var outputDFn = jQueryFrameFn("#page\\:mainForm\\:outputD span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectDFn().prop("checked", true).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputDFn().text(), "true");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: deselect D", function (assert) {
+  var selectDFn = jQueryFrameFn("#page\\:mainForm\\:selectD input");
+  var outputDFn = jQueryFrameFn("#page\\:mainForm\\:outputD span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectDFn().prop("checked", false).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputDFn().text(), "false");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: select E", function (assert) {
+  var selectEFn = jQueryFrameFn("#page\\:mainForm\\:selectE input");
+  var outputEFn = jQueryFrameFn("#page\\:mainForm\\:outputE span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectEFn().prop("checked", true).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputEFn().text(), "true");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: deselect E", function (assert) {
+  var selectEFn = jQueryFrameFn("#page\\:mainForm\\:selectE input");
+  var outputEFn = jQueryFrameFn("#page\\:mainForm\\:outputE span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectEFn().prop("checked", false).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputEFn().text(), "false");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: select F", function (assert) {
+  var selectFFn = jQueryFrameFn("#page\\:mainForm\\:selectF input");
+  var outputFFn = jQueryFrameFn("#page\\:mainForm\\:outputF span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectFFn().prop("checked", true).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputFFn().text(), "true");
+  });
+  TTT.startTest();
+});
+
+QUnit.test("ajax: deselect F", function (assert) {
+  var selectFFn = jQueryFrameFn("#page\\:mainForm\\:selectF input");
+  var outputFFn = jQueryFrameFn("#page\\:mainForm\\:outputF span");
+
+  var TTT = new TobagoTestTool(assert);
+  TTT.action(function () {
+    selectFFn().prop("checked", false).trigger("change");
+  });
+  TTT.waitForResponse();
+  TTT.asserts(1, function () {
+    assert.equal(outputFFn().text(), "false");
+  });
+  TTT.startTest();
+});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.xhtml
new file mode 100644
index 0000000..8eee7e1
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/selectBooleanToggle.xhtml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+
+<ui:composition template="/main.xhtml"
+                xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:tc="http://myfaces.apache.org/tobago/component"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core">
+  <ui:param name="title" value="#{demoBundle.selectBooleanToggle} &lt;tc:selectBooleanToggle&gt;"/>
+  <p>The tag <code class="language-markup">&lt;tc:selectBooleanToggle/></code> generate a boolean
+    toggle.</p>
+  <tc:link label="Tag Library Documentation" image="#{request.contextPath}/image/feather-leaf.png"
+           link="#{demoBundle.tagDocUrl}/#{info.stableVersion}/tld/tc/selectBooleanToggle.html"/>
+  <tc:section label="Basics">
+    <pre><code class="language-markup">&lt;tc:selectBooleanToggle label="Toggle" value="true"/&gt;</code></pre>
+    <tc:selectBooleanToggle id="s1" label="Normal Toggle" value="true"/>
+    <tc:selectBooleanToggle id="s2" label="Read Only" readonly="true" value="true"/>
+    <tc:selectBooleanToggle id="s3" label="Disabled" disabled="true" value="true"/>
+    <tc:selectBooleanToggle id="s4" label="Required" required="true" value="true"/>
+  </tc:section>
+
+  <tc:section label="ItemLabel">
+    <tc:selectBooleanToggle id="toggleItemlabel1" itemLabel="Normal Toggle" value="true"/>
+    <tc:selectBooleanToggle id="toggleItemlabel11" label="Large Label" itemLabel="Item Label" value="true"/>
+    <tc:selectBooleanToggle id="toggleItemlabel2" itemLabel="Read Only" readonly="true" value="true"/>
+    <tc:selectBooleanToggle id="toggleItemlabel3" itemLabel="Disabled" disabled="true" value="true"/>
+    <tc:selectBooleanToggle id="toggleItemlabel4" itemLabel="Required" required="true" value="true"/>
+  </tc:section>
+
+  <tc:section label="Simple Usage">
+    <p>In this example, the selected items are displayed in an outputfield after the submit-button is pressed.</p>
+    <pre><code class="language-markup">&lt;tc:selectBooleanToggle label="A" value="\#{selectBooleanToggleController.a}"/>
+&lt;tc:out label="Selected items: " value="\#{selectBooleanToggleController.selectedItems}"/></code></pre>
+    <tc:selectBooleanToggle id="selectA" label="A" value="#{selectBooleanToggleController.a}"/>
+    <tc:selectBooleanToggle id="selectB" label="B" value="#{selectBooleanToggleController.b}"/>
+    <tc:selectBooleanToggle id="selectC" label="C" value="#{selectBooleanToggleController.c}"/>
+    <tc:out id="submitOutput" label="Selected items: " value="#{selectBooleanToggleController.selectedItems}"/>
+    <tc:button id="submit" label="Submit"/>
+  </tc:section>
+
+  <tc:section label="Ajax">
+    <p>The outputfields always shows the current value of the toggle.
+      With <code class="language-markup">&lt;f:ajax render="output"/></code>, the outputfield will be rerendered,
+      after the value changed in the
+      <code class="language-markup">&lt;tc:selectBooleanToggle label="Character" value="#{selectBooleanToggleController.d}"/></code>.
+      The ID of the outputfield and the value in the <code>render</code> attribute of the ajax tag
+      has to be the same.</p>
+    <tc:selectBooleanToggle id="selectD" label="D" value="#{selectBooleanToggleController.d}">
+      <f:ajax render="outputD"/>
+    </tc:selectBooleanToggle>
+    <tc:out id="outputD" label="Value is" value="#{selectBooleanToggleController.d}"/>
+    <tc:selectBooleanToggle id="selectE" label="E" value="#{selectBooleanToggleController.e}">
+      <f:ajax render="outputE"/>
+    </tc:selectBooleanToggle>
+    <tc:out id="outputE" label="Value is" value="#{selectBooleanToggleController.e}"/>
+    <tc:selectBooleanToggle id="selectF" label="F" value="#{selectBooleanToggleController.f}">
+      <f:ajax render="outputF"/>
+    </tc:selectBooleanToggle>
+    <tc:out id="outputF" label="Value is" value="#{selectBooleanToggleController.f}"/>
+  </tc:section>
+</ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/select.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/select.xhtml
index 5d96395..383b1ae 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/select.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/select.xhtml
@@ -32,6 +32,11 @@
     <tc:selectBooleanCheckbox label="Checkbox" itemLabel="OK?"/>
   </tc:section>
 
+  <tc:section label="#{demoBundle.selectBooleanToggle}">
+    <pre><code class="language-markup">&lt;tc:selectBooleanToggle label="Toggle"/></code></pre>
+    <tc:selectBooleanToggle label="Toggle" itemLabel="Active"/>
+  </tc:section>
+
   <tc:section label="#{demoBundle.selectOneChoice}">
     <pre><code class="language-markup">&lt;tc:selectOneChoice label="Dropdown Box"></code></pre>
     <tc:selectOneChoice label="Dropdown Box">
diff --git a/tobago-theme/tobago-theme-charlotteville/rebuild-theme.txt b/tobago-theme/tobago-theme-charlotteville/rebuild-theme.txt
index 89f1ddb..6600d62 100644
--- a/tobago-theme/tobago-theme-charlotteville/rebuild-theme.txt
+++ b/tobago-theme/tobago-theme-charlotteville/rebuild-theme.txt
@@ -1,7 +1,7 @@
 [INFO] Scanning for projects...
 [INFO] 
 [INFO] -------< org.apache.myfaces.tobago:tobago-theme-charlotteville >--------
-[INFO] Building Tobago Theme Charlotteville 4.2.2-SNAPSHOT
+[INFO] Building Tobago Theme Charlotteville 4.3.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO] 
 [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tobago-theme-charlotteville ---
@@ -30,8 +30,8 @@
 [INFO] Applying patch: append-tobago-theme-to-bootstrap.patch
 [INFO] 
 [INFO] --- maven-dependency-plugin:3.0.2:unpack (step #5: unpack-custom) @ tobago-theme-charlotteville ---
-[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.2.2-SNAPSHOT:jar
-[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.2.2-SNAPSHOT/tobago-core-4.2.2-SNAPSHOT.jar to __CURRENT__/tobago-theme-charlotteville/target/bootstrap with includes "**/*.scss" and excludes ""
+[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.3.0-SNAPSHOT:jar
+[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.3.0-SNAPSHOT/tobago-core-4.3.0-SNAPSHOT.jar to __CURRENT__/tobago-theme-charlotteville/target/bootstrap with includes "**/*.scss" and excludes ""
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:install-node-and-npm (step #6: install node and npm) @ tobago-theme-charlotteville ---
 [INFO] Installing node version v8.11.3
@@ -84,7 +84,7 @@
 [INFO] 
 [WARNING] npm WARN bootstrap@4.1.1 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself.
 [ERROR] 
-[INFO] added 1613 packages in 97.102s
+[INFO] added 1613 packages in 57.722s
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #8: npm run css-compile) @ tobago-theme-charlotteville ---
 [INFO] Running 'npm run css-compile' in __CURRENT__/tobago-theme-charlotteville/target/bootstrap
@@ -93,14 +93,14 @@
 [INFO] > node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.css
 [INFO] 
 [ERROR] Rendering Complete, saving .css file...
-[ERROR] Wrote CSS to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap.css.map
+[ERROR] Wrote CSS to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap.css
 [ERROR] Rendering Complete, saving .css file...
 [ERROR] Wrote CSS to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap-grid.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap-grid.css.map
 [ERROR] Rendering Complete, saving .css file...
-[ERROR] Wrote CSS to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap-reboot.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap-reboot.css.map
+[ERROR] Wrote CSS to __CURRENT__/tobago-theme-charlotteville/target/bootstrap/dist/css/bootstrap-reboot.css
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #9: npm run css-prefix) @ tobago-theme-charlotteville ---
 [INFO] Running 'npm run css-prefix' in __CURRENT__/tobago-theme-charlotteville/target/bootstrap
@@ -139,14 +139,14 @@
 [INFO] > rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-charlotteville/target/bootstrap
-[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-bundle __CURRENT__/tobago-theme-charlotteville/target/bootstrap
 [INFO] > rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap
 [INFO] 
 [INFO] 
+[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-charlotteville/target/bootstrap
+[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
+[INFO] 
+[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-plugins-coverage __CURRENT__/tobago-theme-charlotteville/target/bootstrap
 [INFO] > cross-env PLUGINS=true NODE_ENV=test babel js/src/ --out-dir js/coverage/dist/ --source-maps
 [INFO] 
@@ -155,14 +155,18 @@
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-charlotteville/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
 [INFO] 🎉  Successfully compiled 12 files with Babel.
-[ERROR] created dist/js/bootstrap.js in 10.8s
-[ERROR] created dist/js/bootstrap.bundle.js in 11.4s
+[ERROR] created dist/js/bootstrap.js in 9s
+[ERROR] created dist/js/bootstrap.bundle.js in 10s
 [INFO] 🎉  Successfully compiled 12 files with Babel.
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify __CURRENT__/tobago-theme-charlotteville/target/bootstrap
 [INFO] > npm-run-all --parallel js-minify-*
 [INFO] 
 [INFO] 
+[INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-charlotteville/target/bootstrap
+[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
+[INFO] 
+[INFO] 
 [INFO] > bootstrap@4.1.1 js-minify-bundle __CURRENT__/tobago-theme-charlotteville/target/bootstrap
 [INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js
 [INFO] 
@@ -170,18 +174,14 @@
 [INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-charlotteville/target/bootstrap
 [INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
 [INFO] 
-[INFO] 
-[INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-charlotteville/target/bootstrap
-[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
-[INFO] 
-[ERROR] INFO: Using input source map: dist/js/bootstrap.bundle.js.map
 [ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
+[ERROR] INFO: Using input source map: dist/js/bootstrap.bundle.js.map
 [INFO] 
 [INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tobago-theme-charlotteville ---
 [INFO] Using 'UTF-8' encoding to copy filtered resources.
 [INFO] Copying 1 resource
 [INFO] Copying 0 resource to META-INF/resources/tobago/charlotteville
-[INFO] Copying 6 resources to META-INF/resources/tobago/charlotteville/tobago-bootstrap/4.2.2-SNAPSHOT
+[INFO] Copying 6 resources to META-INF/resources/tobago/charlotteville/tobago-bootstrap/4.3.0-SNAPSHOT
 [INFO] Copying 3 resources
 [INFO] Copying 3 resources
 [INFO] 
@@ -208,17 +208,17 @@
 [INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ tobago-theme-charlotteville ---
 [INFO] 
 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ tobago-theme-charlotteville ---
-[INFO] Building jar: __CURRENT__/tobago-theme-charlotteville/target/tobago-theme-charlotteville-4.2.2-SNAPSHOT.jar
+[INFO] Building jar: __CURRENT__/tobago-theme-charlotteville/target/tobago-theme-charlotteville-4.3.0-SNAPSHOT.jar
 [INFO] 
 [INFO] --- maven-site-plugin:3.6:attach-descriptor (attach-descriptor) @ tobago-theme-charlotteville ---
 [INFO] Skipping because packaging 'jar' is not pom.
 [INFO] 
 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ tobago-theme-charlotteville ---
-[INFO] Installing __CURRENT__/tobago-theme-charlotteville/target/tobago-theme-charlotteville-4.2.2-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-charlotteville/4.2.2-SNAPSHOT/tobago-theme-charlotteville-4.2.2-SNAPSHOT.jar
-[INFO] Installing __CURRENT__/tobago-theme-charlotteville/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-charlotteville/4.2.2-SNAPSHOT/tobago-theme-charlotteville-4.2.2-SNAPSHOT.pom
+[INFO] Installing __CURRENT__/tobago-theme-charlotteville/target/tobago-theme-charlotteville-4.3.0-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-charlotteville/4.3.0-SNAPSHOT/tobago-theme-charlotteville-4.3.0-SNAPSHOT.jar
+[INFO] Installing __CURRENT__/tobago-theme-charlotteville/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-charlotteville/4.3.0-SNAPSHOT/tobago-theme-charlotteville-4.3.0-SNAPSHOT.pom
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time: 03:24 min
-[INFO] Finished at: 2018-06-22T12:30:05+02:00
+[INFO] Total time: 02:31 min
+[INFO] Finished at: 2018-07-05T15:19:26+02:00
 [INFO] ------------------------------------------------------------------------
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css
index bd8c21c..b62d73f 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css
@@ -9721,32 +9721,45 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectManyCheckbox .form-check-label input, .tobago-selectOneRadio .form-check-label input {
+.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectBooleanToggle .form-check-label input,
+.tobago-selectManyCheckbox .form-check-label input, .tobago-selectManyToggle .form-check-label input,
+.tobago-selectOneRadio .form-check-label input {
   position: absolute;
   opacity: 0;
   z-index: -1;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
+.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   font-family: FontAwesome;
   font-size: large;
   font-style: normal;
   display: inline-block;
   transition: all 0.2s;
-  position: absolute;
+  position: relative;
   margin-left: -1.25rem;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectManyCheckbox .form-check-label img, .tobago-selectOneRadio .form-check-label img {
+.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectBooleanToggle .form-check-label img,
+.tobago-selectManyCheckbox .form-check-label img, .tobago-selectManyToggle .form-check-label img,
+.tobago-selectOneRadio .form-check-label img {
   margin-right: 0.3em;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectManyCheckbox .form-check-label:after, .tobago-selectOneRadio .form-check-label:after {
+.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectBooleanToggle .form-check-label:after,
+.tobago-selectManyCheckbox .form-check-label:after, .tobago-selectManyToggle .form-check-label:after,
+.tobago-selectOneRadio .form-check-label:after {
   content: "​";
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  font-size: larger;
+}
+
 .tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectBooleanCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
@@ -9763,8 +9776,29 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
   opacity: 0.5;
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  content: "";
+  position: relative;
+  margin-right: 0.5rem;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+  content: "";
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectManyToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+  text-shadow: 0 0 1px black;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+  opacity: 0.5;
+}
+
 .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectOneRadio .form-check-label input[type="radio"]:checked + .tobago-inputPseudo:before {
@@ -9786,23 +9820,30 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
   margin-bottom: 0;
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline, .tobago-selectOneRadio-inline .form-check.form-check-inline {
+.tobago-selectManyToggle-inline .form-check.form-check-inline,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline,
+.tobago-selectOneRadio-inline .form-check.form-check-inline {
   margin-bottom: 0;
   padding-left: 1rem;
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label, .tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
+.tobago-selectManyToggle-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
   vertical-align: baseline;
 }
 
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css.map
index ea62392..6d416bf 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css
index ec59a57..954c9ca 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css
@@ -3,5 +3,5 @@
  * Copyright 2011-2018 The Bootstrap Authors
  * Copyright 2011-2018 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#529696;--secondary:#b2a76d;--success:#abf5ff;--info:#389c30;--warning:#ff00be;--danger:#ff00be;--light:#ffffff;--dark:#529696;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#529696;--secondary:#b2a76d;--success:#abf5ff;--info:#389c30;--warning:#ff00be;--danger:#ff00be;--light:#ffffff;--dark:#529696;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css.map
index b9da49e..4b6f53b 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/tobago-bootstrap/_version/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/rebuild-theme.txt b/tobago-theme/tobago-theme-roxborough/rebuild-theme.txt
index 9ac1b37..b6b7732 100644
--- a/tobago-theme/tobago-theme-roxborough/rebuild-theme.txt
+++ b/tobago-theme/tobago-theme-roxborough/rebuild-theme.txt
@@ -1,7 +1,7 @@
 [INFO] Scanning for projects...
 [INFO] 
 [INFO] ---------< org.apache.myfaces.tobago:tobago-theme-roxborough >----------
-[INFO] Building Tobago Theme Roxborough 4.2.2-SNAPSHOT
+[INFO] Building Tobago Theme Roxborough 4.3.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO] 
 [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tobago-theme-roxborough ---
@@ -30,8 +30,8 @@
 [INFO] Applying patch: append-tobago-theme-to-bootstrap.patch
 [INFO] 
 [INFO] --- maven-dependency-plugin:3.0.2:unpack (step #5: unpack-custom) @ tobago-theme-roxborough ---
-[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.2.2-SNAPSHOT:jar
-[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.2.2-SNAPSHOT/tobago-core-4.2.2-SNAPSHOT.jar to __CURRENT__/tobago-theme-roxborough/target/bootstrap with includes "**/*.scss" and excludes ""
+[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.3.0-SNAPSHOT:jar
+[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.3.0-SNAPSHOT/tobago-core-4.3.0-SNAPSHOT.jar to __CURRENT__/tobago-theme-roxborough/target/bootstrap with includes "**/*.scss" and excludes ""
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:install-node-and-npm (step #6: install node and npm) @ tobago-theme-roxborough ---
 [INFO] Installing node version v8.11.3
@@ -84,7 +84,7 @@
 [INFO] 
 [WARNING] npm WARN bootstrap@4.1.1 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself.
 [ERROR] 
-[INFO] added 1613 packages in 94.62s
+[INFO] added 1613 packages in 57.788s
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #8: npm run css-compile) @ tobago-theme-roxborough ---
 [INFO] Running 'npm run css-compile' in __CURRENT__/tobago-theme-roxborough/target/bootstrap
@@ -99,8 +99,8 @@
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-roxborough/target/bootstrap/dist/css/bootstrap-grid.css.map
 [ERROR] Wrote CSS to __CURRENT__/tobago-theme-roxborough/target/bootstrap/dist/css/bootstrap-grid.css
 [ERROR] Rendering Complete, saving .css file...
-[ERROR] Wrote CSS to __CURRENT__/tobago-theme-roxborough/target/bootstrap/dist/css/bootstrap-reboot.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-roxborough/target/bootstrap/dist/css/bootstrap-reboot.css.map
+[ERROR] Wrote CSS to __CURRENT__/tobago-theme-roxborough/target/bootstrap/dist/css/bootstrap-reboot.css
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #9: npm run css-prefix) @ tobago-theme-roxborough ---
 [INFO] Running 'npm run css-prefix' in __CURRENT__/tobago-theme-roxborough/target/bootstrap
@@ -135,10 +135,6 @@
 [INFO] > npm-run-all --parallel js-compile-*
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-roxborough/target/bootstrap
-[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-standalone __CURRENT__/tobago-theme-roxborough/target/bootstrap
 [INFO] > rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap
 [INFO] 
@@ -150,13 +146,17 @@
 [INFO] > bootstrap@4.1.1 js-compile-plugins-coverage __CURRENT__/tobago-theme-roxborough/target/bootstrap
 [INFO] > cross-env PLUGINS=true NODE_ENV=test babel js/src/ --out-dir js/coverage/dist/ --source-maps
 [INFO] 
+[INFO] 
+[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-roxborough/target/bootstrap
+[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
+[INFO] 
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-roxborough/target/bootstrap/js/src/index.js → dist/js/bootstrap.js...
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-roxborough/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
 [INFO] 🎉  Successfully compiled 12 files with Babel.
-[ERROR] created dist/js/bootstrap.js in 15.9s
-[ERROR] created dist/js/bootstrap.bundle.js in 17.3s
+[ERROR] created dist/js/bootstrap.js in 9.3s
+[ERROR] created dist/js/bootstrap.bundle.js in 9.7s
 [INFO] 🎉  Successfully compiled 12 files with Babel.
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify __CURRENT__/tobago-theme-roxborough/target/bootstrap
@@ -174,14 +174,14 @@
 [INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-roxborough/target/bootstrap
 [INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
 [INFO] 
-[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
 [ERROR] INFO: Using input source map: dist/js/bootstrap.bundle.js.map
+[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
 [INFO] 
 [INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tobago-theme-roxborough ---
 [INFO] Using 'UTF-8' encoding to copy filtered resources.
 [INFO] Copying 1 resource
 [INFO] Copying 0 resource to META-INF/resources/tobago/roxborough
-[INFO] Copying 10 resources to META-INF/resources/tobago/roxborough/tobago-bootstrap/4.2.2-SNAPSHOT
+[INFO] Copying 10 resources to META-INF/resources/tobago/roxborough/tobago-bootstrap/4.3.0-SNAPSHOT
 [INFO] Copying 3 resources
 [INFO] Copying 3 resources
 [INFO] 
@@ -208,17 +208,17 @@
 [INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ tobago-theme-roxborough ---
 [INFO] 
 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ tobago-theme-roxborough ---
-[INFO] Building jar: __CURRENT__/tobago-theme-roxborough/target/tobago-theme-roxborough-4.2.2-SNAPSHOT.jar
+[INFO] Building jar: __CURRENT__/tobago-theme-roxborough/target/tobago-theme-roxborough-4.3.0-SNAPSHOT.jar
 [INFO] 
 [INFO] --- maven-site-plugin:3.6:attach-descriptor (attach-descriptor) @ tobago-theme-roxborough ---
 [INFO] Skipping because packaging 'jar' is not pom.
 [INFO] 
 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ tobago-theme-roxborough ---
-[INFO] Installing __CURRENT__/tobago-theme-roxborough/target/tobago-theme-roxborough-4.2.2-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-roxborough/4.2.2-SNAPSHOT/tobago-theme-roxborough-4.2.2-SNAPSHOT.jar
-[INFO] Installing __CURRENT__/tobago-theme-roxborough/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-roxborough/4.2.2-SNAPSHOT/tobago-theme-roxborough-4.2.2-SNAPSHOT.pom
+[INFO] Installing __CURRENT__/tobago-theme-roxborough/target/tobago-theme-roxborough-4.3.0-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-roxborough/4.3.0-SNAPSHOT/tobago-theme-roxborough-4.3.0-SNAPSHOT.jar
+[INFO] Installing __CURRENT__/tobago-theme-roxborough/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-roxborough/4.3.0-SNAPSHOT/tobago-theme-roxborough-4.3.0-SNAPSHOT.pom
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time: 03:21 min
-[INFO] Finished at: 2018-06-22T12:30:01+02:00
+[INFO] Total time: 02:31 min
+[INFO] Finished at: 2018-07-05T15:19:27+02:00
 [INFO] ------------------------------------------------------------------------
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css
index 2351c85..b800008 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css
@@ -9752,32 +9752,45 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectManyCheckbox .form-check-label input, .tobago-selectOneRadio .form-check-label input {
+.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectBooleanToggle .form-check-label input,
+.tobago-selectManyCheckbox .form-check-label input, .tobago-selectManyToggle .form-check-label input,
+.tobago-selectOneRadio .form-check-label input {
   position: absolute;
   opacity: 0;
   z-index: -1;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
+.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   font-family: FontAwesome;
   font-size: large;
   font-style: normal;
   display: inline-block;
   transition: all 0.2s;
-  position: absolute;
+  position: relative;
   margin-left: -1.25rem;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectManyCheckbox .form-check-label img, .tobago-selectOneRadio .form-check-label img {
+.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectBooleanToggle .form-check-label img,
+.tobago-selectManyCheckbox .form-check-label img, .tobago-selectManyToggle .form-check-label img,
+.tobago-selectOneRadio .form-check-label img {
   margin-right: 0.3em;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectManyCheckbox .form-check-label:after, .tobago-selectOneRadio .form-check-label:after {
+.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectBooleanToggle .form-check-label:after,
+.tobago-selectManyCheckbox .form-check-label:after, .tobago-selectManyToggle .form-check-label:after,
+.tobago-selectOneRadio .form-check-label:after {
   content: "​";
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  font-size: larger;
+}
+
 .tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectBooleanCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
@@ -9794,8 +9807,29 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
   opacity: 0.5;
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  content: "";
+  position: relative;
+  margin-right: 0.5rem;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+  content: "";
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectManyToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+  text-shadow: 0 0 1px black;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+  opacity: 0.5;
+}
+
 .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectOneRadio .form-check-label input[type="radio"]:checked + .tobago-inputPseudo:before {
@@ -9817,23 +9851,30 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(0.375rem - 2px * 2);
   padding-bottom: calc(0.375rem - 2px * 2);
   margin-bottom: 0;
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(0.375rem - 2px * 2);
   padding-bottom: calc(0.375rem - 2px * 2);
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline, .tobago-selectOneRadio-inline .form-check.form-check-inline {
+.tobago-selectManyToggle-inline .form-check.form-check-inline,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline,
+.tobago-selectOneRadio-inline .form-check.form-check-inline {
   margin-bottom: 0;
   padding-left: 1rem;
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label, .tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
+.tobago-selectManyToggle-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
   vertical-align: baseline;
 }
 
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css.map b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css.map
index 1311a5f..22a70eb 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css
index 4048da9..b718c8b 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css
@@ -3,5 +3,5 @@
  * Copyright 2011-2018 The Bootstrap Authors
  * Copyright 2011-2018 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url(../fonts/Amaranth-Regular.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url(../fonts/Amaranth-Bold.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url(../fonts/Amaranth-Italic.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url(../fonts/Amaranth-BoldItalic.otf) format("opentype")}.tobago-bo [...]
+ */@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url(../fonts/Amaranth-Regular.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url(../fonts/Amaranth-Bold.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url(../fonts/Amaranth-Italic.otf) format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url(../fonts/Amaranth-BoldItalic.otf) format("opentype")}.tobago-bo [...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css.map b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
index 93cdeac..3f43915 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/resources/tobago/roxborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_ [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_ [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/rebuild-theme.txt b/tobago-theme/tobago-theme-scarborough/rebuild-theme.txt
index 31ca417..ee0a020 100644
--- a/tobago-theme/tobago-theme-scarborough/rebuild-theme.txt
+++ b/tobago-theme/tobago-theme-scarborough/rebuild-theme.txt
@@ -1,7 +1,7 @@
 [INFO] Scanning for projects...
 [INFO] 
 [INFO] ---------< org.apache.myfaces.tobago:tobago-theme-scarborough >---------
-[INFO] Building Tobago Theme Scarborough 4.2.2-SNAPSHOT
+[INFO] Building Tobago Theme Scarborough 4.3.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO] 
 [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tobago-theme-scarborough ---
@@ -30,8 +30,8 @@
 [INFO] Applying patch: append-tobago-theme-to-bootstrap.patch
 [INFO] 
 [INFO] --- maven-dependency-plugin:3.0.2:unpack (step #5: unpack-custom) @ tobago-theme-scarborough ---
-[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.2.2-SNAPSHOT:jar
-[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.2.2-SNAPSHOT/tobago-core-4.2.2-SNAPSHOT.jar to __CURRENT__/tobago-theme-scarborough/target/bootstrap with includes "**/*.scss" and excludes ""
+[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.3.0-SNAPSHOT:jar
+[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.3.0-SNAPSHOT/tobago-core-4.3.0-SNAPSHOT.jar to __CURRENT__/tobago-theme-scarborough/target/bootstrap with includes "**/*.scss" and excludes ""
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:install-node-and-npm (step #6: install node and npm) @ tobago-theme-scarborough ---
 [INFO] Installing node version v8.11.3
@@ -84,7 +84,7 @@
 [INFO] 
 [WARNING] npm WARN bootstrap@4.1.1 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself.
 [ERROR] 
-[INFO] added 1613 packages in 94.548s
+[INFO] added 1613 packages in 57.859s
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #8: npm run css-compile) @ tobago-theme-scarborough ---
 [INFO] Running 'npm run css-compile' in __CURRENT__/tobago-theme-scarborough/target/bootstrap
@@ -99,8 +99,8 @@
 [ERROR] Wrote CSS to __CURRENT__/tobago-theme-scarborough/target/bootstrap/dist/css/bootstrap-grid.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-scarborough/target/bootstrap/dist/css/bootstrap-grid.css.map
 [ERROR] Rendering Complete, saving .css file...
-[ERROR] Wrote CSS to __CURRENT__/tobago-theme-scarborough/target/bootstrap/dist/css/bootstrap-reboot.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-scarborough/target/bootstrap/dist/css/bootstrap-reboot.css.map
+[ERROR] Wrote CSS to __CURRENT__/tobago-theme-scarborough/target/bootstrap/dist/css/bootstrap-reboot.css
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #9: npm run css-prefix) @ tobago-theme-scarborough ---
 [INFO] Running 'npm run css-prefix' in __CURRENT__/tobago-theme-scarborough/target/bootstrap
@@ -135,10 +135,6 @@
 [INFO] > npm-run-all --parallel js-compile-*
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-compile-bundle __CURRENT__/tobago-theme-scarborough/target/bootstrap
-[INFO] > rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-standalone __CURRENT__/tobago-theme-scarborough/target/bootstrap
 [INFO] > rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap
 [INFO] 
@@ -150,13 +146,17 @@
 [INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-scarborough/target/bootstrap
 [INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
 [INFO] 
-[ERROR] 
-[ERROR] __CURRENT__/tobago-theme-scarborough/target/bootstrap/js/src/index.js → dist/js/bootstrap.js...
+[INFO] 
+[INFO] > bootstrap@4.1.1 js-compile-bundle __CURRENT__/tobago-theme-scarborough/target/bootstrap
+[INFO] > rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap
+[INFO] 
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-scarborough/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
+[ERROR] 
+[ERROR] __CURRENT__/tobago-theme-scarborough/target/bootstrap/js/src/index.js → dist/js/bootstrap.js...
 [INFO] 🎉  Successfully compiled 12 files with Babel.
-[ERROR] created dist/js/bootstrap.js in 15.9s
-[ERROR] created dist/js/bootstrap.bundle.js in 16.8s
+[ERROR] created dist/js/bootstrap.js in 9.3s
+[ERROR] created dist/js/bootstrap.bundle.js in 9.9s
 [INFO] 🎉  Successfully compiled 12 files with Babel.
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify __CURRENT__/tobago-theme-scarborough/target/bootstrap
@@ -167,21 +167,21 @@
 [INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-scarborough/target/bootstrap
-[INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-scarborough/target/bootstrap
 [INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
 [INFO] 
-[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
+[INFO] 
+[INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-scarborough/target/bootstrap
+[INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
+[INFO] 
 [ERROR] INFO: Using input source map: dist/js/bootstrap.bundle.js.map
+[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
 [INFO] 
 [INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tobago-theme-scarborough ---
 [INFO] Using 'UTF-8' encoding to copy filtered resources.
 [INFO] Copying 1 resource
 [INFO] Copying 0 resource to META-INF/resources/tobago/scarborough
-[INFO] Copying 6 resources to META-INF/resources/tobago/scarborough/tobago-bootstrap/4.2.2-SNAPSHOT
+[INFO] Copying 6 resources to META-INF/resources/tobago/scarborough/tobago-bootstrap/4.3.0-SNAPSHOT
 [INFO] Copying 3 resources
 [INFO] Copying 3 resources
 [INFO] 
@@ -208,17 +208,17 @@
 [INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ tobago-theme-scarborough ---
 [INFO] 
 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ tobago-theme-scarborough ---
-[INFO] Building jar: __CURRENT__/tobago-theme-scarborough/target/tobago-theme-scarborough-4.2.2-SNAPSHOT.jar
+[INFO] Building jar: __CURRENT__/tobago-theme-scarborough/target/tobago-theme-scarborough-4.3.0-SNAPSHOT.jar
 [INFO] 
 [INFO] --- maven-site-plugin:3.6:attach-descriptor (attach-descriptor) @ tobago-theme-scarborough ---
 [INFO] Skipping because packaging 'jar' is not pom.
 [INFO] 
 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ tobago-theme-scarborough ---
-[INFO] Installing __CURRENT__/tobago-theme-scarborough/target/tobago-theme-scarborough-4.2.2-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-scarborough/4.2.2-SNAPSHOT/tobago-theme-scarborough-4.2.2-SNAPSHOT.jar
-[INFO] Installing __CURRENT__/tobago-theme-scarborough/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-scarborough/4.2.2-SNAPSHOT/tobago-theme-scarborough-4.2.2-SNAPSHOT.pom
+[INFO] Installing __CURRENT__/tobago-theme-scarborough/target/tobago-theme-scarborough-4.3.0-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-scarborough/4.3.0-SNAPSHOT/tobago-theme-scarborough-4.3.0-SNAPSHOT.jar
+[INFO] Installing __CURRENT__/tobago-theme-scarborough/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-scarborough/4.3.0-SNAPSHOT/tobago-theme-scarborough-4.3.0-SNAPSHOT.pom
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time: 03:21 min
-[INFO] Finished at: 2018-06-22T12:30:02+02:00
+[INFO] Total time: 02:31 min
+[INFO] Finished at: 2018-07-05T15:19:27+02:00
 [INFO] ------------------------------------------------------------------------
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css
index 16d0062..e874298 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css
@@ -9755,32 +9755,45 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectManyCheckbox .form-check-label input, .tobago-selectOneRadio .form-check-label input {
+.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectBooleanToggle .form-check-label input,
+.tobago-selectManyCheckbox .form-check-label input, .tobago-selectManyToggle .form-check-label input,
+.tobago-selectOneRadio .form-check-label input {
   position: absolute;
   opacity: 0;
   z-index: -1;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
+.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   font-family: FontAwesome;
   font-size: large;
   font-style: normal;
   display: inline-block;
   transition: all 0.2s;
-  position: absolute;
+  position: relative;
   margin-left: -1.25rem;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectManyCheckbox .form-check-label img, .tobago-selectOneRadio .form-check-label img {
+.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectBooleanToggle .form-check-label img,
+.tobago-selectManyCheckbox .form-check-label img, .tobago-selectManyToggle .form-check-label img,
+.tobago-selectOneRadio .form-check-label img {
   margin-right: 0.3em;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectManyCheckbox .form-check-label:after, .tobago-selectOneRadio .form-check-label:after {
+.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectBooleanToggle .form-check-label:after,
+.tobago-selectManyCheckbox .form-check-label:after, .tobago-selectManyToggle .form-check-label:after,
+.tobago-selectOneRadio .form-check-label:after {
   content: "​";
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  font-size: larger;
+}
+
 .tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectBooleanCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
@@ -9797,8 +9810,29 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
   opacity: 0.5;
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  content: "";
+  position: relative;
+  margin-right: 0.5rem;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+  content: "";
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectManyToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+  text-shadow: 0 0 1px black;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+  opacity: 0.5;
+}
+
 .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectOneRadio .form-check-label input[type="radio"]:checked + .tobago-inputPseudo:before {
@@ -9820,23 +9854,30 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
   margin-bottom: 0;
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline, .tobago-selectOneRadio-inline .form-check.form-check-inline {
+.tobago-selectManyToggle-inline .form-check.form-check-inline,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline,
+.tobago-selectOneRadio-inline .form-check.form-check-inline {
   margin-bottom: 0;
   padding-left: 1rem;
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label, .tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
+.tobago-selectManyToggle-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
   vertical-align: baseline;
 }
 
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css.map b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css.map
index 833f390..9287940 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css
index 51592ea..f66d0cc 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css
@@ -3,5 +3,5 @@
  * Copyright 2011-2018 The Bootstrap Authors
  * Copyright 2011-2018 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css.map b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
index d306737..d8415f0 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/tobago-bootstrap/_version/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/rebuild-theme.txt b/tobago-theme/tobago-theme-speyside/rebuild-theme.txt
index b92eed1..f6ca5ad 100644
--- a/tobago-theme/tobago-theme-speyside/rebuild-theme.txt
+++ b/tobago-theme/tobago-theme-speyside/rebuild-theme.txt
@@ -1,7 +1,7 @@
 [INFO] Scanning for projects...
 [INFO] 
 [INFO] ----------< org.apache.myfaces.tobago:tobago-theme-speyside >-----------
-[INFO] Building Tobago Theme Speyside 4.2.2-SNAPSHOT
+[INFO] Building Tobago Theme Speyside 4.3.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO] 
 [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tobago-theme-speyside ---
@@ -30,8 +30,8 @@
 [INFO] Applying patch: append-tobago-theme-to-bootstrap.patch
 [INFO] 
 [INFO] --- maven-dependency-plugin:3.0.2:unpack (step #5: unpack-custom) @ tobago-theme-speyside ---
-[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.2.2-SNAPSHOT:jar
-[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.2.2-SNAPSHOT/tobago-core-4.2.2-SNAPSHOT.jar to __CURRENT__/tobago-theme-speyside/target/bootstrap with includes "**/*.scss" and excludes ""
+[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.3.0-SNAPSHOT:jar
+[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.3.0-SNAPSHOT/tobago-core-4.3.0-SNAPSHOT.jar to __CURRENT__/tobago-theme-speyside/target/bootstrap with includes "**/*.scss" and excludes ""
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:install-node-and-npm (step #6: install node and npm) @ tobago-theme-speyside ---
 [INFO] Installing node version v8.11.3
@@ -84,7 +84,7 @@
 [INFO] 
 [WARNING] npm WARN bootstrap@4.1.1 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself.
 [ERROR] 
-[INFO] added 1613 packages in 94.522s
+[INFO] added 1613 packages in 58.006s
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #8: npm run css-compile) @ tobago-theme-speyside ---
 [INFO] Running 'npm run css-compile' in __CURRENT__/tobago-theme-speyside/target/bootstrap
@@ -143,45 +143,45 @@
 [INFO] > rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-speyside/target/bootstrap
-[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-plugins-coverage __CURRENT__/tobago-theme-speyside/target/bootstrap
 [INFO] > cross-env PLUGINS=true NODE_ENV=test babel js/src/ --out-dir js/coverage/dist/ --source-maps
 [INFO] 
-[ERROR] 
-[ERROR] __CURRENT__/tobago-theme-speyside/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
+[INFO] 
+[INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-speyside/target/bootstrap
+[INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
+[INFO] 
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-speyside/target/bootstrap/js/src/index.js → dist/js/bootstrap.js...
+[ERROR] 
+[ERROR] __CURRENT__/tobago-theme-speyside/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
 [INFO] 🎉  Successfully compiled 12 files with Babel.
-[ERROR] created dist/js/bootstrap.js in 15.7s
-[ERROR] created dist/js/bootstrap.bundle.js in 17.2s
+[ERROR] created dist/js/bootstrap.js in 9s
+[ERROR] created dist/js/bootstrap.bundle.js in 9.4s
 [INFO] 🎉  Successfully compiled 12 files with Babel.
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify __CURRENT__/tobago-theme-speyside/target/bootstrap
 [INFO] > npm-run-all --parallel js-minify-*
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-speyside/target/bootstrap
-[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
+[INFO] > bootstrap@4.1.1 js-minify-bundle __CURRENT__/tobago-theme-speyside/target/bootstrap
+[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js
 [INFO] 
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-speyside/target/bootstrap
 [INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-minify-bundle __CURRENT__/tobago-theme-speyside/target/bootstrap
-[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js
+[INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-speyside/target/bootstrap
+[INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
 [INFO] 
-[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
 [ERROR] INFO: Using input source map: dist/js/bootstrap.bundle.js.map
+[ERROR] INFO: Using input source map: dist/js/bootstrap.js.map
 [INFO] 
 [INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tobago-theme-speyside ---
 [INFO] Using 'UTF-8' encoding to copy filtered resources.
 [INFO] Copying 1 resource
 [INFO] Copying 42 resources to META-INF/resources/tobago/speyside
-[INFO] Copying 6 resources to META-INF/resources/tobago/speyside/tobago-bootstrap/4.2.2-SNAPSHOT
+[INFO] Copying 6 resources to META-INF/resources/tobago/speyside/tobago-bootstrap/4.3.0-SNAPSHOT
 [INFO] Copying 3 resources
 [INFO] Copying 3 resources
 [INFO] 
@@ -208,17 +208,17 @@
 [INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ tobago-theme-speyside ---
 [INFO] 
 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ tobago-theme-speyside ---
-[INFO] Building jar: __CURRENT__/tobago-theme-speyside/target/tobago-theme-speyside-4.2.2-SNAPSHOT.jar
+[INFO] Building jar: __CURRENT__/tobago-theme-speyside/target/tobago-theme-speyside-4.3.0-SNAPSHOT.jar
 [INFO] 
 [INFO] --- maven-site-plugin:3.6:attach-descriptor (attach-descriptor) @ tobago-theme-speyside ---
 [INFO] Skipping because packaging 'jar' is not pom.
 [INFO] 
 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ tobago-theme-speyside ---
-[INFO] Installing __CURRENT__/tobago-theme-speyside/target/tobago-theme-speyside-4.2.2-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-speyside/4.2.2-SNAPSHOT/tobago-theme-speyside-4.2.2-SNAPSHOT.jar
-[INFO] Installing __CURRENT__/tobago-theme-speyside/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-speyside/4.2.2-SNAPSHOT/tobago-theme-speyside-4.2.2-SNAPSHOT.pom
+[INFO] Installing __CURRENT__/tobago-theme-speyside/target/tobago-theme-speyside-4.3.0-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-speyside/4.3.0-SNAPSHOT/tobago-theme-speyside-4.3.0-SNAPSHOT.jar
+[INFO] Installing __CURRENT__/tobago-theme-speyside/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-speyside/4.3.0-SNAPSHOT/tobago-theme-speyside-4.3.0-SNAPSHOT.pom
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time: 03:21 min
-[INFO] Finished at: 2018-06-22T12:30:01+02:00
+[INFO] Total time: 02:32 min
+[INFO] Finished at: 2018-07-05T15:19:27+02:00
 [INFO] ------------------------------------------------------------------------
diff --git a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css
index 0dcf54a..15e5bc6 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css
@@ -9506,32 +9506,45 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectManyCheckbox .form-check-label input, .tobago-selectOneRadio .form-check-label input {
+.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectBooleanToggle .form-check-label input,
+.tobago-selectManyCheckbox .form-check-label input, .tobago-selectManyToggle .form-check-label input,
+.tobago-selectOneRadio .form-check-label input {
   position: absolute;
   opacity: 0;
   z-index: -1;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
+.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   font-family: FontAwesome;
   font-size: large;
   font-style: normal;
   display: inline-block;
   transition: all 0.2s;
-  position: absolute;
+  position: relative;
   margin-left: -1.25rem;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectManyCheckbox .form-check-label img, .tobago-selectOneRadio .form-check-label img {
+.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectBooleanToggle .form-check-label img,
+.tobago-selectManyCheckbox .form-check-label img, .tobago-selectManyToggle .form-check-label img,
+.tobago-selectOneRadio .form-check-label img {
   margin-right: 0.3em;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectManyCheckbox .form-check-label:after, .tobago-selectOneRadio .form-check-label:after {
+.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectBooleanToggle .form-check-label:after,
+.tobago-selectManyCheckbox .form-check-label:after, .tobago-selectManyToggle .form-check-label:after,
+.tobago-selectOneRadio .form-check-label:after {
   content: "​";
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  font-size: larger;
+}
+
 .tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectBooleanCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
@@ -9548,8 +9561,29 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
   opacity: 0.5;
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  content: "";
+  position: relative;
+  margin-right: 0.5rem;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+  content: "";
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectManyToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+  text-shadow: 0 0 1px black;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+  opacity: 0.5;
+}
+
 .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectOneRadio .form-check-label input[type="radio"]:checked + .tobago-inputPseudo:before {
@@ -9571,23 +9605,30 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
   margin-bottom: 0;
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline, .tobago-selectOneRadio-inline .form-check.form-check-inline {
+.tobago-selectManyToggle-inline .form-check.form-check-inline,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline,
+.tobago-selectOneRadio-inline .form-check.form-check-inline {
   margin-bottom: 0;
   padding-left: 1rem;
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label, .tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
+.tobago-selectManyToggle-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
   vertical-align: baseline;
 }
 
diff --git a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css.map b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css.map
index e6f633b..adff676 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_ta [...]
\ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_ta [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css
index 6b9ce4b..53423a1 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css
@@ -3,5 +3,5 @@
  * Copyright 2011-2018 The Bootstrap Authors
  * Copyright 2011-2018 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#185722;--secondary:#d7d7d7;--success:#1da332;--info:#5bc0de;--warning:#f0ad4e;--danger:#d30040;--light:#f7f7f7;--dark:#323232;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:verdana, [...]
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#185722;--secondary:#d7d7d7;--success:#1da332;--info:#5bc0de;--warning:#f0ad4e;--danger:#d30040;--light:#f7f7f7;--dark:#323232;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:verdana, [...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css.map b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css.map
index b8131b6..d0d0b43 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/tobago-bootstrap/_version/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/ [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/ [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/rebuild-theme.txt b/tobago-theme/tobago-theme-standard/rebuild-theme.txt
index 6aa1128..1de748b 100644
--- a/tobago-theme/tobago-theme-standard/rebuild-theme.txt
+++ b/tobago-theme/tobago-theme-standard/rebuild-theme.txt
@@ -1,7 +1,7 @@
 [INFO] Scanning for projects...
 [INFO] 
 [INFO] ----------< org.apache.myfaces.tobago:tobago-theme-standard >-----------
-[INFO] Building Tobago Theme Standard 4.2.2-SNAPSHOT
+[INFO] Building Tobago Theme Standard 4.3.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO] 
 [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tobago-theme-standard ---
@@ -30,8 +30,8 @@
 [INFO] Applying patch: append-tobago-theme-to-bootstrap.patch
 [INFO] 
 [INFO] --- maven-dependency-plugin:3.0.2:unpack (step #5: unpack-custom) @ tobago-theme-standard ---
-[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.2.2-SNAPSHOT:jar
-[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.2.2-SNAPSHOT/tobago-core-4.2.2-SNAPSHOT.jar to __CURRENT__/tobago-theme-standard/target/bootstrap with includes "**/*.scss" and excludes ""
+[INFO] Configured Artifact: org.apache.myfaces.tobago:tobago-core:4.3.0-SNAPSHOT:jar
+[INFO] Unpacking __REPO__/org/apache/myfaces/tobago/tobago-core/4.3.0-SNAPSHOT/tobago-core-4.3.0-SNAPSHOT.jar to __CURRENT__/tobago-theme-standard/target/bootstrap with includes "**/*.scss" and excludes ""
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:install-node-and-npm (step #6: install node and npm) @ tobago-theme-standard ---
 [INFO] Installing node version v8.11.3
@@ -84,7 +84,7 @@
 [INFO] 
 [WARNING] npm WARN bootstrap@4.1.1 requires a peer of jquery@1.9.1 - 3 but none is installed. You must install peer dependencies yourself.
 [ERROR] 
-[INFO] added 1613 packages in 95.701s
+[INFO] added 1613 packages in 58.528s
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #8: npm run css-compile) @ tobago-theme-standard ---
 [INFO] Running 'npm run css-compile' in __CURRENT__/tobago-theme-standard/target/bootstrap
@@ -99,8 +99,8 @@
 [ERROR] Wrote CSS to __CURRENT__/tobago-theme-standard/target/bootstrap/dist/css/bootstrap-grid.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-standard/target/bootstrap/dist/css/bootstrap-grid.css.map
 [ERROR] Rendering Complete, saving .css file...
-[ERROR] Wrote CSS to __CURRENT__/tobago-theme-standard/target/bootstrap/dist/css/bootstrap-reboot.css
 [ERROR] Wrote Source Map to __CURRENT__/tobago-theme-standard/target/bootstrap/dist/css/bootstrap-reboot.css.map
+[ERROR] Wrote CSS to __CURRENT__/tobago-theme-standard/target/bootstrap/dist/css/bootstrap-reboot.css
 [INFO] 
 [INFO] --- frontend-maven-plugin:1.6:npm (step #9: npm run css-prefix) @ tobago-theme-standard ---
 [INFO] Running 'npm run css-prefix' in __CURRENT__/tobago-theme-standard/target/bootstrap
@@ -143,34 +143,34 @@
 [INFO] > rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-compile-plugins-coverage __CURRENT__/tobago-theme-standard/target/bootstrap
-[INFO] > cross-env PLUGINS=true NODE_ENV=test babel js/src/ --out-dir js/coverage/dist/ --source-maps
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-compile-plugins __CURRENT__/tobago-theme-standard/target/bootstrap
 [INFO] > cross-env PLUGINS=true babel js/src/ --out-dir js/dist/ --source-maps
 [INFO] 
+[INFO] 
+[INFO] > bootstrap@4.1.1 js-compile-plugins-coverage __CURRENT__/tobago-theme-standard/target/bootstrap
+[INFO] > cross-env PLUGINS=true NODE_ENV=test babel js/src/ --out-dir js/coverage/dist/ --source-maps
+[INFO] 
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-standard/target/bootstrap/js/src/index.js → dist/js/bootstrap.js...
 [ERROR] 
 [ERROR] __CURRENT__/tobago-theme-standard/target/bootstrap/js/src/index.js → dist/js/bootstrap.bundle.js...
 [INFO] 🎉  Successfully compiled 12 files with Babel.
-[ERROR] created dist/js/bootstrap.js in 14.8s
-[ERROR] created dist/js/bootstrap.bundle.js in 15.6s
+[ERROR] created dist/js/bootstrap.js in 9s
+[ERROR] created dist/js/bootstrap.bundle.js in 9.3s
 [INFO] 🎉  Successfully compiled 12 files with Babel.
 [INFO] 
 [INFO] > bootstrap@4.1.1 js-minify __CURRENT__/tobago-theme-standard/target/bootstrap
 [INFO] > npm-run-all --parallel js-minify-*
 [INFO] 
 [INFO] 
-[INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-standard/target/bootstrap
-[INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
-[INFO] 
-[INFO] 
 [INFO] > bootstrap@4.1.1 js-minify-standalone __CURRENT__/tobago-theme-standard/target/bootstrap
 [INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map" --output dist/js/bootstrap.min.js dist/js/bootstrap.js
 [INFO] 
 [INFO] 
+[INFO] > bootstrap@4.1.1 js-minify-docs __CURRENT__/tobago-theme-standard/target/bootstrap
+[INFO] > uglifyjs --mangle --comments "/^!/" --output assets/js/docs.min.js assets/js/vendor/anchor.min.js assets/js/vendor/clipboard.min.js assets/js/vendor/holder.min.js "assets/js/src/*.js"
+[INFO] 
+[INFO] 
 [INFO] > bootstrap@4.1.1 js-minify-bundle __CURRENT__/tobago-theme-standard/target/bootstrap
 [INFO] > uglifyjs --compress typeofs=false --mangle --comments "/^!/" --source-map "content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js
 [INFO] 
@@ -181,7 +181,7 @@
 [INFO] Using 'UTF-8' encoding to copy filtered resources.
 [INFO] Copying 1 resource
 [INFO] Copying 35 resources to META-INF/resources/tobago/standard
-[INFO] Copying 22 resources to META-INF/resources/tobago/standard/tobago-bootstrap/4.2.2-SNAPSHOT
+[INFO] Copying 22 resources to META-INF/resources/tobago/standard/tobago-bootstrap/4.3.0-SNAPSHOT
 [INFO] Copying 3 resources
 [INFO] Copying 3 resources
 [INFO] 
@@ -219,7 +219,7 @@ main:
  T E S T S
 -------------------------------------------------------
 Running org.apache.myfaces.tobago.renderkit.css.BootstrapClassUnitTest
-Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.35 sec - in org.apache.myfaces.tobago.renderkit.css.BootstrapClassUnitTest
+Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.271 sec - in org.apache.myfaces.tobago.renderkit.css.BootstrapClassUnitTest
 
 Results :
 
@@ -227,17 +227,17 @@ Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
 
 [INFO] 
 [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ tobago-theme-standard ---
-[INFO] Building jar: __CURRENT__/tobago-theme-standard/target/tobago-theme-standard-4.2.2-SNAPSHOT.jar
+[INFO] Building jar: __CURRENT__/tobago-theme-standard/target/tobago-theme-standard-4.3.0-SNAPSHOT.jar
 [INFO] 
 [INFO] --- maven-site-plugin:3.6:attach-descriptor (attach-descriptor) @ tobago-theme-standard ---
 [INFO] Skipping because packaging 'jar' is not pom.
 [INFO] 
 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ tobago-theme-standard ---
-[INFO] Installing __CURRENT__/tobago-theme-standard/target/tobago-theme-standard-4.2.2-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-standard/4.2.2-SNAPSHOT/tobago-theme-standard-4.2.2-SNAPSHOT.jar
-[INFO] Installing __CURRENT__/tobago-theme-standard/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-standard/4.2.2-SNAPSHOT/tobago-theme-standard-4.2.2-SNAPSHOT.pom
+[INFO] Installing __CURRENT__/tobago-theme-standard/target/tobago-theme-standard-4.3.0-SNAPSHOT.jar to __REPO__/org/apache/myfaces/tobago/tobago-theme-standard/4.3.0-SNAPSHOT/tobago-theme-standard-4.3.0-SNAPSHOT.jar
+[INFO] Installing __CURRENT__/tobago-theme-standard/pom.xml to __REPO__/org/apache/myfaces/tobago/tobago-theme-standard/4.3.0-SNAPSHOT/tobago-theme-standard-4.3.0-SNAPSHOT.pom
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time: 03:29 min
-[INFO] Finished at: 2018-06-22T12:30:09+02:00
+[INFO] Total time: 02:36 min
+[INFO] Finished at: 2018-07-05T15:19:32+02:00
 [INFO] ------------------------------------------------------------------------
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css
index 9e0e437..2fcc1f6 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css
@@ -9721,32 +9721,45 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* selectBooleanCheckbox, selectManyCheckbox, selectOneRadio ------------------------------ */
-.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectManyCheckbox .form-check-label input, .tobago-selectOneRadio .form-check-label input {
+.tobago-selectBooleanCheckbox .form-check-label input, .tobago-selectBooleanToggle .form-check-label input,
+.tobago-selectManyCheckbox .form-check-label input, .tobago-selectManyToggle .form-check-label input,
+.tobago-selectOneRadio .form-check-label input {
   position: absolute;
   opacity: 0;
   z-index: -1;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
+.tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before,
+.tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   font-family: FontAwesome;
   font-size: large;
   font-style: normal;
   display: inline-block;
   transition: all 0.2s;
-  position: absolute;
+  position: relative;
   margin-left: -1.25rem;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectManyCheckbox .form-check-label img, .tobago-selectOneRadio .form-check-label img {
+.tobago-selectBooleanCheckbox .form-check-label img, .tobago-selectBooleanToggle .form-check-label img,
+.tobago-selectManyCheckbox .form-check-label img, .tobago-selectManyToggle .form-check-label img,
+.tobago-selectOneRadio .form-check-label img {
   margin-right: 0.3em;
 }
 
-.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectManyCheckbox .form-check-label:after, .tobago-selectOneRadio .form-check-label:after {
+.tobago-selectBooleanCheckbox .form-check-label:after, .tobago-selectBooleanToggle .form-check-label:after,
+.tobago-selectManyCheckbox .form-check-label:after, .tobago-selectManyToggle .form-check-label:after,
+.tobago-selectOneRadio .form-check-label:after {
   content: "​";
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  font-size: larger;
+}
+
 .tobago-selectBooleanCheckbox .form-check-label .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectBooleanCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyCheckbox .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
@@ -9763,8 +9776,29 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
   opacity: 0.5;
 }
 
+.tobago-selectBooleanToggle .form-check-label .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label .tobago-inputPseudo:before {
+  content: "";
+  position: relative;
+  margin-right: 0.5rem;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:checked + .tobago-inputPseudo:before {
+  content: "";
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:focus:not(:disabled) + .tobago-inputPseudo:before,
+.tobago-selectManyToggle .form-check-label input[type="checkbox"]:active:not(:disabled) + .tobago-inputPseudo:before {
+  text-shadow: 0 0 1px black;
+}
+
+.tobago-selectBooleanToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before, .tobago-selectManyToggle .form-check-label input[type="checkbox"]:disabled + .tobago-inputPseudo:before {
+  opacity: 0.5;
+}
+
 .tobago-selectOneRadio .form-check-label .tobago-inputPseudo:before {
   content: "";
+  position: absolute;
 }
 
 .tobago-selectOneRadio .form-check-label input[type="radio"]:checked + .tobago-inputPseudo:before {
@@ -9786,23 +9820,30 @@ h1 > .fa:first-child, h1 > img, h2 > .fa:first-child, h2 > img, h3 > .fa:first-c
 }
 
 /* inline */
+.tobago-selectBooleanToggle.form-check,
 .tobago-selectBooleanCheckbox.form-check {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
   margin-bottom: 0;
 }
 
-.tobago-selectManyCheckbox-inline, .tobago-selectOneRadio-inline {
+.tobago-selectManyToggle-inline,
+.tobago-selectManyCheckbox-inline,
+.tobago-selectOneRadio-inline {
   padding-top: calc(0.375rem - 1px * 2);
   padding-bottom: calc(0.375rem - 1px * 2);
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline, .tobago-selectOneRadio-inline .form-check.form-check-inline {
+.tobago-selectManyToggle-inline .form-check.form-check-inline,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline,
+.tobago-selectOneRadio-inline .form-check.form-check-inline {
   margin-bottom: 0;
   padding-left: 1rem;
 }
 
-.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label, .tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
+.tobago-selectManyToggle-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectManyCheckbox-inline .form-check.form-check-inline .form-check-label,
+.tobago-selectOneRadio-inline .form-check.form-check-inline .form-check-label {
   vertical-align: baseline;
 }
 
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css.map b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css.map
index 8502c9c..1d7f532 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/bootstrap.scss","../../scss/_custom.scss","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixi [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css
index b7c1bd3..86dd621 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css
@@ -3,5 +3,5 @@
  * Copyright 2011-2018 The Bootstrap Authors
  * Copyright 2011-2018 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-s [...]
 /*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css.map b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css.map
index b99d943..d03152e 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
+{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../. [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
index e393034..180a970 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
@@ -1237,6 +1237,24 @@ Tobago.registerListener(Tobago.SelectBooleanCheckbox.init, Tobago.Phase.AFTER_UP
 
 // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
+Tobago.SelectBooleanToggle = {};
+
+Tobago.SelectBooleanToggle.init = function(elements) {
+  var toggles = Tobago.Utils.selectWithJQuery(elements, ".tobago-selectBooleanToggle input[readonly]");
+  toggles.each(function() {
+    // Save the initial state to restore it, when the user tries to manipulate it.
+    var initial = jQuery(this).is(":checked");
+    jQuery(this).click(function() {
+      jQuery(this).prop("checked", initial);
+    });
+  });
+};
+
+Tobago.registerListener(Tobago.SelectBooleanToggle.init, Tobago.Phase.DOCUMENT_READY);
+Tobago.registerListener(Tobago.SelectBooleanToggle.init, Tobago.Phase.AFTER_UPDATE);
+
+// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
 Tobago.SelectManyCheckbox = {};
 
 Tobago.SelectManyCheckbox.init = function(elements) {