Merge branch 'develop' into feature/sanitize
diff --git a/examples/jewel/TourDeJewel/src/main/royale/TriStateCheckBoxPlayGround.mxml b/examples/jewel/TourDeJewel/src/main/royale/TriStateCheckBoxPlayGround.mxml
index 28e7ec6..bb23883 100644
--- a/examples/jewel/TourDeJewel/src/main/royale/TriStateCheckBoxPlayGround.mxml
+++ b/examples/jewel/TourDeJewel/src/main/royale/TriStateCheckBoxPlayGround.mxml
@@ -84,7 +84,7 @@
                         <j:html><![CDATA[<p>A <strong>TriStateCheckBox</strong> can have the following six states.</p>]]></j:html>
                     </j:Label>
 
-                    <j:TriStateCheckBox text="Not Checked (with ReadOnly bead)"/>
+                    <j:TriStateCheckBox text="Not Checked"/>
 
                     <j:TriStateCheckBox text="Checked" selected="true"/>
 
@@ -161,7 +161,7 @@
                 <j:CardPrimaryContent>
 
                     <j:Label multiline="true">
-                        <j:html><![CDATA[<p>Select one or more options.</p>]]></j:html>
+                        <j:html><![CDATA[<p>Select one or more options. The check showing the group status has the ReadOnly bead configured.</p>]]></j:html>
                     </j:Label>
                     
                     <j:VGroup width="230" gap="5" className="groupoptions">
@@ -221,7 +221,7 @@
                     </j:TriStateCheckBox>   
                 
                     <j:Label multiline="true">
-                        <j:html><![CDATA[<p>The <strong>TriStateCheckBoxStatesValues</strong> bead allows to set a custom value for each state. <p>By default, the "unchecked" state is assigned a value of "0", the "checked" state a value of "1" and the "indeterminate" state a value of "-1".</p>]]></j:html>
+                        <j:html><![CDATA[<p>The <strong>TriStateCheckBoxState</strong> bead allows to set a custom value for each state. <p>By default, the "unchecked" state is assigned a value of "0", the "checked" state a value of "1" and the "indeterminate" state a value of "-1".</p>]]></j:html>
                     </j:Label>
 
                     <j:HGroup percentWidth="100" itemsVerticalAlign="itemsCenter" gap="5">
@@ -232,7 +232,7 @@
                         <j:Label text="Custom: " width="100"/>
                         <j:TriStateCheckBox localId="trCh1" text="{trCh1.state}" >
                             <j:beads>
-                                <j:TriStateCheckBoxStatesValues checkedValue="valChecked" uncheckedValue="valUnchecked" indeterminateValue="valIndeterminate"/>
+                                <j:TriStateCheckBoxState checkedValue="valChecked" uncheckedValue="valUnchecked" indeterminateValue="valIndeterminate"/>
                             </j:beads>
                         </j:TriStateCheckBox>
                     </j:HGroup>
diff --git a/examples/mxroyale/ControlsExample/src/main/royale/ControlsExample.mxml b/examples/mxroyale/ControlsExample/src/main/royale/ControlsExample.mxml
index 31a3584..3600e83 100644
--- a/examples/mxroyale/ControlsExample/src/main/royale/ControlsExample.mxml
+++ b/examples/mxroyale/ControlsExample/src/main/royale/ControlsExample.mxml
@@ -42,27 +42,59 @@
 	
 	<fx:Script>
 		<![CDATA[
-			import org.apache.royale.events.Event;
-			
-			private function pushMePushed(event:MouseEvent):void
-			{
-				trace("The PushMe button was pushed");
+		import components.TitleWindowPopupWindowWithViewStack;
+		import mx.containers.TitleWindow;
+		import mx.managers.PopUpManager;
+		import mx.events.CloseEvent;
+		import mx.events.FlexEvent;
+		import org.apache.royale.events.Event;
+
+		private function pushMePushed(event:MouseEvent):void {
+			trace("The PushMe button was pushed");
+		}
+
+		private function changeIcon():void {
+			button2.icon = "assets/mediumredrect.jpg";
+		}
+
+		private function otherPushMe():void {
+			trace("The other button was pushed");
+			text1.htmlText = "The Button with an icon was pushed.";
+			dispatchEvent(new Event("layoutNeeded"));
+		}
+
+		private function testTitleWindow():void {
+			var titleWindow:TitleWindow = new TitleWindow();
+			titleWindow.width = 600;
+			titleWindow.height = 500;
+			titleWindow.title = "My TitleWindow";
+			titleWindow.showCloseButton = true;
+			titleWindow.addEventListener(mx.events.CloseEvent.CLOSE, function (e:mx.events.CloseEvent):void{
+				PopUpManager.removePopUp(titleWindow);
+			})
+			PopUpManager.addPopUp(titleWindow, this, true);
+			PopUpManager.centerPopUp(titleWindow);
+		}
+
+		private function testViewStack():void {
+			var test:TitleWindowPopupWindowWithViewStack = PopUpManager.createPopUp(this,TitleWindowPopupWindowWithViewStack) as TitleWindowPopupWindowWithViewStack;
+			test.addEventListener(mx.events.CloseEvent.CLOSE, close);
+			//@todo implement and test other child creationPolicies...
+			test.childCreationPolicyTest = 'none';
+			test.title = "ViewStack with creationPolicy test:"+test.childCreationPolicyTest;
+			PopUpManager.centerPopUp(test);
+
+			function close(event:mx.events.CloseEvent):void{
+				PopUpManager.removePopUp(test)
 			}
-			
-			private function changeIcon():void
-			{
-				button2.icon = "assets/mediumredrect.jpg";
-			}
-			
-			private function otherPushMe():void
-			{
-				trace("The other button was pushed");
-				text1.htmlText = "The Button with an icon was pushed.";
-				dispatchEvent(new Event("layoutNeeded"));
-			}
+		}
 		]]>
 	</fx:Script>
-	
+	<mx:Canvas width="300" height="100" backgroundColor="yellow">
+		<mx:Label text="left:2 right:2 top:2" left="2" right="2" top="2" backgroundColor="white"/>
+		<mx:Label text="left:10 right:40 top:40" left="10" right="40" top="40" backgroundColor="white"/>
+		<mx:Label text="left:40 right:40 top:80" left="40" right="40" top="80" backgroundColor="white" />
+	</mx:Canvas>
 	<mx:VBox id="vbox1">
 		<mx:Label text="Hello World"/>
 		<mx:Button label="Change Icon" click="changeIcon()"
@@ -93,6 +125,9 @@
 	</mx:Canvas>
 	<mx:TextArea text="This is the TextArea control!"
 		maxChars="100"/>
+	<mx:Button label="Launch TitleWindow" click="testTitleWindow()"
+			   toolTip="launchs a test TitleWindow" />
+	<mx:Button label="Launch ViewStack" click="testViewStack()"
+			   toolTip="launchs a test ViewStack with LinkBar" />
 
-        
 </mx:Application>
\ No newline at end of file
diff --git a/examples/mxroyale/ControlsExample/src/main/royale/components/StackItem.mxml b/examples/mxroyale/ControlsExample/src/main/royale/components/StackItem.mxml
new file mode 100644
index 0000000..1dfc169
--- /dev/null
+++ b/examples/mxroyale/ControlsExample/src/main/royale/components/StackItem.mxml
@@ -0,0 +1,45 @@
+<!--
+
+  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.
+
+-->
+<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
+           xmlns:mx="library://ns.apache.org/royale/mx"
+
+           width="100%" height="100%">
+
+    <mx:Label preinitialize="preInitialize(event)" initialize="onInitialize(event)" id="testLabel" left="0" right="0" text="{label}" creationComplete="labelComplete(event)"/>
+
+    <mx:Label preinitialize="preInitialize(event)" initialize="onInitialize(event)" id="otherLabel" left="0" right="0" top="40" text="{label}" creationComplete="labelComplete(event)"/>
+
+    <fx:Script><![CDATA[
+        import mx.events.FlexEvent;
+
+
+        private function labelComplete(event:FlexEvent):void{
+            trace(event.target.id,' creationComplete Internal:'+this.label)
+        }
+
+
+        private function preInitialize(event:FlexEvent):void {
+            trace(event.target.id,' preInitialize Internal:'+this.label)
+        }
+
+        private function onInitialize(event:FlexEvent):void {
+            trace(event.target.id,' initialize Internal:'+this.label)
+        }
+        ]]></fx:Script>
+</mx:Canvas>
diff --git a/examples/mxroyale/ControlsExample/src/main/royale/components/TitleWindowPopupWindowWithViewStack.mxml b/examples/mxroyale/ControlsExample/src/main/royale/components/TitleWindowPopupWindowWithViewStack.mxml
new file mode 100644
index 0000000..8900833
--- /dev/null
+++ b/examples/mxroyale/ControlsExample/src/main/royale/components/TitleWindowPopupWindowWithViewStack.mxml
@@ -0,0 +1,66 @@
+<!--
+
+  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.
+
+-->
+<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
+                xmlns:mx="library://ns.apache.org/royale/mx"
+                layout="absolute"
+                creationComplete="onCreationComplete(event)"
+                showCloseButton="true"
+                width="850"
+                height="680">
+
+    <fx:Script><![CDATA[
+        import mx.events.FlexEvent;
+
+        public var childCreationPolicyTest:String = 'none';
+
+        private function viewStackChange(event:IndexChangedEvent):void {
+
+        }
+        import mx.events.IndexChangedEvent;
+
+        private function onCreationComplete(event:FlexEvent):void {
+            for (var i:uint=0;i<10;i++) {
+                var inst:Canvas = new StackItem();
+                inst.creationPolicy = i >0 ? childCreationPolicyTest : 'all';
+                inst.label = "Inst:"+i;
+                inst.addEventListener(FlexEvent.PREINITIALIZE, childEvent);
+                inst.addEventListener(FlexEvent.INITIALIZE, childEvent)
+                inst.addEventListener(FlexEvent.CREATION_COMPLETE, childEvent)
+                inst.addEventListener(FlexEvent.CONTENT_CREATION_COMPLETE, childEvent)
+                Properties_vs.addChild(inst);
+            }
+
+        }
+
+
+        private function childEvent(event:Event):void{
+            var target:StackItem = event.target as StackItem;
+            trace(event.type, target.label);
+        }
+
+        ]]>
+    </fx:Script>
+    <mx:Canvas width="223" left="0" top="0" bottom="0" horizontalScrollPolicy="off" id="linkBarCanvas">
+        <mx:LinkBar id="Properties_lbar" width="215" direction="vertical" dataProvider="Properties_vs" left="0" top="0" bottom="0"/>
+    </mx:Canvas>
+    <mx:VRule x="223" top="0" bottom="0" id="propertiesVRule"/>
+    <mx:ViewStack id="Properties_vs" change="viewStackChange(event)" top="0" bottom="0" right="0" left="225"/>
+
+
+</mx:TitleWindow>
diff --git a/frameworks/build.xml b/frameworks/build.xml
index e1852e3..2085882 100644
--- a/frameworks/build.xml
+++ b/frameworks/build.xml
@@ -156,6 +156,7 @@
         <antcall target="Jewel"/>
         <antcall target="JewelTheme"/>
 		<antcall target="Icons"/>
+		<antcall target="ExternsJS"/>
     </target>
 
     <target name="test" description="Tests all SWCs">
@@ -197,6 +198,8 @@
         <antcall target="CruxTest"/>
         <antcall target="JewelTest"/>
         <antcall target="IconsTest"/>
+        <!-- No tests yet -->
+        <!-- <antcall target="ExternsJSTest"/> -->
     </target>
 
     <target name="fonts">
@@ -258,6 +261,7 @@
         <ant dir="${basedir}/projects/Crux" target="clean"/>
         <ant dir="${basedir}/projects/Jewel" target="clean"/>
 		<ant dir="${basedir}/projects/Icons" target="clean"/>
+		<ant dir="${basedir}/projects/ExternsJS" target="clean"/>
         <ant dir="${basedir}/themes/JewelTheme" target="clean"/>
         <ant dir="${basedir}/fontsrc" target="clean"/>
 
@@ -562,10 +566,18 @@
         <ant dir="${basedir}/projects/Icons"/>
     </target>
 
+    <target name="ExternsJS" description="Clean build of ExternsJS.swc">
+        <ant dir="${basedir}/projects/ExternsJS"/>
+    </target>
+
     <target name="IconsTest" description="Test of Icons.swc">
         <ant dir="${basedir}/projects/Icons" target="test"/>
     </target>
 
+    <target name="ExternsJSTest" description="Test of ExternsJS.swc">
+        <ant dir="${basedir}/projects/ExternsJS" target="test"/>
+    </target>
+
     <target name="Jewel" description="Clean build of Jewel.swc">
         <ant dir="${basedir}/projects/Jewel"/>
     </target>
diff --git a/frameworks/js/projects/ExternsJSJS/build.xml b/frameworks/js/projects/ExternsJSJS/build.xml
new file mode 100644
index 0000000..bb19837
--- /dev/null
+++ b/frameworks/js/projects/ExternsJSJS/build.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<project name="ExternsJSJS" default="main" basedir=".">
+    <property name="ROYALE_HOME" location="../../../.."/>
+    
+    <property file="${ROYALE_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${ROYALE_HOME}/local.properties"/>
+    <property file="${ROYALE_HOME}/build.properties"/>
+    <property name="ROYALE_HOME" value="${ROYALE_HOME}"/>
+    
+    <property name="target.name" value="${ant.project.name}.swc" />
+    <tstamp>
+        <format property="royale.swc-date" pattern="MM/dd/yy HH:mm Z"/>
+    </tstamp>
+    <echo>swc-date is ${royale.swc-date}</echo>
+    
+    <echo file="${basedir}/${target.name}.properties">target.name.nojs=${ant.project.name}</echo>
+    <replaceregexp file="${basedir}/${target.name}.properties" match="(.*)JS$" replace="\1" flags="m" />
+    <property file="${basedir}/${target.name}.properties"/>
+    <delete file="${basedir}/${target.name}.properties"/>
+    
+    <target name="main" depends="clean,check-compiler,compile" description="Full build of ${ant.project.name}.swc">
+    </target>
+    
+    <target name="check-for-tests" >
+        <condition property="skip-tests" >
+            <not>
+                <available file="${basedir}/src/test/royale/build.xml" />
+            </not>
+        </condition>
+    </target>
+    
+    <target name="test" depends="check-for-tests,check-compiler" unless="skip-tests">
+        <ant dir="src/test/royale" />
+    </target>
+    
+    <target name="clean">
+        <delete failonerror="false">
+            <fileset dir="${ROYALE_HOME}/frameworks/js/libs">
+                <include name="${target.name}"/>
+            </fileset>
+        </delete>
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${basedir}/target">
+                <include name="**/**"/>
+            </fileset>
+        </delete>
+        <antcall target="clean-tests" />
+    </target>
+    
+    <target name="clean-tests" depends="check-for-tests" unless="skip-tests">
+        <ant dir="src/test/royale" target="clean"/>
+    </target>
+    
+    <target name="compile" depends="check-compiler">
+        <echo message="Cross-compiling ${target.name}"/>
+        <echo message="ROYALE_COMPILER_HOME: ${ROYALE_COMPILER_HOME}"/>
+        <mkdir dir="${basedir}/target/generated-sources/royale"/>
+        <java jar="${ROYALE_COMPILER_HOME}/lib/compc.jar" fork="true" >
+            <jvmarg value="-Xmx384m" />
+            <jvmarg value="-Dsun.io.useCanonCaches=false" />
+            <jvmarg value="-Droyalelib=${ROYALE_HOME}/frameworks" />
+            <arg value="+royalelib=${ROYALE_HOME}/frameworks" />
+            <arg value="-compiler.strict-xml=true" />
+            <arg value="-compiler.targets=SWF,JSRoyale" />
+            <arg line="-metadata.date=&quot;${royale.swc-date}&quot;" />
+            <arg line="-metadata.dateFormat=&quot;MM/dd/yy HH:mm Z&quot;" />
+            <arg line="-swf-debugfile-alias=&quot;/org/apache/royale/${release.version}&quot;" />
+            <arg value="-output=${basedir}/target/${target.name}" />
+            <arg value="-load-config=${ROYALE_HOME}/frameworks/js-config.xml" />
+            <arg value="-load-config+=${basedir}/src/main/config/compile-js-config.xml" />
+        </java>
+        <copy file="${basedir}/target/${target.name}" tofile="${ROYALE_HOME}/frameworks/js/libs/${target.name}" />
+    </target>
+    
+    <target name="copy-js" >
+        <mkdir dir="${ROYALE_HOME}/frameworks/js/generated-sources"/>
+        <copy todir="${ROYALE_HOME}/frameworks/js/generated-sources">
+            <fileset dir="${basedir}/target/generated-sources/royale">
+                <include name="**/**" />
+            </fileset>
+        </copy>
+    </target>
+    
+    <target name="check-compiler" depends="check-compiler-home,check-transpiler-home">
+        <path id="lib.path">
+            <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="compiler-royaleTasks.jar"/>
+        </path>
+        <taskdef resource="flexTasks.tasks" classpathref="lib.path"/>
+    </target>
+    
+    <target name="check-compiler-home"
+        description="Set ROYALE_SWF_COMPILER_HOME to point at the compiler.">
+        
+        <available file="${ROYALE_HOME}/lib/compiler-mxmlc.jar"
+        type="file"
+        property="ROYALE_SWF_COMPILER_HOME"
+        value="${ROYALE_HOME}"/>
+        
+        <fail message="ROYALE_SWF_COMPILER_HOME must be set to a folder with a lib sub-folder containing compiler-mxmlc.jar such as the compiler folder in royale-compiler repo or the root of a Royale SDK"
+        unless="ROYALE_SWF_COMPILER_HOME"/>
+    </target>
+    
+    <target name="check-transpiler-home"
+        description="Set ROYALE_COMPILER_HOME to point at the cross-compiler.">
+        
+        <available file="${ROYALE_HOME}/js/lib/jsc.jar"
+        type="file"
+        property="ROYALE_COMPILER_HOME"
+        value="${ROYALE_HOME}/js"/>
+        
+        <fail message="ROYALE_COMPILER_HOME must be set to a folder with a lib sub-folder containing jsc.jar such as the compiler-jx folder in royale-compiler repo or the js folder of a Royale SDK"
+        unless="ROYALE_COMPILER_HOME"/>
+    </target>
+    
+</project>
diff --git a/frameworks/js/projects/ExternsJSJS/src/main/config/compile-js-config.xml b/frameworks/js/projects/ExternsJSJS/src/main/config/compile-js-config.xml
new file mode 100644
index 0000000..63ce2eb
--- /dev/null
+++ b/frameworks/js/projects/ExternsJSJS/src/main/config/compile-js-config.xml
@@ -0,0 +1,96 @@
+<!--
+
+  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.
+
+-->
+<royale-config>
+
+    <compiler>
+        <accessible>false</accessible>
+        
+        <!-- build both SWF and JS. -->
+        <targets>
+            <target>SWF</target>
+            <target>JSRoyale</target>
+        </targets>
+        <strict-xml>true</strict-xml>
+
+		<mxml>
+			<children-as-data>true</children-as-data>
+		</mxml>
+		<binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event>
+		<binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind>
+		<binding-value-change-event-type>valueChange</binding-value-change-event-type>
+
+        <define>
+            <name>COMPILE::SWF</name>
+            <value>false</value>
+        </define>
+        <define>
+            <name>COMPILE::JS</name>
+            <value>true</value>
+        </define>
+
+        <keep-as3-metadata>
+          <name>Bindable</name>
+          <name>Managed</name>
+          <name>ChangeEvent</name>
+          <name>NonCommittingChangeEvent</name>
+          <name>Transient</name>
+        </keep-as3-metadata>
+	  
+        <locale/>
+        
+        <external-library-path append="true">
+            <path-element>../../../../../libs/LanguageJS.swc</path-element>
+            <path-element>../../../../../libs/CoreJS.swc</path-element>
+            <path-element>../../../../../libs/BasicJS.swc</path-element>
+            <path-element>../../../../../libs/CollectionsJS.swc</path-element>
+        </external-library-path>
+        
+        <source-path>
+            <path-element>../../../../../../projects/ExternsJS/src/main/royale</path-element>
+        </source-path>
+        
+        <namespaces>
+            <namespace>
+                <uri>library://ns.apache.org/royale/externsjs</uri>
+                <manifest>../../../../../../projects/ExternsJS/src/main/resources/externsjs-manifest.xml</manifest>
+            </namespace>
+        </namespaces>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <include-file>
+    </include-file>
+
+    <include-classes>
+        <class>ExternsJSClasses</class>
+    </include-classes>
+    
+    <include-namespaces>
+        <uri>library://ns.apache.org/royale/basic</uri>
+    </include-namespaces>
+
+    <js-default-initializers>false</js-default-initializers>
+
+    <js-complex-implicit-coercions>false</js-complex-implicit-coercions>
+    <js-resolve-uncertain>false</js-resolve-uncertain>
+    <js-vector-index-checks>false</js-vector-index-checks>
+        
+
+</royale-config>
diff --git a/frameworks/js/projects/SparkRoyaleJS/src/main/config/compile-js-config.xml b/frameworks/js/projects/SparkRoyaleJS/src/main/config/compile-js-config.xml
index 7a1f198..ab405d5 100644
--- a/frameworks/js/projects/SparkRoyaleJS/src/main/config/compile-js-config.xml
+++ b/frameworks/js/projects/SparkRoyaleJS/src/main/config/compile-js-config.xml
@@ -70,6 +70,7 @@
             <path-element>../../../../../libs/NetworkJS.swc</path-element>
             <path-element>../../../../../libs/ChartsJS.swc</path-element>
             <path-element>../../../../../libs/MXRoyaleJS.swc</path-element>
+            <path-element>../../../../../libs/MXRoyaleBaseJS.swc</path-element>
             <path-element>../../../../../libs/ReflectionJS.swc</path-element>
             <path-element>../../../../../libs/TextJS.swc</path-element>
             <path-element>../../../../../libs/TLFJS.swc</path-element>
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
index ad2ff6e..7c5f7c2 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
@@ -47,6 +47,7 @@
 	import org.apache.royale.html.beads.models.ListPresentationModel;
 	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.core.IListWithPresentationModel;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  Indicates that the initialization of the list is complete.
@@ -74,7 +75,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataContainer extends DataContainerBase implements IStrandWithPresentationModel, IListWithPresentationModel
+	public class DataContainer extends DataContainerBase implements IStrandWithPresentationModel, IListWithPresentationModel, IHasLabelField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DropDownList.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DropDownList.as
index e4b49e8..71d6276 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DropDownList.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DropDownList.as
@@ -19,6 +19,7 @@
 package org.apache.royale.html
 {
     import org.apache.royale.core.ISelectionModel;
+    import org.apache.royale.core.IHasLabelField;
 
     COMPILE::JS
     {
@@ -62,7 +63,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class DropDownList extends Button
+	public class DropDownList extends Button implements IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/ImageAndTextButton.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/ImageAndTextButton.as
index a1f24a8..86b32e4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/ImageAndTextButton.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/ImageAndTextButton.as
@@ -71,7 +71,11 @@
             ImageAndTextModel(model).text = value;
             COMPILE::JS
             {
-                setInnerHTML();
+                if(!textNode){
+                    textNode = document.createTextNode(value) as Text;
+                    element.appendChild(textNode);
+                }
+                textNode.nodeValue = "\xa0" + value;
             }
         }
 
@@ -98,10 +102,16 @@
             ImageAndTextModel(model).image = value;
             COMPILE::JS
             {
-                setInnerHTML();
+                imgElement.src = value;
             }
         }
 
+        COMPILE::JS
+        protected var imgElement:HTMLImageElement;
+        
+        COMPILE::JS
+        protected var textNode:Text;
+
         /**
          * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
          */
@@ -110,20 +120,10 @@
         {
 			addElementToWrapper(this,'button');
             element.setAttribute('type', 'button');
+            imgElement = document.createElement("img") as HTMLImageElement;
+            element.appendChild(imgElement);
             return element;
         }
 
-        /**
-         */
-        COMPILE::JS
-        protected function setInnerHTML():void
-        {
-            var inner:String = '';
-            if (image != null)
-                inner += "<img src='" + image + "'/>";
-            inner += '&nbsp;';
-            inner += text;
-            element.innerHTML = inner;
-        };
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
index 1c5ca92..30a3949 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
@@ -25,6 +25,7 @@
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.utils.sendBeadEvent;
 	import org.apache.royale.core.Bead;
+	import org.apache.royale.core.IHasLabelField;
 
 
     /**
@@ -36,7 +37,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.4
 	 */
-	public class CollectionChangeUpdateForArrayListData extends Bead
+	public class CollectionChangeUpdateForArrayListData extends Bead implements IHasLabelField
 	{
 		/**
 		 *  Constructor
@@ -50,7 +51,19 @@
 		{
 		}
 
-		protected var labelField:String;
+		private var _labelField:String;
+		/**
+		 * Label field
+		 */
+		public function get labelField():String
+		{
+			return _labelField;
+		}
+
+		public function set labelField(value:String):void
+		{
+			_labelField = value;
+		}
 
 		/**
 		 *  @copy org.apache.royale.core.IStrand
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
index dbfcea3..969e6f9 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
@@ -19,6 +19,7 @@
 package org.apache.royale.html.beads
 {
     import org.apache.royale.core.Bead;
+    import org.apache.royale.core.IHasDataField;
 
     /**
      *  The DataFieldProviderBead class is a model that holds dataField used mostly
@@ -29,7 +30,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class DataFieldProviderBead extends Bead
+	public class DataFieldProviderBead extends Bead implements IHasDataField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ITextItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ITextItemRenderer.as
index 792cf7d..126b0e4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ITextItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ITextItemRenderer.as
@@ -18,7 +18,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-    import org.apache.royale.core.IItemRenderer;
     import org.apache.royale.core.ILabelFieldItemRenderer;
     
     /**
@@ -30,7 +29,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface ITextItemRenderer extends IItemRenderer, ILabelFieldItemRenderer
+	public interface ITextItemRenderer extends ILabelFieldItemRenderer
 	{
         /**
          *  The text to be displayed in the item renderer.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/IndexedItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/IndexedItemRendererInitializer.as
index d8d1424..051c110 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/IndexedItemRendererInitializer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/IndexedItemRendererInitializer.as
@@ -26,6 +26,7 @@
 	import org.apache.royale.core.ILabelFieldItemRenderer;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.utils.sendStrandEvent;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  The IndexedItemRendererInitializer class initializes item renderers
@@ -36,7 +37,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.7
 	 */
-	public class IndexedItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer
+	public class IndexedItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer, IHasLabelField
 	{
 		/**
 		 *  constructor.
@@ -51,7 +52,19 @@
 		}
 		
 		protected var dataProviderModel:IDataProviderModel;
-		protected var labelField:String;
+		private var _labelField:String;
+		/**
+		 * Label field
+		 */
+		public function get labelField():String
+		{
+			return _labelField;
+		}
+
+		public function set labelField(value:String):void
+		{
+			_labelField = value;
+		}
 		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
index d9d3508..e07c75d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
@@ -36,6 +36,8 @@
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	import org.apache.royale.utils.sendStrandEvent;
 	import org.apache.royale.core.DispatcherBead;
+	import org.apache.royale.core.IHasLabelField;
+	import org.apache.royale.core.IHasDataField;
 
     [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 	
@@ -51,7 +53,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class VirtualDataItemRendererFactoryBase extends DispatcherBead implements IDataProviderVirtualItemRendererMapper
+	public class VirtualDataItemRendererFactoryBase extends DispatcherBead implements IDataProviderVirtualItemRendererMapper, IHasDataField, IHasLabelField
 	{
         /**
          *  Constructor.
@@ -69,8 +71,32 @@
 		protected var dataProviderModel:IDataProviderModel;
 		protected var dataFieldProvider:DataFieldProviderBead;
 		
-		protected var labelField:String;
-        protected var dataField:String;
+		private var _labelField:String;
+        /**
+         * The label field
+         */
+		public function get labelField():String
+		{
+			return _labelField;
+		}
+
+		public function set labelField(value:String):void
+		{
+			_labelField = value;
+		}
+        private var _dataField:String;
+        /**
+         * The data field
+         */
+        public function get dataField():String
+        {
+        	return _dataField;
+        }
+
+        public function set dataField(value:String):void
+        {
+        	_dataField = value;
+        }
 
         protected var rendererMap:Object;
         
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
index c351076..987e5e8 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.core.DispatcherBead;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  The ArrayListSelectionModel class is a selection model for
@@ -34,7 +35,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ArrayListSelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel
+	public class ArrayListSelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel, IHasLabelField
 	{
 		/**
 		 *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayMultiSelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayMultiSelectionModel.as
index 374b3a6..964471f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayMultiSelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayMultiSelectionModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 			
 	/**
 	 *  The ArrayMultiSelectionModel class is a selection model for
@@ -37,7 +38,7 @@
 	 *  @productversion 0.9.7
 	 */
 
-	public class ArrayMultiSelectionModel extends EventDispatcher implements IMultiSelectionModel, IRollOverModel
+	public class ArrayMultiSelectionModel extends EventDispatcher implements IMultiSelectionModel, IRollOverModel, IHasLabelField
 	{
 		/**
 		 *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
index 1b3c5a5..d0ed122 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
@@ -22,6 +22,7 @@
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.core.IHasLabelField;
 			
     /**
      *  The ArraySelectionModel class is a selection model for
@@ -35,7 +36,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class ArraySelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel
+	public class ArraySelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
index 6da65ea..40ac284 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
@@ -21,6 +21,7 @@
 	import org.apache.royale.core.DispatcherBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.core.IHasLabelField;
 			
     /**
      *  The DataProviderModel class is a model for
@@ -31,7 +32,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class DataProviderModel extends DispatcherBead implements IDataProviderModel
+	public class DataProviderModel extends DispatcherBead implements IDataProviderModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
index 926695c..58a13d4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.IMultiSelectionModel;
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The MultiSelectionCollectionViewModel class is a selection model for
@@ -34,7 +35,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class MultiSelectionCollectionViewModel extends DispatcherBead implements IRollOverModel, IMultiSelectionModel
+	public class MultiSelectionCollectionViewModel extends DispatcherBead implements IRollOverModel, IMultiSelectionModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
index d071619..6b0541b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The SingleSelectionCollectionViewModel class is a selection model for
@@ -34,7 +35,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class SingleSelectionCollectionViewModel extends DispatcherBead implements ISelectionModel, IRollOverModel
+	public class SingleSelectionCollectionViewModel extends DispatcherBead implements ISelectionModel, IRollOverModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/StringSelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/StringSelectionModel.as
index 8662672..c3bb598 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/StringSelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/StringSelectionModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 		
     /**
      *  The StringSelectionModel class is a selection model for
@@ -33,7 +34,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class StringSelectionModel extends EventDispatcher implements ISelectionModel
+	public class StringSelectionModel extends EventDispatcher implements ISelectionModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
index f58fbc1..01f8c1a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
@@ -22,6 +22,7 @@
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.html.List;
+	import org.apache.royale.core.IHasDataField;
 
 	/**
 	 *  The DataGridColumn class is the collection of properties that describe
@@ -35,7 +36,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataGridColumn extends EventDispatcher implements IDataGridColumn
+	public class DataGridColumn extends EventDispatcher implements IDataGridColumn, IHasDataField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataItemRenderer.as
index 074512b..02890b1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataItemRenderer.as
@@ -29,6 +29,7 @@
 		import org.apache.royale.core.IBeadController;
 	}
 	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.core.IHasDataField;
 
 	/**
 	 *  The DataItemRenderer class is the base class for most itemRenderers. This class
@@ -40,7 +41,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataItemRenderer extends UIItemRendererBase
+	public class DataItemRenderer extends UIItemRendererBase implements IHasDataField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/GraphicsItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/GraphicsItemRenderer.as
index 1465794..614397e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/GraphicsItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/GraphicsItemRenderer.as
@@ -26,6 +26,8 @@
 	import org.apache.royale.svg.CompoundGraphic;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
     import org.apache.royale.utils.MXMLDataInterpreter;
+    import org.apache.royale.core.IHasDataField;
+    import org.apache.royale.core.IHasLabelField;
 	
 	/**
 	 *  The GraphicsItemRenderer provides a base class for itemRenderers that use graphics rather than
@@ -36,7 +38,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class GraphicsItemRenderer extends CompoundGraphic implements IItemRenderer
+	public class GraphicsItemRenderer extends CompoundGraphic implements IItemRenderer, IHasDataField, IHasLabelField
 	{
 		/**
 		 *  Constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as
index 7403bcb..db4bdd7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as
@@ -25,9 +25,10 @@
 	COMPILE::JS
 	{
 		import org.apache.royale.core.WrappedHTMLElement;
-        import org.apache.royale.html.util.addElementToWrapper;
+		import org.apache.royale.html.util.addElementToWrapper;
 		import org.apache.royale.core.IBeadController;
 	}
+	import org.apache.royale.core.IHasDataField;
 
 	/**
 	 *  The DataItemRenderer class is the base class for most itemRenderers. This class
@@ -39,7 +40,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class StyledDataItemRenderer extends StyledUIItemRendererBase
+	public class StyledDataItemRenderer extends StyledUIItemRendererBase implements IHasDataField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as
index d4c0146..9f463ed 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.events.Event;
 	import org.apache.royale.utils.MXMLDataInterpreter;
 	import org.apache.royale.core.ILabelFieldItemRenderer;
+	import org.apache.royale.core.IHasLabelField;
 		
 	[DefaultProperty("mxmlContent")]
 
@@ -44,7 +45,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class StyledUIItemRendererBase extends StyledUIBase implements ILabelFieldItemRenderer
+	public class StyledUIItemRendererBase extends StyledUIBase implements ILabelFieldItemRenderer, IHasLabelField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
index 81df983..1c31540 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
@@ -28,6 +28,7 @@
 	import org.apache.royale.html.beads.ITextItemRenderer;
 	import org.apache.royale.events.ItemClickedEvent;
 	import org.apache.royale.html.util.getLabelFromData;
+	import org.apache.royale.core.IHasLabelField;
 
 	COMPILE::JS
 	{
@@ -43,7 +44,7 @@
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
 	 */
-	public class TextButtonItemRenderer extends TextButton implements ITextItemRenderer
+	public class TextButtonItemRenderer extends TextButton implements ITextItemRenderer, IHasLabelField
 	{
 		public function TextButtonItemRenderer()
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as
index 1d04f33..5efc71f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as
@@ -40,6 +40,7 @@
     import org.apache.royale.geom.Rectangle;
     import org.apache.royale.html.beads.ITextItemRenderer;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.IHasLabelField;
 	
 	/**
 	 *  The TextFieldItemRenderer class provides a org.apache.royale.html.TextField as an itemRenderer.
@@ -49,7 +50,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class TextFieldItemRenderer extends CSSTextField implements ITextItemRenderer, IStrand, IUIBase, IRoyaleElement
+	public class TextFieldItemRenderer extends CSSTextField implements ITextItemRenderer, IStrand, IUIBase, IRoyaleElement, IHasLabelField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
index 798d46e..617591e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.events.Event;
 	import org.apache.royale.utils.MXMLDataInterpreter;
 	import org.apache.royale.core.ILabelFieldItemRenderer;
+	import org.apache.royale.core.IHasLabelField;
 		
 	[DefaultProperty("mxmlContent")]
 
@@ -46,7 +47,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class UIItemRendererBase extends UIBase implements ILabelFieldItemRenderer
+	public class UIItemRendererBase extends UIBase implements ILabelFieldItemRenderer, IHasLabelField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as
index f5853b4..18aa873 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/util/getLabelFromData.as
@@ -19,21 +19,51 @@
 package org.apache.royale.html.util
 {
 
+    import org.apache.royale.core.IHasLabelField;
+    import org.apache.royale.core.IHasDataField;
+    import org.apache.royale.core.ILabeledData;
+
     /**
+     *  Utility function to get a label string from a value object
+     *  Strings are just returned as-is
+     *  The most effective way to use the function for data is to use `ILabeledData`.
+     *  If your data is an instantiated class, always implement `ILabeledData`
+     *  and returns the correct value with the `label` getter.
+     *  This ensures that it will work even after full minimization.
+     *  If you are using plain objects (i.e. using `JSON.parse()` or similar) it will use the following logic flow:
+     *  First it tries a `labelField`
+     *  Then the `dataField`
+     *  If both of those fail, it tries a `label` property
+     *  If all else fails, it just converts the object to a string
+     * 
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.2
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.3
-     * Utility function to get a label string from a value object
+     *  @royaleignorecoercion org.apache.royale.core.IHasLabelField
+     *  @royaleignorecoercion org.apache.royale.core.IHasDataField
+     *  @royaleignorecoercion org.apache.royale.core.ILabeledData
      */
     public function getLabelFromData(obj:Object,data:Object):String
     {
         // slightly more code, but we bail early if it's a string which is often
         if (data is String) return "" + data;
         if(!data) return "";
+        if(data is ILabeledData) return (data as ILabeledData).label;
+        if (obj is IHasLabelField &&
+            (obj as IHasLabelField).labelField &&
+            data[(obj as IHasLabelField).labelField] != null)
+        {
+            return "" + data[(obj as IHasLabelField).labelField];
+        } 
+            
+        if (obj is IHasDataField &&
+            (obj as IHasDataField).dataField &&
+            data[(obj as IHasDataField).dataField] != null)
+        {
+            return "" + data[(obj as IHasDataField).dataField];
+        }
 
-        if (obj["labelField"]) return "" + data[obj["labelField"]];
-        if (obj["dataField"]) return "" + data[obj["dataField"]];
         var label:String = data["label"];
         if(label != null){
             return label;
diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index dd088eb..7a1dd31 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -34,6 +34,7 @@
 	import org.apache.royale.core.LayoutBase; LayoutBase;
 	import org.apache.royale.core.ContainerBaseStrandChildren; ContainerBaseStrandChildren;
 	import org.apache.royale.core.ApplicationBase; ApplicationBase;
+	import org.apache.royale.core.ILabeledData; ILabeledData;
 	import org.apache.royale.core.IList; IList;
 	import org.apache.royale.core.IIcon; IIcon;
 	import org.apache.royale.core.ITextButton; ITextButton;
@@ -290,6 +291,8 @@
 	import org.apache.royale.core.IDataGridHeader; IDataGridHeader;
 	import org.apache.royale.core.IDataGridPresentationModel; IDataGridPresentationModel;
 	import org.apache.royale.core.IDateChooserModelWithChangeCheck; IDateChooserModelWithChangeCheck;
+	import org.apache.royale.core.IHasDataField; IHasDataField;
+	import org.apache.royale.core.IHasLabelField; IHasLabelField;
 	import org.apache.royale.core.ParentDocumentBead; ParentDocumentBead;
 	import org.apache.royale.core.ItemRendererOwnerViewBead; ItemRendererOwnerViewBead;
 	import org.apache.royale.core.TransformBeadBase; TransformBeadBase;
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
index 2386007..f6ee842 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
@@ -195,8 +195,11 @@
                 e = converter(nativeEvent,eventObject);
             else
             {
-                e = new org.apache.royale.events.BrowserEvent();
-                e.wrapEvent(eventObject);
+                e = EventUtils.retrieveEvent(nativeEvent) as IBrowserEvent;
+                if (e == nativeEvent) {
+                    e = new org.apache.royale.events.BrowserEvent();
+                    e.wrapEvent(eventObject);
+                }
             }
 			return ElementWrapper.googFireListener(listener, e);
 		}
@@ -365,7 +368,9 @@
                 eventType = e.type;
                 if (ElementEvents.elementEvents[eventType])
                 {
-                    e = EventUtils.createEvent(eventType, e["bubbles"]);
+                    var orig:Object = e;
+                    e = EventUtils.tagNativeEvent(EventUtils.createEvent(eventType, e["bubbles"]), orig);
+                    orig.target = orig.currentTarget = this;
                 }
             }
             var source:Object = this.getActualDispatcher_(eventType);
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasDataField.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasDataField.as
new file mode 100644
index 0000000..19d6ca4
--- /dev/null
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasDataField.as
@@ -0,0 +1,27 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.core
+{
+	public interface IHasDataField
+	{
+		{
+			function get dataField():String;
+		}
+	}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasLabelField.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasLabelField.as
new file mode 100644
index 0000000..16c25bf
--- /dev/null
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IHasLabelField.as
@@ -0,0 +1,27 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.core
+{
+	public interface IHasLabelField
+	{
+		{
+			function get labelField():String;
+		}
+	}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabelFieldItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabelFieldItemRenderer.as
index 2d63ff9..9ffc7af 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabelFieldItemRenderer.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabelFieldItemRenderer.as
@@ -27,7 +27,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.7
      */
-	public interface ILabelFieldItemRenderer extends IIndexedItemRenderer
+	public interface ILabelFieldItemRenderer extends IIndexedItemRenderer, IHasLabelField
 	{
         /**
          *  The property on the data item that the item renderer
@@ -38,7 +38,6 @@
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.9.7
          */
-        function get labelField():String;
         function set labelField(value:String):void;        
 	}
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabeledData.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabeledData.as
new file mode 100644
index 0000000..d449f42
--- /dev/null
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ILabeledData.as
@@ -0,0 +1,25 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.core
+{
+	public interface ILabeledData
+	{
+		function get label():String;
+	}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/EventUtils.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/EventUtils.as
index acf0b40..dce7df8 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/EventUtils.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/EventUtils.as
@@ -21,6 +21,8 @@
 COMPILE::JS
 {
     import org.apache.royale.conversions.createEventInit;
+    import goog.events.Event;
+    import org.apache.royale.events.getTargetWrapper;
     import window.Event;
 }
 
@@ -31,6 +33,8 @@
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
+     *
+     *  @royalesupressexport
 	 */
     COMPILE::JS
 	public class EventUtils
@@ -57,5 +61,36 @@
 
            return customEvent;
        }
+
+        /**
+         * A way to let a Royale Event 'hitch a ride' on a native browser event.
+         *  Encapsulates the tagging/untagging support in this Utils class
+         * @param nativeEvent the native event to tag with the Royale Event
+         * @param royaleEvent the Royale Event to accompany the native event (expected as a org.apache.royale.events.Event here)
+         * @return the native event passed it
+         */
+       public static function tagNativeEvent(nativeEvent:Object, royaleEvent:Object):Object{
+           nativeEvent['_RYL_ORIG'] = royaleEvent;
+           return nativeEvent;
+       }
+
+        /**
+         * A way to retrieve a RoyaleEvent from a native browser event,
+         * if present. Encapsulates the tagging/untagging support in this Utils class
+         * @param nativeEvent
+         * @return the resolved event instance
+         *
+         * @royaleignorecoercion goog.events.Event
+         */
+        public static function retrieveEvent(nativeEvent:Object):Object{
+            if (nativeEvent['_RYL_ORIG']) {
+                var rylEvt:goog.events.Event = nativeEvent['_RYL_ORIG'] as goog.events.Event;
+                //retrieve it with the currentTarget updated
+                rylEvt.currentTarget = getTargetWrapper(nativeEvent.currentTarget)
+                return rylEvt;
+            }
+            return nativeEvent;
+        }
+
     }
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/PointUtils.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/PointUtils.as
index 139a4cd..e502e21 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/PointUtils.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/PointUtils.as
@@ -27,6 +27,8 @@
 
     import org.apache.royale.core.IUIBase;
     import org.apache.royale.geom.Point;
+    import org.apache.royale.core.IRenderedObject;
+    import org.apache.royale.debugging.assert;
 
 	/**
 	 *  The PointUtils class is a collection of static functions that convert
@@ -44,11 +46,13 @@
 		 */
 		public function PointUtils()
 		{
-			throw new Error("PointUtils should not be instantiated.");
+			assert(false,"PointUtils should not be instantiated.");
 		}
 
 		/**
 		 *  Converts a point from global coordinates to local coordinates
+         *  Works with IRenderedObject or any object that has an element property.
+         *  Also works with an HTMLElement.
 		 *
 		 *  @param point The point being converted.
 		 *  @param local The component used as reference for the conversion.
@@ -58,6 +62,7 @@
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
          *  @royaleignorecoercion HTMLElement
+         *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
 		 */
 		public static function globalToLocal( pt:org.apache.royale.geom.Point, local:Object ):org.apache.royale.geom.Point
 		{
@@ -70,7 +75,16 @@
             {
                 var x:Number = pt.x;
                 var y:Number = pt.y;
-                var element:HTMLElement = local.element as HTMLElement;
+                var element:HTMLElement;
+                if(local.getBoundingClientRect){
+                    element = local as HTMLElement;
+                } else if(local.element){
+                    element = local.element as HTMLElement;
+                } else if(local is IRenderedObject){
+                    element = (local as IRenderedObject).element;
+                } else {
+                    assert(false,"Invalid object used for PointUtils.globalToLocal")
+                }
 				if ( element.getBoundingClientRect ) {// TODO take scrollbar widths into account
 					var rect:Object = element.getBoundingClientRect();
 					x = x - rect.left - window.pageXOffset;//window.scrollX doesn't work on IE11
@@ -96,6 +110,8 @@
 
         /**
          *  Converts a point from local coordinates to global coordinates
+         *  Works with IRenderedObject or any object that has an element property.
+         *  Also works with an HTMLElement.
          *
          *  @param point The point being converted.
          *  @param local The component used as reference for the conversion.
@@ -105,6 +121,7 @@
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          *  @royaleignorecoercion HTMLElement
+         *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
          */
         public static function localToGlobal( pt:org.apache.royale.geom.Point, local:Object ):org.apache.royale.geom.Point
         {
@@ -121,7 +138,16 @@
             {
                 var x:Number = pt.x;
                 var y:Number = pt.y;
-                var element:HTMLElement = local.element as HTMLElement;
+                var element:HTMLElement;
+                if(local.getBoundingClientRect){
+                    element = local as HTMLElement;
+                } else if(local.element){
+                    element = local.element as HTMLElement;
+                } else if(local is IRenderedObject){
+                    element = (local as IRenderedObject).element;
+                } else {
+                    assert(false,"Invalid object used for PointUtils.localToGlobal")
+                }
                 if ( element.getBoundingClientRect ) {// TODO take scrollbar widths into account
                 	var rect:Object = element.getBoundingClientRect();
 					x = rect.left + x + window.pageXOffset;//window.scrollX doesn't work on IE11
diff --git a/frameworks/projects/Core/src/test/royale/FlexUnitRoyaleApplication.mxml b/frameworks/projects/Core/src/test/royale/FlexUnitRoyaleApplication.mxml
index a736f2b..0687904 100644
--- a/frameworks/projects/Core/src/test/royale/FlexUnitRoyaleApplication.mxml
+++ b/frameworks/projects/Core/src/test/royale/FlexUnitRoyaleApplication.mxml
@@ -40,6 +40,16 @@
             import org.apache.royale.test.listeners.BrowserConsoleListener;
             import org.apache.royale.test.Runtime;
 
+
+            private static var _instance:FlexUnitRoyaleApplication;
+            public static function getInstance():FlexUnitRoyaleApplication{
+                return _instance;
+            }
+
+            public function get eventsTestParent():Group{
+                return eventBubblingParent;
+            }
+
             //account for swf version variance in some test results due to fixed player bugs etc
             public function getSwfVersion():uint{
                 COMPILE::SWF{
@@ -71,6 +81,7 @@
             public function runTests():void
             {
                 Runtime.swfVersion = getSwfVersion();
+                _instance = this;
                 if (runLocal()) {
                     core.addListener(new BrowserConsoleListener());
                 } else{
@@ -94,5 +105,10 @@
         <!-- for such a simple app, we just set values to an empty array so it thinks it doesn't have any values -->
         <js:SimpleValuesImpl values="[]"/>
     </js:valuesImpl>
+    <js:initialView>
+        <js:View>
+            <js:Group id="eventBubblingParent" />
+        </js:View>
+    </js:initialView>
 
 </js:Application>
diff --git a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as b/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as
index 9441daf..f7f3ca1 100644
--- a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as
+++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as
@@ -43,5 +43,7 @@
         public var keyboardEventConverterTest:KeyboardEventConverterTest;
         public var stringUtilsTest:StringUtilsTest;
         public var sanitizerTest:SanitizeTest;
+        public var eventsTest:EventsTest;
+
     }
 }
diff --git a/frameworks/projects/Core/src/test/royale/flexUnitTests/EventsTest.as b/frameworks/projects/Core/src/test/royale/flexUnitTests/EventsTest.as
new file mode 100644
index 0000000..753cd5e
--- /dev/null
+++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/EventsTest.as
@@ -0,0 +1,119 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+    import org.apache.royale.core.IParent;
+    import org.apache.royale.utils.string.*;
+    import org.apache.royale.test.asserts.*;
+
+    import org.apache.royale.html.Group;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.events.Event;
+    
+    public class EventsTest
+    {
+
+        private static var bubblingTopMostGroup:Group;
+        private static var deepestInstance:UIBase;
+        private static function createBubblingChain():void{
+            var currentParent:IParent = bubblingTopMostGroup;
+            var nesting:uint=10;
+            while (nesting) {
+                var child:UIBase = new UIBase();
+                child.id = 'nested_'+(11-nesting);
+                currentParent.addElement(child);
+                nesting--;
+                currentParent = child;
+            }
+            deepestInstance = child;
+        }
+
+
+        [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+        
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            bubblingTopMostGroup = FlexUnitRoyaleApplication.getInstance().eventsTestParent;
+            createBubblingChain();
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+            bubblingTopMostGroup.removeElement(bubblingTopMostGroup.getElementAt(0));
+            deepestInstance = null;
+        }
+
+
+        
+        [Test]
+        public function testDispatchNonBubblingChangeResult():void{
+            var e:org.apache.royale.events.Event =  new org.apache.royale.events.Event(org.apache.royale.events.Event.CHANGE);
+            var received:org.apache.royale.events.Event ;
+            var receivedCurrentTarget:UIBase;
+            var receivedTarget:UIBase;
+            function localListener(e:org.apache.royale.events.Event):void{
+                received = e;
+                receivedTarget = e.target as UIBase;
+                receivedCurrentTarget = e.currentTarget as UIBase;
+            }
+            deepestInstance.addEventListener(org.apache.royale.events.Event.CHANGE,localListener);
+            deepestInstance.dispatchEvent(e);
+            deepestInstance.removeEventListener(org.apache.royale.events.Event.CHANGE,localListener);
+
+
+            assertEquals(received,e, 'the received event should be the same as the dispatched event');
+            assertEquals(deepestInstance,receivedTarget, 'the bubbling event currentTarget is wrong');
+            assertEquals(deepestInstance,receivedCurrentTarget, 'the bubbling event currentTarget is wrong');
+        }
+
+        [Test]
+        public function testDispatchBubblingChangeResult():void{
+            var e:org.apache.royale.events.Event =  new org.apache.royale.events.Event(org.apache.royale.events.Event.CHANGE,true);
+            var received:org.apache.royale.events.Event ;
+            var receivedCurrentTarget:UIBase;
+            var receivedTarget:UIBase;
+            function localListener(e:org.apache.royale.events.Event):void{
+                received = e;
+                receivedTarget = e.target as UIBase;
+                receivedCurrentTarget = e.currentTarget as UIBase;
+
+            }
+            bubblingTopMostGroup.addEventListener(org.apache.royale.events.Event.CHANGE,localListener);
+            deepestInstance.dispatchEvent(e);
+            bubblingTopMostGroup.removeEventListener(org.apache.royale.events.Event.CHANGE,localListener);
+
+
+            assertEquals(received,e, 'the received event should be the same as the dispatched event');
+            assertEquals(deepestInstance,receivedTarget, 'the bubbling event currentTarget is wrong');
+            assertEquals(bubblingTopMostGroup,receivedCurrentTarget, 'the bubbling event currentTarget is wrong');
+        }
+
+
+    }
+}
diff --git a/frameworks/projects/ExternsJS/src/main/config/compile-swf-config.xml b/frameworks/projects/ExternsJS/src/main/config/compile-swf-config.xml
index 8981130..390974b 100644
--- a/frameworks/projects/ExternsJS/src/main/config/compile-swf-config.xml
+++ b/frameworks/projects/ExternsJS/src/main/config/compile-swf-config.xml
@@ -78,10 +78,6 @@
                 <uri>library://ns.apache.org/royale/externsjs</uri>
                 <manifest>../resources/externsjs-manifest.xml</manifest>
             </namespace>
-            <namespace>
-                <uri>library://ns.apache.org/royale/externsjs</uri>
-                <manifest>../resources/externsjs-as-manifest.xml</manifest>
-            </namespace>
         </namespaces>
         
         <source-path>
diff --git a/frameworks/projects/ExternsJS/src/main/resources/externsjs-as-manifest.xml b/frameworks/projects/ExternsJS/src/main/resources/externsjs-as-manifest.xml
deleted file mode 100644
index 2141c30..0000000
--- a/frameworks/projects/ExternsJS/src/main/resources/externsjs-as-manifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
-  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.
-
--->
-
-
-<componentPackage>
-
-   
-</componentPackage>
diff --git a/frameworks/projects/ExternsJS/src/main/royale/org/apache/royale/externsjs/inspiretree/InspireTreeBasicControl.as b/frameworks/projects/ExternsJS/src/main/royale/org/apache/royale/externsjs/inspiretree/InspireTreeBasicControl.as
index 3e7a079..03c2a2e 100644
--- a/frameworks/projects/ExternsJS/src/main/royale/org/apache/royale/externsjs/inspiretree/InspireTreeBasicControl.as
+++ b/frameworks/projects/ExternsJS/src/main/royale/org/apache/royale/externsjs/inspiretree/InspireTreeBasicControl.as
@@ -18,34 +18,35 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.externsjs.inspiretree
 {
-    COMPILE::SWF {
-    import flash.events.Event;
-    }
+	COMPILE::SWF {
+	import flash.events.Event;
+	}
 
 	COMPILE::JS
 	{
 		import org.apache.royale.externsjs.inspiretree.InspireTree;
 		import org.apache.royale.externsjs.inspiretree.InspireTreeDOM;
-    	import org.apache.royale.core.IDataProviderModel;
-    	import org.apache.royale.core.ISelectionModel;
+		import org.apache.royale.core.IDataProviderModel;
+		import org.apache.royale.core.ISelectionModel;
 		import org.apache.royale.core.StyledUIBase;
-        import org.apache.royale.core.WrappedHTMLElement;
-    	import org.apache.royale.events.Event;
-        import org.apache.royale.html.util.addElementToWrapper;
-    	import org.apache.royale.externsjs.inspiretree.beads.models.InspireTreeModel;
-    	import org.apache.royale.externsjs.inspiretree.vos.ItemTreeNode;
-    	import org.apache.royale.core.StyledUIBase;
+		import org.apache.royale.core.WrappedHTMLElement;
+		import org.apache.royale.events.Event;
+		import org.apache.royale.html.util.addElementToWrapper;
+		import org.apache.royale.externsjs.inspiretree.beads.models.InspireTreeModel;
+		import org.apache.royale.externsjs.inspiretree.vos.ItemTreeNode;
 	}
-    /**
-     *  It triggers just before launching the creation.  
+	import org.apache.royale.core.IHasLabelField;
+
+	/**
+	 *  It triggers just before launching the creation.  
 	 * 
 	 *  It can be captured to make adjustments before creating the js instance.
 	 *  (See InspireTreePaginateBead)
-     */
+	 */
 	[Event(name="onBeforeCreation", type="org.apache.royale.events.Event")]
-    /**
-     *  Indicates that the creation is complete.  
-     */
+	/**
+	 *  Indicates that the creation is complete.  
+	 */
 	[Event(name="onCreationComplete", type="org.apache.royale.events.Event")]
 	/*
 
@@ -53,31 +54,31 @@
 	[Event(name="onPrepareTreeDataComplete", type="org.apache.royale.events.Event")]
 
 	COMPILE::JS
-	public class InspireTreeBasicControl extends StyledUIBase implements IInspireTree
+	public class InspireTreeBasicControl extends StyledUIBase implements IInspireTree, IHasLabelField
 	{
 		/**
 		 * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
 		 * @royaleignorecoercion org.apache.royale.html.util.addElementToWrapper
-         */
-        override protected function createElement():WrappedHTMLElement
-        {
+		 */
+		override protected function createElement():WrappedHTMLElement
+		{
 			addElementToWrapper(this, 'div');
-            return element;
-        }
-        /**
-         *  Constructor.
-         */
+			return element;
+		}
+		/**
+		 *  Constructor.
+		 */
 		public function InspireTreeBasicControl()
 		{
 			super();			
 			//typeNames = "inspiretree";
-            addEventListener("beadsAdded", beadsAddedHandler);
-        }
+			addEventListener("beadsAdded", beadsAddedHandler);
+		}
 
-        private function beadsAddedHandler(event:Event):void
-        {
+		private function beadsAddedHandler(event:Event):void
+		{
 			removeEventListener("beadsAdded", beadsAddedHandler);
-        }
+		}
 
 		override public function addedToParent():void
 		{
@@ -96,7 +97,7 @@
 		public function set uid(value:String):void{ _uid = value; }
 
 		private var _initialized:Boolean = false;
-        public function isInitialized():Boolean { return _initialized ? true:false;};
+		public function isInitialized():Boolean { return _initialized ? true:false;};
 
 		private var _jsTree:InspireTree;
 		public function get jsTree():InspireTree{ return _jsTree; }
@@ -107,7 +108,7 @@
 
 		// Init ---------------------------------------- Data configuration [wip] -------------------------------------------------
 
-        [Bindable("labelFieldChanged")]
+		[Bindable("labelFieldChanged")]
 		public function get labelField():String
 		{
 			return IDataProviderModel(model).labelField;
@@ -117,7 +118,7 @@
 		 */
 		public function set labelField(value:String):void
 		{
-            IDataProviderModel(model).labelField = value;
+			IDataProviderModel(model).labelField = value;
 		}
 
 		/**
@@ -131,7 +132,7 @@
 		public function get boundField():String { return InspireTreeModel(model).boundField; }
 		public function set boundField(value:String):void{ InspireTreeModel(model).boundField = value; }
 
-        [Bindable("dataProviderChanged")]
+		[Bindable("dataProviderChanged")]
 		public function get dataProvider():Object
 		{
 			return IDataProviderModel(model).dataProvider;
@@ -145,7 +146,7 @@
 			updateDataViewTree();            
 		}
 
-        [Bindable("selectionChanged")]
+		[Bindable("selectionChanged")]
 		public function get selectedIndex():int
 		{
 			return ISelectionModel(model).selectedIndex;
@@ -158,7 +159,7 @@
 			ISelectionModel(model).selectedIndex = value;
 		}
 
-        [Bindable("selectionChanged")]
+		[Bindable("selectionChanged")]
 		public function get selectedItem():Object
 		{
 			return ISelectionModel(model).selectedItem;
@@ -168,7 +169,7 @@
 			ISelectionModel(model).selectedItem = value;
 		}
 
-        //[Bindable("allowDragAndDropChanged")]
+		//[Bindable("allowDragAndDropChanged")]
 		/**
 		 * Allow Drag and Drop
 		 */
@@ -183,23 +184,23 @@
 		/**
 		 * Function to obtain the description of the parent nodes.
 		 * <p>The <code>labelFunctionParent</code> property takes a reference to a function. 
-     	 * The function takes a single argument which is the item in the data provider and returns a String:</p>
-    	 * 
-		 *  <pre>myLabelFunction(item:Object):String</pre>
-      	 * 
-     	 *  @param item The data item. Null items return the empty string. 
-		 */
+		 * The function takes a single argument which is the item in the data provider and returns a String:</p>
+			* 
+			*  <pre>myLabelFunction(item:Object):String</pre>
+			* 
+			*  @param item The data item. Null items return the empty string. 
+			*/
 		public function get labelFunctionParent():Function{ return InspireTreeModel(model).labelFunctionParent; }
 		public function set labelFunctionParent(value:Function):void{ InspireTreeModel(model).labelFunctionParent = value; }
 		/**
 		 * Function to obtain the description of the parent nodes.
 		 * <p>The <code>labelFunctionChild</code> property takes a reference to a function. 
-     	 * The function takes a single argument which is the item in the data provider and returns a String:</p>
-    	 * 
-		 *  <pre>myLabelFunction(item:Object):String</pre>
-      	 * 
-     	 *  @param item The data item. Null items return the empty string. 
-		 */
+		 * The function takes a single argument which is the item in the data provider and returns a String:</p>
+			* 
+			*  <pre>myLabelFunction(item:Object):String</pre>
+			* 
+			*  @param item The data item. Null items return the empty string. 
+			*/
 		public function get labelFunctionChild():Function { return InspireTreeModel(model).labelFunctionChild; }
 		public function set labelFunctionChild(value:Function):void{ InspireTreeModel(model).labelFunctionChild = value; }
 
@@ -208,7 +209,7 @@
 			// The dpArray should be sorted according to the desired display
 			var localdataProviderTree:Array = new Array();
 			for (var idxGen:int=0; idxGen < dpArray.length; idxGen++)
-        	{
+			{
 				var itemGroup:Object = new ItemTreeNode();
 				itemGroup.text = labelFunctionParent(dpArray[idxGen]);
 
@@ -241,18 +242,18 @@
 
 		
 		public function updateDataViewTree():void
-        { 
+		{ 
 			if(!_initialized)
 				return;
 
 			jsTree.reload();
-        }
+		}
 		/**
 		 * Recreate the InspireTree instance with the current options.
 		 */
 		public function reCreateViewTree(onlyView:Boolean=false):void
 		{			
-            dispatchEvent(new Event("onBeforeCreation"));
+			dispatchEvent(new Event("onBeforeCreation"));
 
 			//if(!onlyView || !jsTree)
 				jsTree = new InspireTree(InspireTreeModel(model).configOption);
@@ -261,7 +262,7 @@
 
 			uid = element.getAttribute('data-uid');
 			trace(uid);
-            dispatchEvent(new Event("onCreationComplete"));
+			dispatchEvent(new Event("onCreationComplete"));
 		}
 		
 	}	
@@ -273,5 +274,4 @@
 		{
 		}
 	}
-	
 }
\ No newline at end of file
diff --git a/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication-config.xml b/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication-config.xml
new file mode 100644
index 0000000..de7acad
--- /dev/null
+++ b/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication-config.xml
@@ -0,0 +1,111 @@
+<!--
+
+  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.
+
+-->
+<royale-config>
+
+    <compiler>
+        <accessible>false</accessible>
+        
+        <targets>
+            <target>SWF</target>
+        </targets>
+        <strict-xml>true</strict-xml>
+
+        <external-library-path>
+            <path-element>{playerglobalHome}/{targetPlayerMajorVersion}.{targetPlayerMinorVersion}/playerglobal.swc</path-element>
+        </external-library-path>
+        
+        <js-external-library-path>
+            <path-element>../../../../../../js/libs/js.swc</path-element>
+            <path-element>../../../../../../js/libs/gcl.swc</path-element>
+        </js-external-library-path>
+        
+        <library-path>
+            <path-element>../../../../../libs/Basic.swc</path-element>
+            <path-element>../../../../../libs/Binding.swc</path-element>
+            <path-element>../../../../../libs/Core.swc</path-element>
+            <path-element>../../../../../libs/Graphics.swc</path-element>
+            <path-element>../../../../../libs/Collections.swc</path-element>
+            <path-element>../../../../../libs/Language.swc</path-element>
+            <path-element>../../../../../libs/Reflection.swc</path-element>
+            <path-element>../../../../../libs/ExternsJS.swc</path-element>
+            <path-element>../../../../../libs/RoyaleUnit.swc</path-element>
+        </library-path>
+        
+        <js-library-path>
+            <path-element>../../../../../js/libs/BasicJS.swc</path-element>
+            <path-element>../../../../../js/libs/BindingJS.swc</path-element>
+            <path-element>../../../../../js/libs/CoreJS.swc</path-element>
+            <path-element>../../../../../js/libs/GraphicsJS.swc</path-element>
+            <path-element>../../../../../js/libs/CollectionsJS.swc</path-element>
+            <path-element>../../../../../js/libs/LanguageJS.swc</path-element>
+            <path-element>../../../../../js/libs/ReflectionJS.swc</path-element>
+            <path-element>../../../../../js/libs/ExternsJSJS.swc</path-element>
+            <path-element>../../../../../js/libs/RoyaleUnitJS.swc</path-element>
+        </js-library-path>
+
+        <allow-subclass-overrides>true</allow-subclass-overrides>
+
+        <mxml>
+            <children-as-data>true</children-as-data>
+        </mxml>
+        <binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event>
+        <binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind>
+        <binding-value-change-event-type>valueChange</binding-value-change-event-type>
+        <fxg-base-class>flash.display.Sprite</fxg-base-class>
+
+        <keep-as3-metadata>
+          <name>Bindable</name>
+          <name>Managed</name>
+          <name>ChangeEvent</name>
+          <name>NonCommittingChangeEvent</name>
+          <name>Transient</name>
+          <name>SWFOverride</name>
+
+          <!-- RoyaleUnit -->
+          <name>Test</name>
+          <name>Before</name>
+          <name>After</name>
+          <name>BeforeClass</name>
+          <name>AfterClass</name>
+          <name>Ignore</name>
+          <name>Suite</name>
+          <name>RunWith</name>
+        </keep-as3-metadata>
+    
+        <locale/>
+        
+        <library-path/>
+
+        <namespaces>
+            <namespace>
+                <uri>http://ns.adobe.com/mxml/2009</uri>
+                <manifest>../../../../../mxml-2009-manifest.xml</manifest>
+            </namespace>
+            <!-- <namespace>
+                <uri>library://ns.apache.org/royale/basic</uri>
+                <manifest>../../main/resources/basic-manifest.xml</manifest>
+            </namespace> -->
+        </namespaces>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <target-player>${playerglobal.version}</target-player>
+
+</royale-config>
diff --git a/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication.mxml b/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication.mxml
new file mode 100644
index 0000000..b902823
--- /dev/null
+++ b/frameworks/projects/ExternsJS/src/test/royale/FlexUnitRoyaleApplication.mxml
@@ -0,0 +1,114 @@
+<?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.
+
+-->
+
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+                   xmlns:js="library://ns.apache.org/royale/basic" 
+                   xmlns:test="org.apache.royale.test.*" 
+                   applicationComplete="runTests()"
+                   >
+    <fx:Declarations>
+        <test:RoyaleUnitCore id="core"/>
+    </fx:Declarations>
+    <fx:Script>
+        <![CDATA[
+            COMPILE::SWF
+            {
+                import flash.system.fscommand;
+            }
+
+            import flexUnitTests.ExternsJSTester;
+            
+            import org.apache.royale.events.Event;
+            import org.apache.royale.test.listeners.CIListener;
+            import org.apache.royale.test.listeners.BrowserConsoleListener;
+            import org.apache.royale.test.Runtime;
+
+
+            private static var _instance:FlexUnitRoyaleApplication;
+            public static function getInstance():FlexUnitRoyaleApplication{
+                return _instance;
+            }
+
+            public function get eventsTestParent():Group{
+                return eventBubblingParent;
+            }
+
+            //account for swf version variance in some test results due to fixed player bugs etc
+            public function getSwfVersion():uint{
+                COMPILE::SWF{
+                    return this.stage.loaderInfo.bytes[3];
+
+                }
+                return 0;
+            }
+
+            public function runLocal():Boolean{
+                var ret:Boolean = false;
+                COMPILE::JS{
+                    ret = window.location.search.indexOf('local')!= -1;
+                    if (!ret) {
+                        console.log('For javascript you can run this locally with console output for debugging purposes, using "?local" appended to the url.\nIt may not work for all browsers with file:// protocol (works with Chrome), in which case you need a local http server')
+                    }
+                }
+                return ret
+            }
+
+            public function getPlayerVersion():String{
+                COMPILE::SWF{
+                    import flash.system.Capabilities;
+                    return Capabilities.version;
+                }
+                return '';
+            }
+
+            public function runTests():void
+            {
+                Runtime.swfVersion = getSwfVersion();
+                _instance = this;
+                if (runLocal()) {
+                    core.addListener(new BrowserConsoleListener());
+                } else{
+                    core.addListener(new CIListener());
+                }
+                core.addEventListener(Event.COMPLETE, core_completeHandler);
+                core.runClasses(ExternsJSTester);
+            }
+
+            private function core_completeHandler(event:Event):void
+            {
+                COMPILE::SWF
+                {
+                    fscommand("quit");
+                }
+            }
+            
+        ]]>
+    </fx:Script>
+    <js:valuesImpl>
+        <!-- for such a simple app, we just set values to an empty array so it thinks it doesn't have any values -->
+        <js:SimpleValuesImpl values="[]"/>
+    </js:valuesImpl>
+    <js:initialView>
+        <js:View>
+            <js:Group id="eventBubblingParent" />
+        </js:View>
+    </js:initialView>
+
+</js:Application>
diff --git a/frameworks/projects/ExternsJS/src/test/royale/build.xml b/frameworks/projects/ExternsJS/src/test/royale/build.xml
new file mode 100644
index 0000000..d128b87
--- /dev/null
+++ b/frameworks/projects/ExternsJS/src/test/royale/build.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<project name="ExternsJS.test" default="main" basedir=".">
+    <property name="ROYALE_HOME" location="../../../../../.."/>
+    
+    <property file="${ROYALE_HOME}/env.properties"/>
+    <property environment="env"/>
+    <property file="${ROYALE_HOME}/local.properties"/>
+    <property file="${ROYALE_HOME}/build.properties"/>
+    <property name="ROYALE_HOME" value="${env.ROYALE_HOME}"/>
+    <property name="ROYALE_SWF_COMPILER_HOME" value="${env.ROYALE_SWF_COMPILER_HOME}"/>
+    <property name="target.name" value="Core-${release.version}.swc" />
+
+    <property name="report.dir" value="${basedir}/out" />
+
+    <target name="main" depends="clean,compile,test" description="Clean test of ${target.name}">
+    </target>
+    
+    <target name="clean">
+        <delete failonerror="false">
+            <fileset dir="${basedir}">
+                <include name="FlexUnitRoyaleApplication.swf"/>
+            </fileset>
+        </delete>
+        <delete failonerror="false" includeemptydirs="true">
+            <fileset dir="${report.dir}">
+                <include name="**/**"/>
+            </fileset>
+        </delete>
+    </target>
+    
+    <path id="lib.path">
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="compiler-royaleTasks.jar"/>
+      <fileset dir="${ROYALE_COMPILER_HOME}/lib" includes="royaleUnitTasks.jar"/>
+    </path>
+
+    <target name="compile" description="Compiles FlexUnitRoyaleApplication.swf">
+        <echo message="Compiling FlexUnitRoyaleApplication.swf"/>
+        <echo message="ROYALE_HOME: ${ROYALE_HOME}"/>
+        <echo message="ROYALE_SWF_COMPILER_HOME: ${ROYALE_SWF_COMPILER_HOME}"/>
+        <echo message="playerglobal.version: ${playerglobal.version}"/>
+
+        <!-- Load the <compc> task. We can't do this at the <project> level -->
+        <!-- because targets that run before flexTasks.jar gets built would fail. -->
+        <taskdef resource="flexTasks.tasks" classpathref="lib.path"/>
+        <!--
+            Link in the classes (and their dependencies) for the MXML tags
+            listed in this project's manifest.xml.
+            Also link the additional classes (and their dependencies)
+            listed in RoyaleUIClasses.as,
+            because these aren't referenced by the manifest classes.
+            Keep the standard metadata when compiling.
+            Include the appropriate CSS files and assets in the SWC.
+            Don't include any resources in the SWC.
+            Write a bundle list of referenced resource bundles
+            into the file bundles.properties in this directory.
+        -->
+        <mxmlc fork="true"
+            file="${basedir}/FlexUnitRoyaleApplication.mxml"
+            output="${basedir}/FlexUnitRoyaleApplication.swf">
+            <jvmarg line="${mxmlc.jvm.args}"/>
+            <!--
+            <jvmarg value="-Xdebug" />
+            <jvmarg value="-Xnoagent" />
+            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8763,server=y,suspend=y" />
+             -->
+            <arg value="-debug" />
+            <arg value="-compiler.targets=SWF" />
+            <arg value="+playerglobal.version=${playerglobal.version}" />
+            <arg value="+env.PLAYERGLOBAL_HOME=${PLAYERGLOBAL_HOME}" />
+        </mxmlc>
+    </target>
+
+    <target name="test">
+        <!-- Load the <royaleunit> task. We can't do this at the <project> level -->
+        <!-- because targets that run before royaleUnitTasks.jar gets built would fail. -->
+        <taskdef resource="royaleUnitTasks.tasks" classpathref="lib.path"/>
+		<mkdir dir="${report.dir}" />
+		<royaleunit
+            swf="${basedir}/FlexUnitRoyaleApplication.swf"
+		    workingDir="${basedir}"
+		    toDir="${report.dir}"
+			haltonfailure="true"
+			verbose="true"
+			localTrusted="true"
+			timeout="90000" />
+        
+		<!-- Generate readable JUnit-style reports -->
+		<junitreport todir="${report.dir}">
+			<fileset dir="${report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report format="frames" todir="${report.dir}/html" />
+		</junitreport>
+        
+    </target>
+</project>
diff --git a/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ComponentTest.as b/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ComponentTest.as
new file mode 100644
index 0000000..648810b
--- /dev/null
+++ b/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ComponentTest.as
@@ -0,0 +1,57 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+    import org.apache.royale.utils.string.*;
+    import org.apache.royale.test.asserts.*;
+    import org.apache.royale.test.asserts.assertEquals;
+    
+    public class ComponentTest
+    {		
+        [Before]
+        public function setUp():void
+        {
+        }
+        
+        [After]
+        public function tearDown():void
+        {
+        }
+        
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+        }
+        
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+        }
+        
+
+        [Test]
+        public function testSomething():void
+        {
+            assertTrue("something" == "something","Should be true");
+            assertEquals("something","something","Should be something");
+        }
+
+
+    }
+}
diff --git a/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ExternsJSTester.as b/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ExternsJSTester.as
new file mode 100644
index 0000000..a14a219
--- /dev/null
+++ b/frameworks/projects/ExternsJS/src/test/royale/flexUnitTests/ExternsJSTester.as
@@ -0,0 +1,32 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flexUnitTests
+{
+    
+    [Suite]
+    [RunWith("org.apache.royale.test.runners.SuiteRunner")]
+    public class ExternsJSTester
+    {
+        // add tests here...        
+        
+        //tests
+        public var componentTest:ComponentTest;
+
+    }
+}
diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index 5ec114b..5b72817 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -220,10 +220,12 @@
     <component id="ComboUpperCase" class="org.apache.royale.jewel.beads.controls.combobox.ComboUpperCase"/>
     <component id="ComboLowerCase" class="org.apache.royale.jewel.beads.controls.combobox.ComboLowerCase"/>
     <component id="ComboBoxDisabled" class="org.apache.royale.jewel.beads.controls.combobox.ComboBoxDisabled"/>
+    <component id="ComboBoxReadOnly" class="org.apache.royale.jewel.beads.controls.combobox.ComboBoxReadOnly"/>
     <component id="ComboBoxTruncateText" class="org.apache.royale.jewel.beads.controls.combobox.ComboBoxTruncateText"/>
     <component id="ComboBoxListCloseOnClick" class="org.apache.royale.jewel.beads.controls.combobox.ComboBoxListCloseOnClick" />
     <component id="TriStateCheckBoxLabelState" class="org.apache.royale.jewel.beads.controls.tristatecheckbox.TriStateCheckBoxLabelState"/>
-    <component id="TriStateCheckBoxStatesValues" class="org.apache.royale.jewel.beads.controls.tristatecheckbox.TriStateCheckBoxStatesValues"/>
+    <component id="TriStateCheckBoxState" class="org.apache.royale.jewel.beads.controls.tristatecheckbox.TriStateCheckBoxState"/>
+    <component id="TriStateCheckBoxTooltipState" class="org.apache.royale.jewel.beads.controls.tristatecheckbox.TriStateCheckBoxTooltipState"/>
 
     <component id="LayoutChildren" class="org.apache.royale.jewel.beads.layouts.LayoutChildren"/>
     <component id="BasicLayout" class="org.apache.royale.jewel.beads.layouts.BasicLayout"/>
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
index e4dd6e5..66613ad 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ComboBox.as
@@ -26,6 +26,7 @@
 	import org.apache.royale.core.StyledUIBase;
 	import org.apache.royale.jewel.beads.models.ComboBoxPresentationModel;
 	import org.apache.royale.jewel.supportClasses.combobox.IComboBoxPresentationModel;
+	import org.apache.royale.core.IHasLabelField;
 
 	//--------------------------------------
     //  Events
@@ -86,7 +87,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.4
 	 */
-	public class ComboBox extends StyledUIBase implements IComboBox, IItemRendererProvider
+	public class ComboBox extends StyledUIBase implements IComboBox, IItemRendererProvider, IHasLabelField
 	{
 		/**
 		 *  Constructor.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataContainer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataContainer.as
index fe1d8c2..7220dc5 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataContainer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataContainer.as
@@ -24,6 +24,7 @@
 	import org.apache.royale.jewel.beads.models.ListPresentationModel;
 	import org.apache.royale.jewel.supportClasses.container.DataContainerBase;
 	import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 * The default property uses when additional MXML content appears within an element's
@@ -61,7 +62,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.4
 	 */
-	public class DataContainer extends DataContainerBase implements IListWithPresentationModel
+	public class DataContainer extends DataContainerBase implements IListWithPresentationModel, IHasLabelField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
index e546111..bf960da 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
@@ -32,6 +32,7 @@
     import org.apache.royale.jewel.beads.models.ListPresentationModel;
     import org.apache.royale.jewel.supportClasses.container.DataContainerBase;
     import org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
+    import org.apache.royale.core.IHasLabelField;
 
 
     //--------------------------------------
@@ -68,7 +69,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.4
      */
-	public class DropDownList extends DataContainerBase
+	public class DropDownList extends DataContainerBase implements IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TriStateCheckBox.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TriStateCheckBox.as
index 782d659..9fd7315 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TriStateCheckBox.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TriStateCheckBox.as
@@ -19,10 +19,10 @@
 package org.apache.royale.jewel
 {
     COMPILE::JS{
-        import org.apache.royale.core.WrappedHTMLElement;
-        import org.apache.royale.html.util.addElementToWrapper;
-        import org.apache.royale.events.MouseEvent;
         import org.apache.royale.core.ITextButton;
+        import org.apache.royale.core.WrappedHTMLElement;
+        import org.apache.royale.events.MouseEvent;
+        import org.apache.royale.html.util.addElementToWrapper;
         import org.apache.royale.jewel.supportClasses.button.SelectableButtonBase;
         import org.apache.royale.jewel.supportClasses.IInputButton;
         import org.apache.royale.jewel.supportClasses.ISelectableWithIndeterminacy;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxReadOnly.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxReadOnly.as
new file mode 100644
index 0000000..be54551
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxReadOnly.as
@@ -0,0 +1,93 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.controls.combobox
+{
+	COMPILE::JS
+	{
+	import org.apache.royale.core.HTMLElementWrapper;
+	import org.apache.royale.core.UIBase;
+	import org.apache.royale.jewel.beads.views.ComboBoxView;
+	}
+	import org.apache.royale.core.IUIBase;
+	import org.apache.royale.jewel.beads.controls.ReadOnly;
+	
+	/**
+	 *  The ComboBoxReadOnly bead class is a specialty ReadOnly bead that can be used to lock a Jewel ComboBox.
+	 *  
+	 *  Based on the ComboBoxDisabled bead for the Jewel ComboBox control.
+	 * 
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.6
+	 */
+	public class ComboBoxReadOnly extends ReadOnly
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.9
+		 */
+		public function ComboBoxReadOnly()
+		{
+		}
+
+		COMPILE::JS
+		protected var lastTextInputElementTabVal:String = null;
+		COMPILE::JS
+		protected var lastButtonElementTabVal:String = null;
+
+		override protected function updateHost():void
+		{
+			COMPILE::JS
+			{
+			var view:ComboBoxView = (_strand as UIBase).view as ComboBoxView;
+
+			if (view) {
+				var pos:HTMLElement = (_strand as IUIBase).positioner;
+				
+				if(!initialized)
+				{
+					initialized = true;
+					lastElementTabVal = (_strand as HTMLElementWrapper).element.getAttribute("tabindex");
+					lastTextInputElementTabVal = view.textinput.element.getAttribute("tabindex");
+					lastButtonElementTabVal = view.button.element.getAttribute("tabindex");
+				}
+				
+                if(readOnly) {
+					setReadOnlyAndTabIndex(pos, true);
+					setReadOnlyAndTabIndex(view.textinput.positioner, true);
+					setReadOnlyAndTabIndex(view.textinput.element);
+					setReadOnlyAndTabIndex(view.button.positioner, true);
+					setReadOnlyAndTabIndex(view.button.element);
+				} else {
+					removeReadOnlyAndTabIndex(pos, true);
+					removeReadOnlyAndTabIndex(view.textinput.positioner, true);
+					removeReadOnlyAndTabIndex(view.textinput.element, false, lastTextInputElementTabVal);
+					removeReadOnlyAndTabIndex(view.button.positioner, true);
+					removeReadOnlyAndTabIndex(view.button.element, false, lastButtonElementTabVal);
+				}
+            }
+			}
+		}
+	}
+}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxLabelState.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxLabelState.as
index 534f6a6..f873757 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxLabelState.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxLabelState.as
@@ -20,12 +20,11 @@
 {
 	COMPILE::JS
 	{
-	import org.apache.royale.jewel.TriStateCheckBox;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.jewel.TriStateCheckBox;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.core.Bead;
 	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.jewel.TriStateCheckBox;
 	}
 
 	/**
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxStatesValues.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxState.as
similarity index 89%
rename from frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxStatesValues.as
rename to frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxState.as
index afe8f33..87c27e3 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxStatesValues.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxState.as
@@ -20,20 +20,20 @@
 {
 	COMPILE::JS
 	{
-	import org.apache.royale.jewel.TriStateCheckBox;
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IStrand;
+	import org.apache.royale.jewel.TriStateCheckBox;
 	}
 
 
 	/**
-	 * The TriStateCheckBoxStatesValues bead allows to set a custom value for each state.
+	 * The TriStateCheckBoxState bead allows to set a custom value for each state.
 	 */
     COMPILE::JS
-	public class TriStateCheckBoxStatesValues implements IBead
+	public class TriStateCheckBoxState implements IBead
 	{
 
-		public function TriStateCheckBoxStatesValues()
+		public function TriStateCheckBoxState()
 		{
 		}
 
@@ -83,10 +83,10 @@
 	}
 
     COMPILE::SWF
-	public class TriStateCheckBoxStatesValues
+	public class TriStateCheckBoxState
 	{
 
-		public function TriStateCheckBoxStatesValues()
+		public function TriStateCheckBoxState()
 		{
 		}
 	}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxTooltipState.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxTooltipState.as
new file mode 100644
index 0000000..2b60b19
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/tristatecheckbox/TriStateCheckBoxTooltipState.as
@@ -0,0 +1,112 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.controls.tristatecheckbox
+{
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.jewel.beads.controls.ToolTip;
+	import org.apache.royale.jewel.TriStateCheckBox;
+
+	
+    COMPILE::JS
+	public class TriStateCheckBoxTooltipState extends ToolTip
+	{
+		
+		public function TriStateCheckBoxTooltipState()
+		{
+		}
+		/**                         	
+		 *  @copy org.apache.royale.core.IBead#strand
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.4
+		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+		 */
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+
+            listenOnStrand("change", toolTipChangeHandler);
+		}
+
+		private function get hostBase():TriStateCheckBox
+		{
+			return _strand as TriStateCheckBox;
+		}
+		
+		protected function toolTipChangeHandler(event:Event):void
+		{
+			updateHost();
+		}
+		
+		protected function updateHost():void
+		{
+			if (!hostBase)
+				return;
+            
+            var _lastTooltip:String;
+			if(hostBase.isIndeterminate())
+				_lastTooltip = _indeterminateTooltip;
+			else if(hostBase.isUnChecked())
+				_lastTooltip = _uncheckedTooltip;
+			else
+				_lastTooltip = _checkedTooltip;
+
+			if(_lastTooltip != toolTip)
+				toolTip = _lastTooltip;
+				
+        }
+
+		private var _indeterminateTooltip:String;
+		public function get indeterminateTooltip():String { return _indeterminateTooltip; }
+		public function set indeterminateTooltip(value:String):void 		
+		{
+			_indeterminateTooltip = value;
+            updateHost();
+		}
+
+		private var _uncheckedTooltip:String;
+		public function get uncheckedTooltip():String { return _uncheckedTooltip; }
+		public function set uncheckedTooltip(value:String):void 		
+		{
+			_uncheckedTooltip = value;
+            updateHost();
+		}
+
+		private var _checkedTooltip:String;
+		public function get checkedTooltip():String { return _checkedTooltip; }
+		public function set checkedTooltip(value:String):void 		
+		{
+			_checkedTooltip = value;
+            updateHost();
+		}
+		
+	}
+
+    COMPILE::SWF
+	public class TriStateCheckBoxTooltipState extends ToolTip
+	{
+		
+		public function TriStateCheckBoxTooltipState()
+		{
+		}
+	}
+}
\ No newline at end of file
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as
index 51e8404..0fdf16b 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ArrayListSelectionModel.as
@@ -28,6 +28,7 @@
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
+	import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The ArrayListSelectionModel class is a selection model for
@@ -39,7 +40,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.4
      */
-	public class ArrayListSelectionModel implements IJewelSelectionModel, IRollOverModel
+	public class ArrayListSelectionModel implements IJewelSelectionModel, IRollOverModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DataProviderModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DataProviderModel.as
index 75ad138..6d51be5 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DataProviderModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DataProviderModel.as
@@ -22,6 +22,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 			
     /**
      *  The DataProviderModel class is a model for
@@ -32,7 +33,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.4
      */
-	public class DataProviderModel extends EventDispatcher implements IDataProviderModel
+	public class DataProviderModel extends EventDispatcher implements IDataProviderModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ButtonBarItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ButtonBarItemRenderer.as
index b54f7d0..056e39c 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ButtonBarItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ButtonBarItemRenderer.as
@@ -26,6 +26,7 @@
 	import org.apache.royale.html.beads.ITextItemRenderer;
 	import org.apache.royale.html.util.getLabelFromData;
 	import org.apache.royale.jewel.Button;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  The ButtonBarItemRenderer class extends Button and turns it into an itemRenderer
@@ -36,7 +37,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.7
 	 */
-	public class ButtonBarItemRenderer extends Button implements ITextItemRenderer, IOwnerViewItemRenderer
+	public class ButtonBarItemRenderer extends Button implements ITextItemRenderer, IOwnerViewItemRenderer, IHasLabelField
 	{
 		public function ButtonBarItemRenderer()
 		{
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/IconButtonBarItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/IconButtonBarItemRenderer.as
index eef50c0..905b3e2 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/IconButtonBarItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/IconButtonBarItemRenderer.as
@@ -30,6 +30,7 @@
 	import org.apache.royale.jewel.IconButton;
 	import org.apache.royale.jewel.IconButtonBar;
 	import org.apache.royale.jewel.beads.views.ButtonBarView;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  The IconButtonBarItemRenderer class extends IconButton and turns it into an itemRenderer
@@ -40,7 +41,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.7
 	 */
-	public class IconButtonBarItemRenderer extends IconButton implements ITextItemRenderer, IOwnerViewItemRenderer
+	public class IconButtonBarItemRenderer extends IconButton implements ITextItemRenderer, IOwnerViewItemRenderer, IHasLabelField
 	{
 		public function IconButtonBarItemRenderer()
 		{
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ToggleButtonBarItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ToggleButtonBarItemRenderer.as
index 2778ad3..3e49f64 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ToggleButtonBarItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/ToggleButtonBarItemRenderer.as
@@ -30,6 +30,7 @@
 	import org.apache.royale.jewel.ToggleButton;
 	import org.apache.royale.jewel.ToggleButtonBar;
 	import org.apache.royale.jewel.beads.views.ButtonBarView;
+	import org.apache.royale.core.IHasLabelField;
 
 	/**
 	 *  The ButtonBarItemRenderer class extends Button and turns it into an itemRenderer
@@ -40,7 +41,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.7
 	 */
-	public class ToggleButtonBarItemRenderer extends ToggleButton implements ITextItemRenderer, IOwnerViewItemRenderer
+	public class ToggleButtonBarItemRenderer extends ToggleButton implements ITextItemRenderer, IOwnerViewItemRenderer, IHasLabelField
 	{
 		public function ToggleButtonBarItemRenderer()
 		{
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
index 2ba58ae..bcfc5b7 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TableColumn.as
@@ -21,6 +21,7 @@
 	import org.apache.royale.core.IFactory;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasDataField;
 	
 	/**
 	 *  TableColumn define a column for a Jewel Table component
@@ -31,7 +32,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.4
 	 */
-	public class TableColumn extends EventDispatcher implements ITableColumn
+	public class TableColumn extends EventDispatcher implements ITableColumn, IHasDataField
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/MXRoyale/asconfig.json b/frameworks/projects/MXRoyale/asconfig.json
index 2718715..cd49c04 100644
--- a/frameworks/projects/MXRoyale/asconfig.json
+++ b/frameworks/projects/MXRoyale/asconfig.json
@@ -38,5 +38,10 @@
         ],
         "output": "target/MXRoyale.swc"
     },
-    "additionalOptions": "-compiler.define+=ROYALE::DISPLAYOBJECT,DisplayObject -js-compiler-define+=ROYALE::DISPLAYOBJECT,IUIComponent -js-compiler-define+=COMPILE::SWF,false -js-compiler-define+=COMPILE::JS,true"
+    "additionalOptions": [
+        "-compiler.define+=ROYALE::DISPLAYOBJECT,DisplayObject",
+        "-js-compiler-define+=ROYALE::DISPLAYOBJECT,IUIComponent",
+        "-js-compiler-define+=COMPILE::SWF,false",
+        "-js-compiler-define+=COMPILE::JS,true"
+    ]
 }
\ No newline at end of file
diff --git a/frameworks/projects/MXRoyale/src/main/config/compile-swf-config.xml b/frameworks/projects/MXRoyale/src/main/config/compile-swf-config.xml
index 19c8d72..96a1926 100644
--- a/frameworks/projects/MXRoyale/src/main/config/compile-swf-config.xml
+++ b/frameworks/projects/MXRoyale/src/main/config/compile-swf-config.xml
@@ -67,6 +67,7 @@
           <name>ChangeEvent</name>
           <name>NonCommittingChangeEvent</name>
           <name>Transient</name>
+          <name>SWFOverride</name>
         </keep-as3-metadata>
 	  
         <locale/>
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 4ac02f9..24d52a5 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -492,6 +492,15 @@
 	padding-left: 1px;
 	padding-right: 1px;
 	border-bottom: 1px solid #333333;
+	display: flex /* added this because I don't see the layout bead working here, @todo investigate*/
+}
+
+PanelTitleBar .CloseButton {
+	position: absolute;
+	right: 5px;
+	top: 5px;
+	width: 16px;
+	height: 16px;
 }
 
 pop|PopUpManagerModal
@@ -981,7 +990,7 @@
 	{
 		IBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");
 		IBorderBead: ClassReference("org.apache.royale.html.beads.SingleLineBorderBead");
-		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
+		IContentView: ClassReference("mx.containers.beads.supportClasses.ContainerContentArea");
 	}
 	
 	DataGrid {
@@ -1025,7 +1034,7 @@
 	
 	Panel
 	{
-		IContentView: ClassReference("org.apache.royale.html.supportClasses.ContainerContentArea");
+		IContentView: ClassReference("mx.containers.beads.supportClasses.ContainerContentArea");
 		IBorderBead: ClassReference("org.apache.royale.html.beads.SingleLineBorderBead");
 		IBackgroundBead: ClassReference("org.apache.royale.html.beads.SolidBackgroundBead");    
 	}
diff --git a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
index 01a501b..3cb6244 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
+++ b/frameworks/projects/MXRoyale/src/main/resources/mx-royale-manifest.xml
@@ -233,6 +233,7 @@
    <!--<component id="CurrencyFormatter" class="mx.formatters.CurrencyFormatter"/>-->
    <!--<component id="ZipCodeValidator" class="mx.validators.ZipCodeValidator"/>-->
    <component id="PrintDataGrid" class="mx.printing.PrintDataGrid"/>
+    <component id="HTML" class="mx.controls.HTML"/>
    
 
 </componentPackage>
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index 4be7101..bf19252 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -72,6 +72,7 @@
     import mx.containers.beads.layouts.BasicLayout; BasicLayout;
 	import mx.containers.beads.PanelInternalContainer; PanelInternalContainer;
 	import mx.containers.beads.PanelInternalContainerView; PanelInternalContainerView;
+	import mx.containers.beads.supportClasses.ContainerContentArea;ContainerContentArea;
 	import mx.controls.beads.AlertView; AlertView;
     import mx.controls.beads.controllers.AlertMouseController; AlertMouseController;
     import mx.containers.errors.ConstraintError; ConstraintError;
@@ -431,6 +432,7 @@
 	import mx.printing.PrintJob; PrintJob;
 	import mx.containers.accordionClasses.AccordionHeader; AccordionHeader;
 	/*import mx.net.FileReferenceList; FileReferenceList;*/
+	import mx.controls.beads.ProgressBarView; ProgressBarView;
 }
 
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/BarSeries.as b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/BarSeries.as
index 0d47f22..b89ee1d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/BarSeries.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/BarSeries.as
@@ -64,6 +64,7 @@
 import mx.graphics.SolidColor;
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.ISimpleStyleClient;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -227,7 +228,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class BarSeries extends Series implements IStackable2, IBar
+public class BarSeries extends Series implements IStackable2, IBar, IHasLabelField
 {
 //    include "../../core/Version.as";
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/ColumnSeries.as b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/ColumnSeries.as
index 5560acd..7dbbe2a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/ColumnSeries.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/ColumnSeries.as
@@ -60,6 +60,7 @@
 import mx.graphics.SolidColor;
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.ISimpleStyleClient;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -227,7 +228,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class ColumnSeries extends Series implements IColumn,IStackable2
+public class ColumnSeries extends Series implements IColumn,IStackable2, IHasLabelField
 {
 //    include "../../core/Version.as";
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/PieSeries.as b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/PieSeries.as
index fff5473..36f9160 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/PieSeries.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/charts/series/PieSeries.as
@@ -66,6 +66,7 @@
 import mx.graphics.Stroke;
 import mx.styles.CSSStyleDeclaration;
 import mx.styles.ISimpleStyleClient;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -297,7 +298,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class PieSeries extends Series
+public class PieSeries extends Series implements IHasLabelField
 {
 //    include "../../core/Version.as";
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/FormItem.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/FormItem.as
index 8dcdb51..ca145be 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/FormItem.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/FormItem.as
@@ -1383,6 +1383,10 @@
      */
     internal function getPreferredLabelWidth():Number
     {
+        if (!labelObj)
+        {
+            return 0;
+        }
         if (!label || label == "")
             return 0;
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/GridRow.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/GridRow.as
index 909800f..3d6c024 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/GridRow.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/GridRow.as
@@ -348,8 +348,8 @@
      */
     override public function invalidateSize():void
     {
-        if (ROYALE::DISPLAYOBJECT)
-            trace("this syntax is valid?");
+        /*if (ROYALE::DISPLAYOBJECT)
+            trace("this syntax is valid?");*/
         
         super.invalidateSize();
         if (parent)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
index 218a01c..75803d2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/Panel.as
@@ -669,6 +669,17 @@
      */
     protected var titleBar:UIComponent;
 
+    /**
+     * PanelView coercion ignore because it is already typed-checked prior, below
+     * @royaleignorecoercion mx.containers.beads.PanelView
+     */
+    override public function addedToParent():void
+    {
+        //support for subclass access, as per original Flex code
+        titleBar = view is PanelView ? PanelView(view).titleBar as UIComponent : null;
+        super.addedToParent();
+    }
+
     //----------------------------------
     //  title
     //----------------------------------
@@ -810,7 +821,8 @@
         var panelView:PanelView = view as PanelView;
         if (panelView.contentArea == this)
             return super.numElements;
-        return panelView.contentArea.numElements;
+        //likewise, contentArea may not be available yet during early phases, use null safety:
+        return panelView.contentArea ? panelView.contentArea.numElements : 0;
     }
     
     /**
@@ -1120,7 +1132,7 @@
      *  @private
      *  Storage for the titleIcon property.
      */ 
-    private var _titleIcon:Class;
+    private var _titleIcon:Object;
     
     /**
      *  @private
@@ -1128,7 +1140,7 @@
     private var _titleIconChanged:Boolean = false;
 
     [Bindable("titleIconChanged")]
-    [Inspectable(category="General", defaultValue="", format="EmbeddedFile")]
+ //   [Inspectable(category="General", defaultValue="", format="EmbeddedFile")]
 
     /**
      *  The icon displayed in the title bar.
@@ -1140,7 +1152,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-    public function get titleIcon():Class
+    public function get titleIcon():Object
     {
         return _titleIcon;
     }
@@ -1148,8 +1160,9 @@
     /**
      *  @private
      */
-    public function set titleIcon(value:Class):void
+    public function set titleIcon(value:Object):void
     {
+        //@todo deal with string (url) for Royale instead of Class
         _titleIcon = value;
         _titleIconChanged = true;
         
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/PanelTitleBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/PanelTitleBar.as
index 1fd703b..f3e635f 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/PanelTitleBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/PanelTitleBar.as
@@ -46,6 +46,10 @@
 	{
 		super();
         typeNames += " PanelTitleBar";
+		COMPILE::JS{
+			//@todo review this... (see css changes in same commit) trying to achieve similar effect to native browser (css) layout that is used in Alert TitleBar
+			this.positioner.style.display = '';
+		}
 	}
 }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TitleWindow.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TitleWindow.as
index 79e13b3..af7572f 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TitleWindow.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/TitleWindow.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.events.CloseEvent;

 	import org.apache.royale.html.beads.DragBead;

 	import org.apache.royale.events.IEventDispatcher;

+    import org.apache.royale.core.IPanelModel;

 	import mx.core.UIComponent;

 	import mx.containers.beads.PanelView;

 /*

@@ -275,11 +276,13 @@
      *  @playerversion AIR 1.1

      *  @productversion Royale 0.9.3

      */

-    private var _showCloseButton:Boolean = false;

-	

     public function get showCloseButton():Boolean

     {

-        return _showCloseButton;

+        var model:IPanelModel = this.model as IPanelModel;

+        if (model) {

+            return model.showCloseButton;

+        }

+        return false;

     }

 

     /**

@@ -287,7 +290,10 @@
      */

     public function set showCloseButton(value:Boolean):void

     {

-        _showCloseButton = value;

+        var model:IPanelModel = this.model as IPanelModel;

+        if (model) {

+            model.showCloseButton = value;

+        }

     }

 

     override public function addedToParent():void

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as
index de038dd..ca9a9c8 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/ViewStack.as
@@ -54,6 +54,10 @@
 
 import org.apache.royale.core.IChild;
 
+import mx.events.ChildExistenceChangedEvent;
+import org.apache.royale.core.IUIBase;
+import mx.utils.RoyaleUtil;
+
 use namespace mx_internal;
 
 //--------------------------------------
@@ -965,6 +969,7 @@
         super.updateDisplayList(unscaledWidth, unscaledHeight);
 
         var nChildren:int = numChildren;
+        if (!nChildren) return;
         var w:Number = contentWidth;
         var h:Number = contentHeight;
         var left:Number = contentX;
@@ -1274,16 +1279,14 @@
         if (!selectedChild)
             return;
 
-        /*
         // Performance optimization: don't call createComponents if we know
         // that createComponents has already been called.
-        if (selectedChild && selectedChild.deferredContentCreated == false)
+        if (selectedChild && !selectedChild.deferredContentCreated)
         {
             if (initialized)  // Only listen if the ViewStack has already been initialized.
                 selectedChild.addEventListener(FlexEvent.CREATION_COMPLETE,childCreationCompleteHandler);
             selectedChild.createDeferredContent();
         }
-        */
 
         // Do the initial measurement/layout pass for the
         // newly-instantiated descendants.
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/CanvasLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/CanvasLayout.as
index aeab418..c52937a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/CanvasLayout.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/CanvasLayout.as
@@ -103,6 +103,10 @@
     //
     //--------------------------------------------------------------------------
 
+	/**
+	 *
+	 * @royaleignorecoercion Number
+	 */
 	override public function layout():Boolean
 	{
 		COMPILE::SWF
@@ -212,7 +216,8 @@
 			// each child must have position:absolute for BasicLayout to work
 			for (i=0; i < n; i++) {
 				var child:IUIComponent = target.getLayoutChildAt(i);
-				var hCenter:Number = Number((child as ILayoutElement).horizontalCenter);
+				var layoutChild:ILayoutElement = child as ILayoutElement;
+				var hCenter:Number = Number(layoutChild.horizontalCenter);
 				child.positioner.style.position = "absolute";
 				var layoutNeeded:Boolean = true;
 				var hh:Number = child.height;
@@ -227,6 +232,36 @@
 					ww = target.width * child.percentWidth / 100;
 					layoutNeeded = false;
 				}
+				if (layoutNeeded) {
+					//@todo check precedence here of percent-based vs. constraint-based
+					if (!isNaN(layoutChild.left)) {
+						child.x = layoutChild.left as Number;
+						if (!isNaN(layoutChild.right)) {
+							child.element.style.right = layoutChild.right+'px';
+						} else {
+							child.element.style.right = '';
+						}
+					} else //@todo check this:
+						if (!isNaN(layoutChild.right)) {
+						child.element.style.right = layoutChild.right+'px';
+					} else {
+						child.element.style.right = '';
+					}
+					if (!isNaN(layoutChild.top)) {
+						child.y = layoutChild.top as Number;
+						if (!isNaN(layoutChild.bottom)) {
+							child.element.style.bottom = layoutChild.bottom+'px';
+						} else {
+							child.element.style.bottom = '';
+						}
+					} else  //@todo check this:
+						if (!isNaN(layoutChild.bottom)) {
+						child.element.style.bottom = layoutChild.bottom+'px';
+					} else {
+						child.element.style.bottom = '';
+					}
+				}
+
 				if (!isNaN(hCenter))
 				{
 					// TODO consider how this affects measurement of target
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/supportClasses/ContainerContentArea.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/supportClasses/ContainerContentArea.as
new file mode 100644
index 0000000..4768d25
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/supportClasses/ContainerContentArea.as
@@ -0,0 +1,78 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.containers.beads.supportClasses
+{
+	import mx.core.UIComponent;
+
+	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.IUIBase;
+    import org.apache.royale.core.UIBase;
+    import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.IChild;
+	import org.apache.royale.core.ILayoutView;
+
+    /**
+     *  The ContainerContentArea class implements the contentView for
+     *  a Container on the SWF platform.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+	public class ContainerContentArea extends UIComponent implements IBead, ILayoutView
+	{
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		public function ContainerContentArea()
+		{
+			super();
+            addEventListener("layoutNeeded", forwardEventHandler);
+		}
+		
+        private var _host:IUIBase;
+		public function get host():IUIBase
+        {
+            return _host;
+        }
+		/**
+		 *  @royaleignorecoercion org.apache.royale.core.IUIBase
+         */
+		public function set strand(value:IStrand):void
+		{
+			_host = value as IUIBase;
+		}
+        /**
+		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+        private function forwardEventHandler(event:Event):void
+        {
+            if (parent is IEventDispatcher)
+                (parent as IEventDispatcher).dispatchEvent(event);
+        }
+	}
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
index ddd2aa9..ac69a5b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ComboBox.as
@@ -34,6 +34,7 @@
 import mx.effects.Tween;
 import org.apache.royale.geom.Rectangle;
 import org.apache.royale.geom.Point;
+import org.apache.royale.core.IUIBase;
 import mx.managers.ISystemManager;
 import mx.events.FlexMouseEvent;
 import mx.core.UIComponentGlobals;
@@ -1548,6 +1549,21 @@
         dispatchEvent(new Event("dropdownWidthChanged"));
     }
 
+    // the following override is necessary as long as the view is not a UIComponent and getExplicitOrMeasuredHeight fails
+    override public function get measuredHeight():Number
+    {
+        var comboView:IComboBoxView = view as IComboBoxView;
+        return Math.max((comboView.textInputField as IUIBase).height, (comboView.popupButton as IUIBase).height);
+    }
+
+    // Make sure Basic components scale correctly in height
+    override public function set explicitHeight(value:Number):void
+    {
+        super.explicitHeight = value;
+        var comboView:IComboBoxView = view as IComboBoxView;
+        (comboView.textInputField as IUIBase).height = value;
+        (comboView.popupButton as IUIBase).height = value;
+    }
 
 
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/HTML.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/HTML.as
new file mode 100644
index 0000000..106cb02
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/HTML.as
@@ -0,0 +1,1626 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.controls
+{
+
+import org.apache.royale.events.Event;
+import mx.events.FocusEvent;
+//import flash.events.HTMLUncaughtScriptExceptionEvent;
+import mx.events.MouseEvent;
+import org.apache.royale.utils.HTMLLoader;
+//import flash.html.HTMLHistoryItem;
+//import flash.html.HTMLHost;
+import org.apache.royale.net.URLRequest;
+import mx.system.ApplicationDomain;
+//import org.apache.royale.text.ime.IME;
+//import org.apache.royale.text.ime.IMEConversionMode;
+import mx.controls.listClasses.BaseListData;
+import mx.controls.listClasses.IDropInListItemRenderer;
+import mx.controls.listClasses.IListItemRenderer;
+import mx.core.ClassFactory;
+import mx.core.EdgeMetrics;
+import mx.core.IDataRenderer;
+import mx.core.IFactory;
+import mx.core.IIMESupport;
+//import mx.core.FlexHTMLLoader;
+import mx.core.mx_internal;
+import mx.core.ScrollControlBase;
+import mx.core.ScrollPolicy;
+import mx.events.FlexEvent;
+import mx.events.ScrollEvent;
+import mx.styles.StyleManager
+import mx.styles.CSSStyleDeclaration;
+import mx.managers.IFocusManagerComponent;
+
+use namespace mx_internal;
+
+//--------------------------------------
+//  Events
+//--------------------------------------
+
+/**
+ *  Dispatched after the last loading operation caused by
+ *  setting the <code>location</code> or <code>htmlText</code>
+ *  property has completed.
+ *
+ *  <p>This event is always dispatched asynchronously,
+ *  after the JavaScript <code>load</code> event
+ *  has been dispatched in the HTML DOM.</p>
+ *
+ *  <p>An event handler for this event may call any method
+ *  or access any property of this control
+ *  or its internal <code>htmlLoader</code>.</p>
+ *
+ *  @eventType org.apache.royale.events.Event.COMPLETE
+ * 
+ *  @see location
+ *  @see htmlText
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="complete", type="org.apache.royale.events.Event")]
+
+/**
+ *  Dispatched after the HTML DOM has been initialized
+ *  in response to a loading operation caused by
+ *  setting the <code>location</code> or <code>htmlText</code> property.
+ *
+ *  <p>When this event is dispatched,
+ *  no JavaScript methods have yet executed.
+ *  The <code>domWindow</code>and <code>domWindow.document</code>
+ *  objects exist, but other DOM objects may not.
+ *  You can use this event to set properties
+ *  onto the <code>domWindow</code> and <code>domWindow.document</code>
+ *  objects for JavaScript methods to later access.</p>
+ *
+ *  <p>A handler for this event should not set any properties
+ *  or call any methods which start another loading operation
+ *  or which affect the URL for the current loading operation;
+ *  doing so causes either an ActionScript or a JavaScript exception.</p>
+ *
+ *  @eventType org.apache.royale.events.Event.HTML_DOM_INITIALIZE
+ * 
+ *  @see location
+ *  @see htmlText
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="htmlDOMInitialize", type="org.apache.royale.events.Event")]
+
+/**
+ *  Dispatched when this control's HTML content initially renders,
+ *  and each time that it re-renders.
+ *
+ *  <p>Because an HTML control can dispatch many of these events,
+ *  you should avoid significant processing in a <code>render</code>
+ *  handler that might negatively impact performance.</p>
+ *
+ *  @eventType org.apache.royale.events.Event.HTML_RENDER
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="htmlRender", type="org.apache.royale.events.Event")]
+
+/**
+ *  Dispatched when the <code>location</code> property changes.
+ *
+ *  <p>This event is always dispatched asynchronously.
+ *  An event handler for this event may call any method
+ *  or access any property of this control
+ *  or its internal <code>htmlLoader</code>.</p>
+ *
+ *  @eventType org.apache.royale.events.Event.LOCATION_CHANGE
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Event(name="locationChange", type="org.apache.royale.events.Event")]
+
+/**
+ *  Dispatched when an uncaught JavaScript exception occurs.
+ *
+ *  <p>This event is always dispatched asynchronously.
+ *  An event handler for this event may call any method
+ *  or access any property of this control
+ *  or its internal <code>htmlLoader</code>.</p>
+ *
+ *  @eventType flash.events.HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+//[Event(name="uncaughtScriptException", type="flash.events.HTMLUncaughtScriptExceptionEvent")]
+
+//--------------------------------------
+//  Styles
+//--------------------------------------
+
+/**
+ *  The number of pixels between the bottom edge of this control
+ *  and the bottom edge of its HTML content area.
+ *
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="paddingBottom", type="Number", format="Length", inherit="no")]
+
+/**
+ *  The number of pixels between the left edge of this control
+ *  and the left edge of its HTML content area.
+ *
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="paddingLeft", type="Number", format="Length", inherit="no")]
+
+/**
+ *  The number of pixels between the right edge of this control
+ *  and the right edge of its HTML content area.
+ *
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="paddingRight", type="Number", format="Length", inherit="no")]
+
+/**
+ *  The number of pixels between the top edge of this control
+ *  and the top edge of its HTML content area.
+ *
+ *  @default 0
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+[Style(name="paddingTop", type="Number", format="Length", inherit="no")]
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+//[IconFile("HTML.png")]
+
+//[ResourceBundle("controls")]
+
+/**
+ *  The HTML control lets you display HTML content in your application.
+ *
+ *  <p>You use the <code>location</code> property to specify the URL
+ *  of an HTML page whose content is displayed in the control, or you
+ *  can set the <code>htmlText</code> property to specify a String
+ *  containing HTML-formatted text that is rendered in the control.</p>
+ *
+ *  @mxml
+ *
+ *  <p>The <code>&lt;mx:HTML&gt;</code> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;mx:HTML
+ *    <strong>Properties</strong>
+ *    data="<i>null</i>"
+ *    historyPosition="0"
+ *    htmlHost="<i>null</i>"
+ *    htmlLoaderFactory="mx.core.ClassFactory"
+ *    htmlText=""
+ *    listData="<i>null</i>"
+ *    location=""
+ *    paintsDefaultBackground="false"
+ *    runtimeApplicationDomain="<i>null</i>"
+ *    userAgent="<i>null</i>"
+ * 
+ *    <strong>Styles</strong>
+ *    paddingBottom="0"
+ *    paddingLeft="0"
+ *    paddingRight="0"
+ *    paddingTop="0"
+ * 
+ *    <strong>Events</strong>
+ *    complete="<i>No default</i>"
+ *    htmlDOMInitialize="<i>No default</i>"
+ *    htmlRender="<i>No default</i>"
+ *    locationChange="<i>No default</i>"
+ *    uncaughtScriptException="<i>No default</i>"
+ *  /&gt;
+ *  </pre>
+ * 
+ *  @see ../../flash/html/HTMLLoader.html HTMLLoader
+ * 
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+ public class HTML extends ScrollControlBase
+    implements IDataRenderer, IDropInListItemRenderer,
+    IListItemRenderer, IFocusManagerComponent
+{
+    //include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private static const MAX_HTML_WIDTH:Number = 2880;
+
+    /**
+     *  @private
+     */
+    private static const MAX_HTML_HEIGHT:Number = 2880;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  pdfCapability
+    //----------------------------------
+
+    /**
+     *  The type of PDF support on the user's system,
+     *  defined as an integer code value.
+     *
+     *  <p>An HTML object can display PDF content only if this property
+     *  evaluates to <code>PDFCapability.STATUS_OK</code>.
+     *  The PDFCapability class defines constants for possible values
+     *  of the <code>pdfCapability</code> property, as follows:</p>
+     *
+     *  <table class="innertable">
+     *    <tr>
+     *     <th>PDFCapability constant</th>
+     *     <th>Meaning</th>
+     *    </tr>
+     *    <tr>
+     *     <td><code>STATUS_OK</code></td>
+     *     <td>A sufficient version (8.1 or later) of Acrobat Reader
+     *         is detected and PDF content can be loaded in an HTML object.
+     *       <p><em>Note:</em> On Windows, if a Acrobat Acrobat
+     *         or Acrobat Reader version 7.x or above
+     *       is currently running on the user's system,
+     *         that version is used even if a later version
+     *       that supports loading PDF loaded in an HTML object is installed.
+     *         In this case, if the the value of the
+     *         <code>pdfCampability</code> property is
+     *       <code>PDFCapability.STATUS_OK</code>,
+     *         when an AIR application attempts to load PDF content
+     *      into an HTML object, the older version of Acrobat or Reader
+     *         displays an alert, without an error message displayed the AIR runtime.
+     *         If this is a possible situation for your end users,
+     *         you may consider providing them with instructions to close Acrobat
+     *      while running your application.
+     *         You may consider displaying these instructions if the PDF
+     *      content does not load within an acceptable timeframe.</p></td>
+     *    </tr>
+     *    <tr>
+     *     <td><code>ERROR_INSTALLED_READER_NOT_FOUND</code></td>
+     *     <td>No version of Acrobat Reader is detected.
+     *         An HTML object cannot display PDF content.</td>
+     *    </tr>
+     *    <tr>
+     *     <td><code>ERROR_INSTALLED_READER_TOO_OLD</code></td>
+     *     <td>Acrobat Reader has been detected, but the version is too old.
+     *         An HTML object cannot display PDF content.</td>
+     *    </tr>
+     *    <tr>
+     *     <td><code>ERROR_PREFERED_READER_TOO_OLD</code></td>
+     *     <td>A sufficient version (8.1 or later) of Acrobat Reader is detected,
+     *         but the the version of Acrobat Reader that is setup
+     *         to handle PDF content is older than Reader 8.1.
+     *         An HTML object cannot display PDF content.</td>
+     *    </tr>
+     *  </table>
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public static function get pdfCapability():int
+    {
+        //return HTMLLoader.pdfCapability;
+		return null;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function HTML()
+    {
+        super();
+
+        _horizontalScrollPolicy = ScrollPolicy.AUTO;
+        _verticalScrollPolicy = ScrollPolicy.AUTO;
+
+        tabFocusEnabled = false;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Flag that will block default data/listData behavior.
+     */
+    private var textSet:Boolean;
+
+    /**
+     *  @private
+     */    
+    private var errorCaught:Boolean = false;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override public function set verticalScrollPosition(value:Number):void
+    {
+        // Clip the vertical scroll position to appropriate min/max bounds.
+        value = Math.max(value,0);
+		COMPILE::SWF {
+			if (htmlLoader && (htmlLoader.contentHeight > htmlLoader.height))
+				value = Math.min(value,htmlLoader.contentHeight - htmlLoader.height)
+
+			super.verticalScrollPosition = value;
+
+			if (htmlLoader)
+				htmlLoader.scrollV = value;
+			else
+				invalidateProperties();
+		}
+			
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  contentHeight
+    //----------------------------------
+
+    /**
+     *  The height, in pixels, of the HTML content.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get contentHeight():Number
+		{
+			if (!htmlLoader)
+				return 0;
+
+			return htmlLoader.contentHeight;
+		}
+	}
+
+    //----------------------------------
+    //  contentWidth
+    //----------------------------------
+
+    /**
+     *  The width, in pixels, of the HTML content.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get contentWidth():Number
+		{
+			if (!htmlLoader)
+				return 0;
+
+			return htmlLoader.contentWidth;
+		}
+	}
+
+    //----------------------------------
+    //  data
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the data property.
+     */
+    private var _data:Object;
+
+    [Bindable("dataChange")]
+    [Inspectable(environment="none")]
+
+    /**
+     *  Lets you pass a value to the component
+     *  when you use it in an item renderer or item editor.
+     *  You typically use data binding to bind a field of the <code>data</code>
+     *  property to a property of this component.
+     *
+     *  <p>When you use the control as a drop-in item renderer or drop-in
+     *  item editor, Flex automatically writes the current value of the item
+     *  to the <code>text</code> property of this control.</p>
+     *
+     *  <p>You cannot set this property in MXML.</p>
+     *
+     *  @default null
+     *  @see mx.core.IDataRenderer
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get data():Object
+    {
+        return _data;
+    }
+
+    /**
+     *  @private
+     */
+    public function set data(value:Object):void
+    {
+        var newText:*;
+
+        _data = value;
+
+        if (_listData)
+        {
+            newText = _listData.label;
+        }
+        else if (_data != null)
+        {
+            if (_data is String)
+                newText = String(_data);
+            else
+                newText = _data.toString();
+        }
+
+        if (newText !== undefined && !textSet)
+        {
+            htmlText = newText;
+            textSet = false;
+        }
+
+        dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+    }
+
+
+    //----------------------------------
+    //  historyLength
+    //----------------------------------
+
+    /**
+     *  The overall length of the history list,
+     *  including back and forward entries.
+     *
+     *  This property has the same value
+     *  as the <code>window.history.length</code>
+     *  JavaScript property of the the HTML content.
+     *
+     *  @see #historyPosition
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get historyLength():int
+		{
+			if (!htmlLoader)
+				return 0;
+
+			return htmlLoader.historyLength;
+		}
+	}
+
+    //----------------------------------
+    //  historyPosition
+    //----------------------------------
+
+    /**
+     *  The current position in the history list.
+     *
+     *  <p>The history list corresponds to the <code>window.history</code>
+     *  object of the HTML content.
+     *  Entries less than the current position are the "back" list;
+     *  entries greater are "forward."
+     *  Attempting to set the position beyond the end sets it to the end.</p>
+     * 
+     *  @default 0
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get historyPosition():int
+		{
+			if (!htmlLoader)
+				return 0;
+
+			return htmlLoader.historyPosition;
+		}
+	}
+
+    /**
+     *  @private
+     */
+	COMPILE::SWF {
+		public function set historyPosition(value:int):void
+		{
+			if (htmlLoader)
+				htmlLoader.historyPosition = value;
+		}
+	}
+
+    //----------------------------------
+    //  htmlLoader
+    //----------------------------------
+
+    /**
+     *  The internal HTMLLoader object that renders
+     *  the HTML content for this control.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public var htmlLoader:HTMLLoader;
+	}
+	
+
+    //----------------------------------
+    //  htmlLoaderFactory
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the htmlLoaderFactory property.
+     */
+    //private var _htmlLoaderFactory:IFactory = new ClassFactory(FlexHTMLLoader);
+	COMPILE::SWF {
+    private var _htmlLoaderFactory:IFactory = new ClassFactory(HTMLLoader);
+
+    [Bindable("htmlLoaderFactoryChanged")]
+	}
+
+    /**
+     *  The IFactory that creates an HTMLLoader-derived instance
+     *  to use as the htmlLoader.
+     *
+     *  <p>The default value is an IFactory for HTMLLoader.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get htmlLoaderFactory():IFactory
+		{
+			return _htmlLoaderFactory;
+		}
+
+		/**
+		 *  @private
+		 */
+		public function set htmlLoaderFactory(value:IFactory):void
+		{
+			
+			_htmlLoaderFactory = value;
+			
+
+			dispatchEvent(new Event("htmlLoaderFactoryChanged"));
+		}
+	}
+
+    //----------------------------------
+    //  htmlHost
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the htmlHost property.
+     */
+    // private var _htmlHost:HTMLHost;
+    private var _htmlHost:Object;
+
+    /**
+     *  @private
+     */
+    private var htmlHostChanged:Boolean = false;
+
+    /**
+     *  The HTMLHost object is used to handle changes
+     *  to certain user interface elements in the HTML content,
+     *  such as the <code>window.document.title</code> property.
+     *
+     *  <p>To override default behaviors for the HTMLLoader,
+     *  create a subclass of the HTMLHost class,
+     *  override its member functions
+     *  to handle various user interface changes in the HTML content,
+     *  and set this property to an instance of your subclass.</p>
+     * 
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    //public function get htmlHost():HTMLHost
+    public function get htmlHost():Object
+    {
+        return _htmlHost;
+    }
+
+    /**
+     *  @private
+     */
+    // public function set htmlHost(value:HTMLHost):void
+    public function set htmlHost(value:Object):void
+    {
+        _htmlHost = value;
+        htmlHostChanged = true;
+
+        invalidateProperties();
+    }
+
+    //----------------------------------
+    //  htmlText
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the htmlText property.
+     */
+    private var _htmlText:String;
+
+    /**
+     *  @private
+     */
+    private var htmlTextChanged:Boolean = false;
+
+    [Bindable("htmlTextChanged")]
+
+    /**
+     *  Specifies an HTML-formatted String for display by the control.
+     *
+     *  <p>Setting this property has the side effect of setting
+     *  the <code>location</code> property to <code>null</code>,
+     *  and vice versa.</p>
+     * 
+     *  <p>Content added via the <code>htmlText</code> property is put in the 
+     *  application security sandbox. If an AIR application includes an HTML 
+     *  control located in the application sandbox, and remote HTML code is 
+     *  directly added into the control by setting the  <code>htmlText</code> 
+     *  property, any script contained in the HTML text is executed in the 
+     *  application sandbox.</p>
+     *
+     *  @default ""
+     *
+     *  @see #location
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get htmlText():String
+    {
+        return _htmlText;
+    }
+
+    /**
+     *  @private
+     */
+    public function set htmlText(value:String):void
+    {
+        _htmlText = value;
+        htmlTextChanged = true;
+
+        // Setting both location and htmlText doesn't make sense,
+        // so setting one sets the other to null,
+        // and the last one set is applied in commitProperties().
+        _location = null;
+        locationChanged = false;
+
+        invalidateProperties();
+        invalidateSize();
+        invalidateDisplayList();
+
+        dispatchEvent(new Event("htmlTextChanged"));
+    }
+
+    //----------------------------------
+    //  domWindow
+    //----------------------------------
+
+    /**
+     *  The JavaScript <code>window</code> object
+     *  for the root frame of the HTML DOM inside this control.
+     *
+     *  <p>This property is <code>null</code> until the
+     *  <code>htmlDOMInitialize</code> event has been dispatched.</p>
+     *
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get domWindow():Object
+		{
+			if (!htmlLoader)
+				return null;
+
+			return htmlLoader.window;
+		}
+	}
+
+    //----------------------------------
+    //  imeMode
+    //----------------------------------
+
+    /**
+     *  @private
+     */
+    private var _imeMode:String = null;
+
+    /**
+     *  Specifies the IME (input method editor) mode.
+     *  The IME enables users to enter text in Chinese, Japanese, and Korean.
+     *  Flex sets the specified IME mode when the control gets the focus,
+     *  and sets it back to the previous value when the control loses the focus.
+     *
+     *  <p>The flash.system.IMEConversionMode class defines constants for the
+     *  valid values for this property.
+     *  You can also specify <code>null</code> to specify no IME.</p>
+     *
+     *  @default null
+     * 
+     *  @see flash.system.IMEConversionMode
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get imeMode():String
+    {
+        return _imeMode;
+    }
+
+    /**
+     *  @private
+     */
+    public function set imeMode(value:String):void
+    {
+        _imeMode = value;
+        // We don't call IME.conversionMode here. We call it
+        // only on focusIn. Thus fringe cases like setting
+        // imeMode dynamically without moving focus, through
+        // keyboard events, wouldn't change the mode. Also
+        // getting imeMode asynch. from the server which gets
+        // delayed and set later after focusIn is not handled
+        // as having the text partly in one script and partly
+        // in another is not desirable.
+    }
+
+    //----------------------------------
+    //  listData
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the listData property.
+     */
+    private var _listData:BaseListData;
+
+    [Bindable("dataChange")]
+    [Inspectable(environment="none")]
+
+    /**
+     *  When a component is used as a drop-in item renderer or drop-in
+     *  item editor, Flex initializes the <code>listData</code> property
+     *  of the component with the appropriate data from the List control.
+     *  The component can then use the <code>listData</code> property
+     *  to initialize the <code>data</code> property of the drop-in
+     *  item renderer or drop-in item editor.
+     *
+     *  <p>You do not set this property in MXML or ActionScript;
+     *  Flex sets it when the component is used as a drop-in item renderer
+     *  or drop-in item editor.</p>
+     *
+     *  @default null
+     *  @see mx.controls.listClasses.IDropInListItemRenderer
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get listData():BaseListData
+    {
+        return _listData;
+    }
+
+    /**
+     *  @private
+     */
+    public function set listData(value:BaseListData):void
+    {
+        _listData = value;
+    }
+
+    //----------------------------------
+    //  loaded
+    //----------------------------------
+
+    /**
+     *  A flag which indicates whether the JavaScript <code>load</code> event
+     *  corresponding to the previous loading operation
+     *  has been delivered to the HTML DOM in this control.
+     *
+     *  <p>This property is <code>true</code>
+     *  before the <code>complete</code> event is dispatched.</p>
+     *
+     *  <p>It is possible that this property
+     *  never becomes <code>true</code>.
+     *  This happens in the same cases
+     *  in which the <code>complete</code> event is never dispatched.</p>
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function get loaded():Boolean
+		{
+			if (!htmlLoader || locationChanged || htmlTextChanged)
+				return false;
+
+			return htmlLoader.loaded;
+		}
+	}
+
+    //----------------------------------
+    //  location
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the location property.
+     */
+    private var _location:String;
+
+    /**
+     *  @private
+     */
+    private var locationChanged:Boolean = false;
+
+    [Bindable("locationChange")]
+
+    /**
+     *  The URL of an HTML page to be displayed by this control.
+     *
+     *  <p>Setting this property has the side effect of setting
+     *  the <code>htmlText</code> property to <code>null</code>,
+     *  and vice versa.</p>
+     *
+     *  @default ""
+     *
+     *  @see #htmlText
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get location():String
+    {
+        return _location;
+    }
+
+    /**
+     *  @private
+     */
+    public function set location(value:String):void
+    {
+        _location = value;
+        locationChanged = true;
+
+        // Setting both location and htmlText doesn't make sense,
+        // so setting one sets the other to null,
+        // and the last one set is applied in commitProperties().
+        _htmlText = null;
+        htmlTextChanged = false;
+
+        invalidateProperties();
+        invalidateSize();
+        invalidateDisplayList();
+
+        dispatchEvent(new Event("locationChange"));
+    }
+
+    //----------------------------------
+    //  paintsDefaultBackground
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the paintsDefaultBackground property.
+     */
+    private var _paintsDefaultBackground:Boolean;
+
+    /**
+     *  @private
+     */
+    private var paintsDefaultBackgroundChanged:Boolean = false;
+
+    /**
+     *  Whether this control's HTML content
+     *  has a default opaque white background or not.
+     *
+     *  <p>If this property is <code>false</code>,
+     *  then the background specified for this Flex control, if any,
+     *  appears behind the HTML content.</p>
+     *
+     *  <p>However, if any HTML element has its own opaque background color
+     *  (specified by style="background-color:gray", for instance),
+     *  then that background appears behind that element.</p>
+     * 
+     *  @default false;
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get paintsDefaultBackground():Boolean
+    {
+        return _paintsDefaultBackground;
+    }
+
+    /**
+     *  @private
+     */
+    public function set paintsDefaultBackground(value:Boolean):void
+    {
+        _paintsDefaultBackground = value;
+        paintsDefaultBackgroundChanged = true;
+
+        invalidateProperties();
+    }
+
+    //----------------------------------
+    //  runtimeApplicationDomain
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the runtimeApplicationDomain property.
+     */
+    private var _runtimeApplicationDomain:ApplicationDomain;
+
+    /**
+     *  @private
+     */
+    private var runtimeApplicationDomainChanged:Boolean = false;
+
+    /**
+     *  The ApplicationDomain to use for HTML's <code>window.runtime</code>
+     *  scripting.
+     *
+     *  <p>If this property is <code>null</code>, or if it specifies
+     *  an ApplicationDomain from a different security domain
+     *  than the HTML content, the HTML page uses a default
+     *  <code>ApplicationDomain</code> for the page's domain.</p>
+     *
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get runtimeApplicationDomain():ApplicationDomain
+    {
+        return _runtimeApplicationDomain;
+    }
+
+    /**
+     *  @private
+     */
+    public function set runtimeApplicationDomain(value:ApplicationDomain):void
+    {
+        _runtimeApplicationDomain = value;
+        runtimeApplicationDomainChanged = true;
+
+        invalidateProperties();
+    }
+
+    //----------------------------------
+    //  userAgent
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the userAgent property.
+     */
+    private var _userAgent:String;
+
+    /**
+     *  @private
+     */
+    private var userAgentChanged:Boolean = false;
+
+    /**
+     *  The user agent string to be used in content requests
+     *  from this control.
+     *
+     *  <p>You can set the default user agent string used by all
+     *  HTML controls in an application domain by setting the
+     *  static <code>URLRequestDefaults.userAgent</code> property.
+     *  If no value is set for the <code>userAgent</code> property
+     *  (or if the value is set to <code>null</code>),
+     *  the user agent string is set to the value of
+     *  <code>URLRequestDefaults.userAgent</code>.</p>
+     *
+     *  <p>If neither the <code>userAgent</code> property
+     *  of this control nor for <code>URLRequestDefaults.userAgent</code>,
+     *  has a value set, a default value is used as the user agent string.
+     *  This default value varies depending on the runtime
+     *  operating system (such as Mac OS or Windows),
+     *  the runtime language, and the runtime version,
+     *  as in the following two examples:</p>
+     *
+     *  <pre>
+     *  "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"
+     *  "Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"
+     *  </pre>
+     *
+     *  @default null
+     *
+     *  @see flash.net.URLRequest#userAgent
+     *  @see flash.net.URLRequestDefaults#userAgent
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get userAgent():String
+    {
+        return _userAgent;
+    }
+
+    /**
+     *  @private
+     */
+    public function set userAgent(value:String):void
+    {
+        _userAgent = value;
+        userAgentChanged = true;
+
+        invalidateProperties();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override protected function createChildren():void
+    {
+        super.createChildren();
+
+      /*  if (!htmlLoader)
+        {
+            htmlLoader = htmlLoaderFactory.newInstance();
+
+            htmlLoader.addEventListener(
+                Event.HTML_DOM_INITIALIZE, htmlLoader_domInitialize);
+
+            htmlLoader.addEventListener(
+                Event.COMPLETE, htmlLoader_completeHandler);
+
+            htmlLoader.addEventListener(
+                Event.HTML_RENDER, htmlLoader_htmlRenderHandler);
+
+             htmlLoader.addEventListener(
+                Event.LOCATION_CHANGE, htmlLoader_locationChangeHandler);
+
+            htmlLoader.addEventListener(
+                Event.HTML_BOUNDS_CHANGE, htmlLoader_htmlBoundsChangeHandler);
+
+            htmlLoader.addEventListener(
+                Event.SCROLL, htmlLoader_scrollHandler);
+
+            htmlLoader.addEventListener(
+                HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION,
+                htmlLoader_uncaughtScriptExceptionHandler);
+
+            addChild(htmlLoader); 
+        } */
+    }
+
+    /**
+     *  @private
+     */
+    override protected function commitProperties():void
+    {
+        super.commitProperties();
+
+        // Change the properties of the HTMLLoader
+        // before calling its load() or loadString() method.
+
+        if (htmlHostChanged)
+        {
+            //htmlLoader.htmlHost = _htmlHost;
+            htmlHostChanged = false;
+        }
+
+        if (paintsDefaultBackgroundChanged)
+        {
+            //htmlLoader.paintsDefaultBackground = _paintsDefaultBackground;
+            paintsDefaultBackgroundChanged = false;
+        }
+
+        if (runtimeApplicationDomainChanged)
+        {
+            //htmlLoader.runtimeApplicationDomain = _runtimeApplicationDomain;
+            runtimeApplicationDomainChanged = false;
+        }
+
+        if (userAgentChanged)
+        {
+           // htmlLoader.userAgent = _userAgent;
+            userAgentChanged = false;
+        }
+
+        if (locationChanged)
+        {
+            //htmlLoader.load(new URLRequest(_location));
+            locationChanged = false;
+        }
+
+        if (htmlTextChanged)
+        {
+            //htmlLoader.loadString(_htmlText);
+            htmlTextChanged = false;
+        }
+    }
+
+    /**
+     *  @private
+     */
+    override protected function measure():void
+    {
+        super.measure();
+
+      /*   var em:EdgeMetrics = viewMetrics;
+
+        em.left += getStyle("paddingLeft");
+        em.top += getStyle("paddingTop");
+        em.right += getStyle("paddingRight");
+        em.bottom += getStyle("paddingBottom");
+
+        measuredWidth = Math.min(htmlLoader.contentWidth + em.left + em.right,
+                                 MAX_HTML_WIDTH);
+        measuredHeight = Math.min(htmlLoader.contentHeight + em.top + em.bottom,
+                                  MAX_HTML_HEIGHT); */
+
+        //trace("measure", htmlLoader.contentWidth, htmlLoader.contentHeight, measuredWidth, measuredHeight);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number,
+                                                  unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+      /*  var em:EdgeMetrics = viewMetrics;
+
+        em.left += getStyle("paddingLeft");
+        em.top += getStyle("paddingTop");
+        em.right += getStyle("paddingRight");
+        em.bottom += getStyle("paddingBottom");
+
+        htmlLoader.x = em.left;
+        htmlLoader.y = em.top;
+
+        // The width and height of an HTMLLoader can't be 0.
+        var w:Number = Math.max(unscaledWidth - em.left - em.right, 1);
+        var h:Number = Math.max(unscaledHeight - em.top - em.bottom, 1);
+
+        htmlLoader.width = w;
+        htmlLoader.height = h; */
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Cancels any load operation in progress.
+     *
+     *  <p>This method does nothing if it is called before this component's
+     *  internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function cancelLoad():void
+		{
+			if (htmlLoader)
+				htmlLoader.cancelLoad();
+		}
+	}
+
+    /**
+     *  Returns the HTMLHistoryItem at the specified position
+     *  in this control's history list.
+     *
+     *  <p>This method returns <code>null</code> if it is called before this
+     *  component's internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *
+     *  @param position The position in the history list.
+     *
+     *  @return A HTMLHistoryItem object
+     *  for the history entry  at the specified position.
+     *
+     *  @see historyPosition
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+  /*  public function getHistoryAt(position:int):HTMLHistoryItem
+    {
+        if (!htmlLoader)
+            return null;
+
+        return htmlLoader.getHistoryAt(position);
+    } */
+
+    /**
+     *  Navigates back in this control's history list, if possible.
+     *
+     *  <p>Calling this method of the HTMLLoader object
+     *  has the same effect as calling the <code>back()</code> method
+     *  of the <code>window.history</code> property in JavaScript
+     *  in the HTML content.</p>
+     *
+     *  <p>This method does nothing if it is called before this component's
+     *  internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *
+     *  @see #historyPosition
+     *  @see #historyForward()
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function historyBack():void
+		{
+			if (htmlLoader)
+				htmlLoader.historyBack();
+		}
+	}
+
+    /**
+     *  Navigates forward in this control's history list, if possible.
+     *
+     *  <p>Calling this method of the HTMLLoader object
+     *  has the same effect as calling the <code>forward()</code> method
+     *  of the <code>window.history</code> property in JavaScript
+     *  in the HTML content.</p>
+     *
+     *  <p>This function throws no errors.</p>
+     *
+     *  <p>This method does nothing if it is called before this component's
+     *  internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *
+     *  @see #historyPosition
+     *  @see #historyBack()
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function historyForward():void
+		{
+			if (htmlLoader)
+				htmlLoader.historyForward();
+		}
+	}
+
+    /**
+     *  Navigates the specified number of steps in this control's history list.
+     *
+     *  <p>This method navigates forward if the number of steps
+     *  is positive and backward if it is negative.
+     *  Navigation by zero steps is equivalent
+     *  to calling <code>reload()</code>.</p>
+     *
+     *  <p>This method is equivalent to calling the <code>go()</code> method
+     *  of the <code>window.history</code> property in JavaScript
+     *  in the HTML content.</p>
+     *
+     *  <p>This method does nothing if it is called before this component's
+     *  internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *
+     *  @param steps The number of steps in the history list
+     *  to move forward (positive) or backward (negative).
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function historyGo(steps:int):void
+		{
+			if (htmlLoader)
+				htmlLoader.historyGo(steps);
+		}
+	}
+
+    /**
+     *  Reloads the HTML content from the current <code>location</code>.
+     *
+     *  <p>This method does nothing if it is called before this component's
+     *  internal HTMLLoader (the <code>htmlLoader</code> property) has been created.</p>
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+	COMPILE::SWF {
+		public function reload():void
+		{
+			if (htmlLoader)
+				htmlLoader.reload();
+		}
+	}
+
+    /**
+     *  @private
+     */
+    private function adjustScrollBars():void
+    {
+        /* setScrollBarProperties(htmlLoader.contentWidth, htmlLoader.width,
+                               htmlLoader.contentHeight, htmlLoader.height); */
+
+        // This is a temporary solution for adjusting the speed of scrolling
+        // via scrollbar arrows. There isn't a lot of overhead here, but
+        // we still shouldn't have to set these values every time
+        // updateDisplayList() is called.
+		
+        /* if (verticalScrollBar)
+            verticalScrollBar.lineScrollSize = 20;
+        if (horizontalScrollBar)
+            horizontalScrollBar.lineScrollSize = 20; */
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden event handlers: ScrollControlBase
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Gets called by internal field so we draw a focus rect around us.
+     */
+    override protected function focusInHandler(event:FocusEvent):void
+    {
+        super.focusInHandler(event);
+
+      /*  if (_imeMode != null && 
+            (htmlLoader is IIMESupport && IIMESupport(htmlLoader).enableIME))
+        {
+            // When IME.conversionMode is unknown it cannot be
+            // set to anything other than unknown(English)
+            try
+            {
+                if (!errorCaught &&
+                    IME.conversionMode != IMEConversionMode.UNKNOWN)
+                {
+                    IME.conversionMode = _imeMode;
+                }
+                errorCaught = false;
+            }
+            catch(e:Error)
+            {
+                // Once an error is thrown, focusIn is called 
+                // again after the Alert is closed, throw error 
+                // only the first time.
+                errorCaught = true;
+                var message:String = resourceManager.getString(
+                    "controls", "unsupportedMode", [ _imeMode ]);
+                throw new Error(message);
+            }
+        } */
+    }
+
+    /**
+     *  @private
+     */
+    /* override */ protected function scrollHandler(event:Event):void
+    {
+        //super.scrollHandler(event);
+
+       //htmlLoader.scrollH = horizontalScrollPosition;
+       // htmlLoader.scrollV = verticalScrollPosition;
+    }
+
+    /**
+     *  @private
+     */
+    /* override */ protected function mouseWheelHandler(event:MouseEvent):void
+    {
+        // Ignore mouseWheel events that are bubbling up
+        // from the HTMLLoader; they have already been handled there.
+        if (event.target != this)
+            return;
+
+        // Magnify the scrolling to approximate what browsers do.
+        event.delta *= 6;
+
+       // super.mouseWheelHandler(event);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_domInitialize(event:Event):void
+    {
+         dispatchEvent(event);
+    }
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_completeHandler(event:Event):void
+    {
+         invalidateSize();
+
+         dispatchEvent(event);
+    }
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_htmlRenderHandler(event:Event):void
+    {
+        dispatchEvent(event);
+
+        adjustScrollBars();
+
+        // we record this property here becuase it seems to
+        // change as you interact with the content
+       // hasFocusableChildren = htmlLoader.hasFocusableContent;
+    }
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_locationChangeHandler(event:Event):void
+    {
+        /*var change:Boolean = _location != htmlLoader.location;
+
+        _location = htmlLoader.location;
+
+        if (change)
+            dispatchEvent(event); */
+    }
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_htmlBoundsChangeHandler(event:Event):void
+    {
+        invalidateSize();
+
+        adjustScrollBars();
+    }
+
+    /**
+     *  @private
+     */
+    private function htmlLoader_scrollHandler(event:Event):void
+    {
+        //horizontalScrollPosition = htmlLoader.scrollH;
+        //verticalScrollPosition = htmlLoader.scrollV;
+    }
+
+    /**
+     *  @private
+     */
+  /*  private function htmlLoader_uncaughtScriptExceptionHandler(
+                            event:HTMLUncaughtScriptExceptionEvent):void
+    {
+        var clonedEvent:Event = event.clone();
+
+        dispatchEvent(clonedEvent);
+
+        if (clonedEvent.isDefaultPrevented())
+            event.preventDefault();
+    } */
+}
+
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
index 6a5b78c..7d22b9c 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
@@ -97,6 +97,7 @@
 
 	import org.apache.royale.core.ILayoutParent;
 	import org.apache.royale.core.ILayoutView;
+	import org.apache.royale.core.IHasLabelField;
 	
 	use namespace mx_internal;
 	
@@ -591,7 +592,7 @@
 	 *  @playerversion AIR 1.1
 	 *  @productversion Flex 3
 	 */
-	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView
+	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView, IHasLabelField
 	{
 		// include "../core/Version.as";
 		
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
index 1f781c6..72382a2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as
@@ -61,6 +61,7 @@
 import org.apache.royale.events.Event;

 import org.apache.royale.events.IEventDispatcher;

 import org.apache.royale.utils.loadBeadFromValuesManager;

+import org.apache.royale.core.IHasLabelField;

 

 use namespace mx_internal;

 

@@ -401,7 +402,7 @@
  *  @productversion Royale 0.9.3

  *  @royalesuppresspublicvarwarning

  */

-public class MenuBar extends UIComponent implements IFocusManagerComponent, IContainer, ILayoutParent

+public class MenuBar extends UIComponent implements IFocusManagerComponent, IContainer, ILayoutParent, IHasLabelField

 {

     //include "../core/Version.as";

 

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as
index 19df4c7..7c39b0b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/NavBar.as
@@ -46,6 +46,7 @@
 //import mx.styles.StyleProtoChain;
 
 import mx.utils.RoyaleUtil;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -134,7 +135,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class NavBar extends Box
+public class NavBar extends Box implements IHasLabelField
 {
    // include "../core/Version.as";
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
index 16cf76e..8ba48a4 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/PopUpMenuButton.as
@@ -35,6 +35,7 @@
 
 import org.apache.royale.events.Event;
 import org.apache.royale.events.IEventDispatcher;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -129,7 +130,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class PopUpMenuButton extends PopUpButton
+public class PopUpMenuButton extends PopUpButton implements IHasLabelField
 {
     //include "../core/Version.as";
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/TextArea.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/TextArea.as
index c4c3636..427c490 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/TextArea.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/TextArea.as
@@ -54,6 +54,8 @@
 
 import org.apache.royale.core.ITextModel;
 import org.apache.royale.events.Event;
+import org.apache.royale.core.TextLineMetrics;
+import mx.core.IUITextField;
 
 /*
 import mx.events.ScrollEvent;
@@ -582,7 +584,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-//    protected var textField:IUITextField;
+   protected var textField:IUITextField;
 
     //----------------------------------
     //  verticalScrollPosition
@@ -2074,6 +2076,22 @@
 //            verticalScrollPosition = _vScrollPosition;
     }
 
+    override public function getExplicitOrMeasuredWidth():Number
+    {
+        if (!isNaN(explicitWidth))
+            return explicitWidth;
+        measure()
+        return measuredWidth;
+    }
+
+    override public function getExplicitOrMeasuredHeight():Number
+    {
+        if (!isNaN(explicitHeight))
+            return explicitHeight;
+        measure()
+        return measuredHeight;
+    }
+
     /**
      *  @private
      */
@@ -2081,10 +2099,11 @@
     {
         super.measure();
 
-//        measuredMinWidth = DEFAULT_MEASURED_MIN_WIDTH;
-//        measuredWidth = DEFAULT_MEASURED_WIDTH;
-//        // TextArea is minimum of two lines of text
-//        measuredMinHeight = measuredHeight = 2 * DEFAULT_MEASURED_MIN_HEIGHT;
+        measuredMinWidth = DEFAULT_MEASURED_MIN_WIDTH;
+        measuredWidth = DEFAULT_MEASURED_WIDTH;
+        // TextArea is minimum of two lines of text
+        measuredMinHeight = measuredHeight = 2 * DEFAULT_MEASURED_MIN_HEIGHT;
+
     }
 
     /**
@@ -2287,10 +2306,12 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 3
      */
-//    public function getLineMetrics(lineIndex:int):TextLineMetrics
-//    {
-//        return textField ? textField.getLineMetrics(lineIndex) : null;
-//    }
+    public function getLineMetrics(lineIndex:int):TextLineMetrics
+    {
+        trace("getLineMetrics in mx:TextArea is not implemented");
+		return null;
+		//return textField ? textField.getLineMetrics(lineIndex) : null;
+    }
 
     /**
      *  Selects the text in the range specified by the parameters.
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ToggleButtonBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ToggleButtonBar.as
index 77dc8c4..893959d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ToggleButtonBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ToggleButtonBar.as
@@ -44,6 +44,7 @@
 import org.apache.royale.html.beads.models.ButtonBarModel;
 import org.apache.royale.utils.loadBeadFromValuesManager;
 import org.apache.royale.core.ILayoutHost;
+import org.apache.royale.core.IHasLabelField;
 
 
 //--------------------------------------
@@ -202,7 +203,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Royale 0.9.3
  */
-public class ToggleButtonBar extends UIComponent implements ILayoutParent, ILayoutView
+public class ToggleButtonBar extends UIComponent implements ILayoutParent, ILayoutView, IHasLabelField
 {
   //  include "../core/Version.as";
 	
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/VRule.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/VRule.as
index bf31013..4ac5b6f 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/VRule.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/VRule.as
@@ -23,7 +23,7 @@
 /* import flash.display.Graphics;*/

 import mx.core.UIComponent;

 

-import org.apache.royale.core.SimpleCSSStyles;
+import org.apache.royale.core.SimpleCSSStyles;

 

 //--------------------------------------

 //  Styles

@@ -199,7 +199,13 @@
             "borderLeftStyle" : "solid",

             "borderLeftColor" : "#000"

         }

-        style = values;

+        var currentStyle:Object = style;

+        if (currentStyle) {

+            for (var field:String in values) {

+                currentStyle[field] = values[field];

+            }

+        } else currentStyle = values;

+        style = currentStyle;

         super.addedToParent();

     }

     //--------------------------------------------------------------------------

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
index 66c3989..074fa74 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
@@ -1012,7 +1012,7 @@
     	throw new Error("Method not implemented.");
     }
 
-    public function get processedDescriptors():Boolean
+    /*public function get processedDescriptors():Boolean
     {
     	throw new Error("Method not implemented.");
     }
@@ -1020,7 +1020,7 @@
     public function set processedDescriptors(value:Boolean):void
     {
     	throw new Error("Method not implemented.");
-    }
+    }*/
 
     public function get updateCompletePendingFlag():Boolean
     {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
index 602093c..80c8739 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
@@ -18,43 +18,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.controls.advancedDataGridClasses
 {
+	import mx.collections.CursorBookmark;
 	import mx.collections.ICollectionView;
 	import mx.collections.IViewCursor;
-    import mx.collections.CursorBookmark;
-	import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList;
-    import mx.controls.beads.models.DataGridColumnICollectionViewModel;
-    import mx.core.IUIComponent;
-	
-	import org.apache.royale.collections.FlattenedList;
-	import org.apache.royale.collections.HierarchicalData;
-	import org.apache.royale.collections.ITreeData;
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IBeadModel;
-	import org.apache.royale.core.IDataProviderItemRendererMapper;
-	import org.apache.royale.core.IDataProviderModel;
-	import org.apache.royale.core.IItemRendererClassFactory;
+
 	import org.apache.royale.core.IItemRendererOwnerView;
-	import org.apache.royale.core.IListPresentationModel;
-	import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.ILabelFieldItemRenderer;
-    import org.apache.royale.core.IListDataItemRenderer;
-    import org.apache.royale.core.IIndexedItemRendererInitializer;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IStrandWithModelView;
-	import org.apache.royale.core.IUIBase;
-	import org.apache.royale.core.SimpleCSSStyles;
-	import org.apache.royale.core.UIBase;
-	import org.apache.royale.core.ValuesManager;
-	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
-	import org.apache.royale.events.ItemRendererEvent;
-	import org.apache.royale.html.List;
 	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.html.beads.VirtualDataItemRendererFactoryBase;
-	import org.apache.royale.html.supportClasses.DataItemRenderer;
-	import org.apache.royale.html.supportClasses.TreeListData;
 	
     /**
      *  The DataItemRendererFactoryForHierarchicalData class reads a
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
index 40f8d4b..cd9dd47 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
@@ -21,23 +21,13 @@
 
 
 	import mx.controls.DataGrid;
-	import mx.controls.dataGridClasses.DataGridListArea;
-
-    import org.apache.royale.core.Bead;
-    import org.apache.royale.core.IDataProviderModel;
-    import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.IIndexedItemRendererInitializer;
-    import org.apache.royale.core.IItemRenderer;
-    import org.apache.royale.core.IListDataItemRenderer;
-    import org.apache.royale.core.ILabelFieldItemRenderer;
-    import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.SimpleCSSStyles;
-    import org.apache.royale.core.UIBase;
-    import mx.controls.dataGridClasses.DataGridListData;
+	import mx.controls.beads.models.DataGridColumnICollectionViewModel;
 	import mx.controls.dataGridClasses.DataGridColumnList;
-    import mx.controls.beads.models.DataGridColumnICollectionViewModel;
+	import mx.controls.dataGridClasses.DataGridListData;
 	import mx.core.UIComponent;
+
+	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IListDataItemRenderer;
     
 	/**
 	 *  The DataGridItemRendererInitializer class initializes item renderers
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ArrayMultiSelectionModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ArrayMultiSelectionModel.as
index 339204d..65b2498 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ArrayMultiSelectionModel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ArrayMultiSelectionModel.as
@@ -23,6 +23,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 	/**
 	 *  The ArrayMultiSelectionModel class is a selection model for
 	 *  a dataProvider that is an array. It assumes that items
@@ -36,7 +37,7 @@
 	 *  @productversion 0.9.7
 	 */
 
-	public class ArrayMultiSelectionModel extends EventDispatcher implements IMultiSelectionModel, IRollOverModel
+	public class ArrayMultiSelectionModel extends EventDispatcher implements IMultiSelectionModel, IRollOverModel, IHasLabelField
 	{
 		/**
 		 *  Constructor.
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
index e7966cb..2a7e0fa 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionICollectionViewModel.as
@@ -29,6 +29,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The SingleSelectionICollectionViewModel class is a selection model for
@@ -39,7 +40,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class SingleSelectionICollectionViewModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+	public class SingleSelectionICollectionViewModel extends EventDispatcher implements ISelectionModel, IRollOverModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionIListModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionIListModel.as
index 1f6544b..90085aa 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionIListModel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/SingleSelectionIListModel.as
@@ -24,6 +24,7 @@
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The SingleSelectionIListViewModel class is a selection model for
@@ -35,7 +36,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class SingleSelectionIListModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+	public class SingleSelectionIListModel extends EventDispatcher implements ISelectionModel, IRollOverModel, IHasLabelField
 	{
         /**
          *  Constructor.
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/SwatchPanel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/SwatchPanel.as
index c76fb29..117e073 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/SwatchPanel.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/SwatchPanel.as
@@ -27,7 +27,7 @@
 	import org.apache.royale.geom.Rectangle;

 	import mx.collections.IList;

 	import mx.collections.ArrayList;

-	import mx.controls.ColorPicker;

+    import org.apache.royale.core.IHasLabelField;

 /*

 import flash.display.DisplayObject;

 import flash.events.Event;

@@ -378,7 +378,7 @@
 /**

  *  @private

  */

-public class SwatchPanel extends UIComponent implements IFocusManagerContainer

+public class SwatchPanel extends UIComponent implements IFocusManagerContainer, IHasLabelField

 {

     //include "../../core/Version.as";

     

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
index cff0838..c2fa17d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridColumn.as
@@ -47,6 +47,7 @@
 import org.apache.royale.events.Event;
 import org.apache.royale.core.UIBase;
 import org.apache.royale.html.supportClasses.DataGridColumn;
+import org.apache.royale.core.IHasLabelField;
     
 //--------------------------------------
 //  Styles
@@ -206,7 +207,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class DataGridColumn extends org.apache.royale.html.supportClasses.DataGridColumn // implements IIMESupport
+public class DataGridColumn extends org.apache.royale.html.supportClasses.DataGridColumn implements IHasLabelField // IIMESupport
 {
     //--------------------------------------------------------------------------
     //
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridHeaderRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridHeaderRenderer.as
index 628abeb..f3d21e9 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridHeaderRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridHeaderRenderer.as
@@ -1010,7 +1010,7 @@
     	throw new Error("Method not implemented.");
     }
 
-    public function get processedDescriptors():Boolean
+    /*public function get processedDescriptors():Boolean
     {
     	throw new Error("Method not implemented.");
     }
@@ -1018,7 +1018,7 @@
     public function set processedDescriptors(value:Boolean):void
     {
     	throw new Error("Method not implemented.");
-    }
+    }*/
 
     public function get updateCompletePendingFlag():Boolean
     {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridListData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridListData.as
index 7cc4c7f..a286423 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridListData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridListData.as
@@ -22,6 +22,7 @@
 
 import mx.controls.listClasses.BaseListData;
 import mx.core.IUIComponent;
+import org.apache.royale.core.IHasDataField;
 
 /**
  *  The DataGridListData class defines the data type of the <code>listData</code> property that is
@@ -40,7 +41,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class DataGridListData extends BaseListData
+public class DataGridListData extends BaseListData implements IHasDataField
 {
 //	include "../../core/Version.as";
 
@@ -88,17 +89,17 @@
 	//
 	//--------------------------------------------------------------------------
 
-	[Bindable("__NoChangeEvent__")]
+	private var _dataField:String;
 
-    /**
-	 *  Name of the field or property in the data provider associated with the column. 
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public var dataField:String;
+	public function get dataField():String
+	{
+		return _dataField;
+	}
+
+	public function set dataField(value:String):void
+	{
+		_dataField = value;
+	}
 
 }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/AdvancedListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/AdvancedListBase.as
index 1822acb..a00d332 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/AdvancedListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/AdvancedListBase.as
@@ -640,7 +640,7 @@
      *  @playerversion AIR 1.1

      *  @productversion Royale 0.9.4

      */

-    protected var collection:ICollectionView;

+     /* protected */ public var collection:ICollectionView;

 

     /**

      *  The main IViewCursor instance used to fetch items from the

@@ -2527,7 +2527,7 @@
      *  @playerversion AIR 1.1

      *  @productversion Royale 0.9.4

      */

-    public function get selectable():Boolean

+    override public function get selectable():Boolean

     {

         return _selectable;

     }

@@ -2535,7 +2535,7 @@
     /**

      *  @private

      */

-    public function set selectable(value:Boolean):void

+    override public function set selectable(value:Boolean):void

     {

         _selectable = value;

     }

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
index 79696e7..f8db1d6 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataGridListBase.as
@@ -36,7 +36,7 @@
 import flash.utils.clearInterval;
 import flash.utils.setInterval;
 
-import mx.collections.ArrayCollection;
+
 */
 COMPILE::SWF{
     import flash.display.DisplayObject;
@@ -51,6 +51,7 @@
 import mx.collections.IViewCursor;
 import mx.collections.Sort;
 import mx.collections.SortField;
+import mx.collections.ArrayCollection;
 import mx.controls.beads.DataGridView;
 import mx.controls.beads.layouts.DataGridLayout;
 import mx.controls.dataGridClasses.DataGridColumn;
@@ -582,16 +583,18 @@
 
     /**
      *  @private
+     *  @royaleignorecoercion Array
      */
     override public function set dataProvider(value:Object):void
     {
         if (collection)
             collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
 
+        if (value is Array) value = new ArrayCollection(value as Array);
         collection = value as ICollectionView;
         if (collection)
 		{
-        		collection.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
+        	collection.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
 	        iterator = collection.createCursor();
 	        collectionIterator = collection.createCursor(); //IViewCursor(collection);
 		}
@@ -674,7 +677,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.4
      */
-    protected var collection:ICollectionView;
+    /* protected */ public var collection:ICollectionView;
 
     /**
      *  The main IViewCursor instance used to fetch items from the
@@ -2570,7 +2573,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.4
      */
-    public function get selectable():Boolean
+    override public function get selectable():Boolean
     {
         return _selectable;
     }
@@ -2578,7 +2581,7 @@
     /**
      *  @private
      */
-    public function set selectable(value:Boolean):void
+    override public function set selectable(value:Boolean):void
     {
         _selectable = value;
     }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
index e49d36a..a42324a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
@@ -59,6 +59,7 @@
 import org.apache.royale.utils.loadBeadFromValuesManager;
 import mx.controls.dataGridClasses.DataGridListData;
 import mx.events.FlexEvent;
+import org.apache.royale.core.IHasLabelField;
 
 use namespace mx_internal;
 
@@ -168,7 +169,8 @@
 	*/
 	public class ListBase extends ScrollControlBase 
         implements IContainerBaseStrandChildrenHost, IContainer, ILayoutParent, 
-                    ILayoutView, IItemRendererProvider, IStrandWithPresentationModel
+                    ILayoutView, IItemRendererProvider, IStrandWithPresentationModel,
+                    IHasLabelField
 	{  //extends UIComponent
 	
 	
@@ -1932,6 +1934,48 @@
     {
         return NaN;
     }
+	
+	protected var collection:ICollectionView;
+	 
+	//----------------------------------
+    //  selectable
+    //----------------------------------
+
+    /**
+     *  @private
+     *  Storage for the selectable property.
+     */
+    private var _selectable:Boolean = true;
+
+    [Inspectable(defaultValue="true")]
+
+    /**
+     *  A flag that indicates whether the list shows selected items
+     *  as selected.
+     *  If <code>true</code>, the control supports selection.
+     *  The Menu class, which subclasses ListBase, sets this property to
+     *  <code>false</code> by default, because it doesn't show the chosen
+     *  menu item as selected.
+     *
+     *  @default true
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get selectable():Boolean
+    {
+        return _selectable;
+    }
+
+    /**
+     *  @private
+     */
+    public function set selectable(value:Boolean):void
+    {
+        _selectable = value;
+    }
     
 
     }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
index 4412721..7116cc8 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
@@ -313,7 +313,7 @@
     	throw new Error("Method not implemented.");
     }
 
-    public function get processedDescriptors():Boolean
+    /*public function get processedDescriptors():Boolean
     {
     	throw new Error("Method not implemented.");
     }
@@ -321,7 +321,7 @@
     public function set processedDescriptors(value:Boolean):void
     {
     	throw new Error("Method not implemented.");
-    }
+    }*/
 
     public function get updateCompletePendingFlag():Boolean
     {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
index 0bb8a7f..0bc413d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/treeClasses/TreeItemRenderer.as
@@ -66,6 +66,7 @@
 import org.apache.royale.html.supportClasses.TreeListData;
 import org.apache.royale.core.IItemRendererOwnerView;
 import org.apache.royale.core.ISelectableItemRenderer;
+import org.apache.royale.core.IHasLabelField;
 
 /**
  *  The TreeItemRenderer class defines the default item renderer for a Tree control. 
@@ -84,7 +85,7 @@
  *  @productversion Flex 3
  */
 public class TreeItemRenderer extends UIComponent 
-    implements IDataRenderer, IDropInListItemRenderer, IItemRenderer, ILabelFieldItemRenderer
+    implements IDataRenderer, IDropInListItemRenderer, IItemRenderer, ILabelFieldItemRenderer, IHasLabelField
 {
    
 
@@ -270,6 +271,11 @@
     
     protected function dataToString(value:Object):String
     {
+        if (value is XML && labelField && labelField.indexOf("@") > -1)
+        {
+            var attName:String = labelField.split("@")[1] as String;
+            return (value as XML).attribute(attName).toString();
+        }
         return getLabelFromData(this,value);
     }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
index 9c64770..789e0fe 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Container.as
@@ -19,7 +19,9 @@
 
 package mx.core
 {
-    import org.apache.royale.binding.ContainerDataBinding;
+import mx.events.ChildExistenceChangedEvent;
+
+import org.apache.royale.binding.ContainerDataBinding;
     import org.apache.royale.binding.DataBindingBase;
     import org.apache.royale.core.ContainerBaseStrandChildren;
     import org.apache.royale.core.IBeadLayout;
@@ -81,6 +83,7 @@
 import mx.events.FlexEvent;
 import mx.events.IndexChangedEvent;
 import mx.managers.IFocusManagerContainer;
+import org.apache.royale.utils.MXMLDataInterpreter;
 
 COMPILE::SWF
 {
@@ -1086,25 +1089,110 @@
 			// each MXML file can also have styles in fx:Style block
 			ValuesManager.valuesImpl.init(this);
 		}
-		
-		super.addedToParent();		
-		
+		const noChildrenNow:Boolean = creationPolicy == 'none';
+
+        if (noChildrenNow) _deferSetInitialized = true;
+		super.addedToParent();
+
 		// Load the layout bead if it hasn't already been loaded.
 		loadBeadFromValuesManager(IBeadLayout, "iBeadLayout", this);
-        dispatchEvent(new Event("initComplete"));
-        if ((isHeightSizedToContent() || !isNaN(explicitHeight)) &&
-            (isWidthSizedToContent() || !isNaN(explicitWidth)))
-			dispatchEvent(new Event("layoutNeeded"));
+        if (!noChildrenNow) {
+            //we don't want to run the states etc, they will error at this point
+            dispatchEvent(new Event("initComplete"));
+            if ((isHeightSizedToContent() || !isNaN(explicitHeight)) &&
+                    (isWidthSizedToContent() || !isNaN(explicitWidth)))
+                dispatchEvent(new Event("layoutNeeded"));
+        }
+
 	}
+
+
+    override public function initialize():void
+    {
+        if (initialized)
+            return;
+
+        if (creationPolicy == 'none') {
+            _deferSetInitialized = true;
+            dispatchEvent(new FlexEvent(FlexEvent.PREINITIALIZE));
+
+            _measuredWidth = NaN;
+            _measuredHeight = NaN;
+
+            // This should always be the last thing that initialize() calls.
+            initializationComplete();
+            return;
+        }
+        super.initialize();
+    }
 	
     override protected function createChildren():void
     {
+        if (creationPolicy == 'none') return;
         super.createChildren();
-        
-        if (getBeadByType(DataBindingBase) == null && '_bindings' in this /*mxmlDocument == this*/)
-            addBead(new ContainerDataBinding());
+        if ('_bindings' in this) {
+            if (getBeadByType(DataBindingBase) == null) {
+                addBead(new ContainerDataBinding());
+            }
+            dispatchEvent(new Event("initBindings"));
+        }
+    }
 
-        dispatchEvent(new Event("initBindings"));
+
+    private var _deferSetInitialized:Boolean;
+    /**
+     *  @private
+     */
+    override public function set initialized(value:Boolean):void
+    {
+        if (value && !_deferSetInitialized) {
+            dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
+            super.initialized = value;
+        } else {
+            _deferSetInitialized = false;
+        }
+    }
+
+
+    override protected function initializationComplete():void
+    {
+        // Don't call super.initializationComplete().
+        //variation to flex sdk
+        //did we already create content ?
+        if (creationPolicy != 'none') {
+            super.initializationComplete();
+        }
+    }
+
+    /**
+     *  Performs the equivalent action of calling
+     *  the <code>createComponentsFromDescriptors(true)</code> method for containers
+     *  that implement the IDeferredContentOwner interface to support deferred instantiation.
+     *
+     *  @see #createComponentsFromDescriptors()
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function createDeferredContent():void
+    {
+        if (creationPolicy == 'none') {
+            creationPolicyNone = false;
+            _deferSetInitialized = false
+            createChildren();
+            //run the original addedToParent stuff
+            dispatchEvent(new Event("initComplete"));
+            if ((isHeightSizedToContent() || !isNaN(explicitHeight)) &&
+                    (isWidthSizedToContent() || !isNaN(explicitWidth)))
+                dispatchEvent(new Event("layoutNeeded"));
+
+            processedDescriptors = true;
+            creationPolicyNone = true;
+            //dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));
+            initialized = true;
+        }
     }
     
     /**
@@ -1152,13 +1240,78 @@
 	{
 		dispatchEvent( new Event("layoutNeeded") );
 	}
+
+
+
+    override mx_internal function addingChild(child:IUIBase):void
+    {
+
+        COMPILE::SWF{
+            //was
+            // Throw an RTE if child is not an IUIComponent.
+            //var uiChild:IUIComponent = IUIComponent(child);
+            if (!(child is IUIComponent)) {
+                //commented out for now, to allow legacy mustella tests to pass in swf
+              //  trace('this is child is not an IUIComponent', child )
+               // throw new Error('child is not IUIComponent '+child)
+            }
+
+        }
+
+
+        // Set the child's virtual parent, nestLevel, document, etc.
+        super.addingChild(child);
+
+        invalidateSize();
+        invalidateDisplayList();
+
+        /*if (!contentPane)
+        {
+            // If this is the first content child, then any chrome
+            // that already exists is positioned in front of it.
+            // If other content children already existed, then set the
+            // depth of this object to be just behind the existing
+            // content children.
+            if (_numChildren == 0)
+                _firstChildIndex = super.numChildren;
+
+            // Increment the number of content children.
+            _numChildren++;
+        }
+
+        if (contentPane && !autoLayout)
+        {
+            forceLayout = true;
+            // weak reference
+            UIComponentGlobals.layoutManager.addEventListener(
+                    FlexEvent.UPDATE_COMPLETE, layoutCompleteHandler, false, 0, true);
+        }*/
+    }
 	
     /**
      *  @private
      */
     override mx_internal function childAdded(child:IUIBase):void
     {
-		super.addingChild(child);
+        if (hasEventListener("childrenChanged"))
+            dispatchEvent(new Event("childrenChanged"));
+
+        if (hasEventListener(ChildExistenceChangedEvent.CHILD_ADD))
+        {
+            var event:ChildExistenceChangedEvent =
+                    new ChildExistenceChangedEvent(
+                            ChildExistenceChangedEvent.CHILD_ADD);
+            event.relatedObject = child as UIComponent;
+            dispatchEvent(event);
+        }
+
+       /* if (child.hasEventListener(FlexEvent.ADD))
+            child.dispatchEvent(new FlexEvent(FlexEvent.ADD));*/
+
+        //why is this calling addingChild in the super?
+	//	super.addingChild(child);
+        super.childAdded(child);
+
 		if (parent)
 		{
 			var oldMeasuredWidth:Number = measuredWidth;
@@ -1175,12 +1328,36 @@
 		}
 	}
 
+
+    /**
+     *  @private
+     */
+    override mx_internal function removingChild(child:IUIBase):void
+    {
+        super.removingChild(child);
+
+       /* if (child.hasEventListener(FlexEvent.REMOVE))
+            child.dispatchEvent(new FlexEvent(FlexEvent.REMOVE));*/
+
+        if (hasEventListener(ChildExistenceChangedEvent.CHILD_REMOVE))
+        {
+            var event:ChildExistenceChangedEvent =
+                    new ChildExistenceChangedEvent(
+                            ChildExistenceChangedEvent.CHILD_REMOVE);
+            event.relatedObject = child as UIComponent;
+            dispatchEvent(event);
+        }
+    }
+
     /**
      *  @private
      */
     override mx_internal function childRemoved(child:IUIBase):void
     {
-		super.removingChild(child);
+        //why is this calling removingChild in the super?
+		//super.removingChild(child);
+
+        super.childRemoved(child);
 		if (parent)
 		{
 			var oldMeasuredWidth:Number = measuredWidth;
@@ -1701,9 +1878,10 @@
         // don't have this property (ie Group).
         // This style is an implementation detail and should be considered
         // private. Do not set it from CSS.
-        /*if (creationPolicyNone)
-            return ContainerCreationPolicy.NONE;*/
-        return getStyle("_creationPolicy");
+        if (creationPolicyNone)
+            return ContainerCreationPolicy.NONE;
+        //return getStyle("_creationPolicy");
+        return  getStyle("_creationPolicy");
     }
 
     /**
@@ -1712,8 +1890,7 @@
     public function set creationPolicy(value:String):void
     {
         var styleValue:String = value;
-        
-        /*if (value == ContainerCreationPolicy.NONE)
+        if (value == ContainerCreationPolicy.NONE)
         {
             // creationPolicy of none is not inherited by descendants.
             // In this case, set the style to "auto" and set a local
@@ -1724,12 +1901,14 @@
         else
         {
             creationPolicyNone = false;
-        }*/
-        
+        }
         setStyle("_creationPolicy", styleValue);
 
         //setActualCreationPolicies(value);
     }
+
+
+    [Bindable("childrenChanged")]
     /**
      *  Returns an Array of DisplayObject objects consisting of the content children 
      *  of the container.
@@ -1799,6 +1978,25 @@
         */
         return super.contentMouseY; 
     }
+
+    //----------------------------------
+    //  deferredContentCreated
+    //----------------------------------
+
+    /**
+     *  IDeferredContentOwner equivalent of processedDescriptors
+     *
+     *  @see UIComponent#processedDescriptors
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get deferredContentCreated():Boolean
+    {
+        return processedDescriptors;
+    }
 	
 	
 	    //----------------------------------
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDeferredContentOwner.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDeferredContentOwner.as
new file mode 100644
index 0000000..d9ca45f
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/IDeferredContentOwner.as
@@ -0,0 +1,103 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.core
+{
+
+/**
+ *  Dispatched after the content for this component has been created. With deferred 
+ *  instantiation, the content for a component can be created long after the 
+ *  component is created.
+ *
+ *  @eventType mx.events.FlexEvent.CONTENT_CREATION_COMPLETE
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+[Event(name="contentCreationComplete", type="mx.events.FlexEvent")]
+
+/**
+ *  The IDeferredContentOwner interface defines the properties and methods
+ *  for deferred instantiation.
+ * 
+ *  @see spark.components.SkinnableContainer
+ *  @see mx.core.Container
+ *  @see mx.core.INavigatorContent
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+public interface IDeferredContentOwner extends IUIComponent
+{
+    [Inspectable(enumeration="auto, all, none", defaultValue="auto")]
+
+    /**
+     *  Content creation policy for this component.
+     *
+     *  <p>Possible values are:
+     *    <ul>
+     *      <li><code>auto</code> - Automatically create the content immediately before it is needed.</li>
+     *      <li><code>all</code> - Create the content as soon as the parent component is created. This
+     *          option should only be used as a last resort because it increases startup time and memory usage.</li>
+     *      <li><code>none</code> - Content must be created manually by calling 
+     *          the <code>createDeferredContent()</code> method.</li>
+     *    </ul>
+     *  </p>
+     *  
+     *  <p>If no <code>creationPolicy</code> is specified for a container, that container inherits the value of 
+     *  its parent's <code>creationPolicy</code> property.</p>
+     *
+     *  @default "auto"
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    function get creationPolicy():String;
+    function set creationPolicy(value:String):void;
+
+    /**
+     *  Create the content for this component. If the value of the <code>creationPolicy</code> property
+     *  is <code>auto</code> or <code>all</code>, this the Flex framework calls this method. If the value of the 
+     *  <code>creationPolicy</code> property is <code>none</code>, you must explicitly call this method
+     *  to create the content for the component.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    function createDeferredContent():void;
+
+    /**
+     *  A flag that indicates whether the deferred content has been created.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    function get deferredContentCreated():Boolean;
+}
+
+}
\ No newline at end of file
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/INavigatorContent.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/INavigatorContent.as
index 0733639..f5f8c22 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/INavigatorContent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/INavigatorContent.as
@@ -36,7 +36,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public interface INavigatorContent extends IEventDispatcher,IUIComponent, IToolTipManagerClient // IDeferredContentOwner
+public interface INavigatorContent extends IEventDispatcher,IUIComponent,IDeferredContentOwner, IToolTipManagerClient
 {
     [Bindable("labelChanged")]
     /**
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/LayoutElementUIComponentUtils.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/LayoutElementUIComponentUtils.as
index 7147d24..70ba5e2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/LayoutElementUIComponentUtils.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/LayoutElementUIComponentUtils.as
@@ -20,6 +20,7 @@
 {
 //import flash.geom.Matrix;
 //import flash.geom.Matrix3D;
+	import org.apache.royale.core.ILayoutChild;
 import org.apache.royale.geom.Point;
 
 //import mx.utils.MatrixUtil;
@@ -588,5 +589,52 @@
             obj.setActualSize(fitSize.x, fitSize.y);
         */
     }
+    
+	/**
+	 *  Set size of target based on size of child.
+	 *
+	 *  This sets the proper explicitXX and percentXX values either way
+	 *  (parent from child, or child from parent).  The values are
+	 *  different depending on which direction, but they are proper to 
+	 *  handle all cases.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.8
+	 */
+	public static function setSizeFromChild(target:ILayoutChild, child:ILayoutChild):void
+	{
+		setWidthFromChild(target, child);
+		setHeightFromChild(target, child);
+	}
+
+	public static function setWidthFromChild(target:ILayoutChild, child:ILayoutChild):void
+	{
+		if (!isNaN(child.percentWidth))
+		{
+			target.explicitWidth = NaN;
+			target.percentWidth = 100;
+		}
+		else
+		{
+			target.explicitWidth = child.explicitWidth;
+			target.percentWidth = NaN;
+		}
+	}
+
+	public static function setHeightFromChild(target:ILayoutChild, child:ILayoutChild):void
+	{
+		if (!isNaN(child.percentHeight))
+		{
+			target.explicitHeight = NaN;
+			target.percentHeight = 100;
+		}
+		else
+		{
+			target.explicitHeight = child.explicitHeight;
+			target.percentHeight = NaN;
+		}
+	}
 }
 }
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
index b37c5f6..7efdf5d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
@@ -39,6 +39,8 @@
 
 import mx.controls.beads.ToolTipBead;
 import mx.core.mx_internal;
+import mx.managers.IToolTipManagerClient;
+
 COMPILE::SWF
 {
 import flash.display.DisplayObject;
@@ -761,7 +763,7 @@
     IMXMLDocument,
     IInvalidating,
     IStatesObject,
-    ISimpleStyleClient,
+    ISimpleStyleClient,IToolTipManagerClient,
     IUIComponent, IVisualElement, IFlexModule, IValidatorListener
 {
     //--------------------------------------------------------------------------
@@ -1123,6 +1125,10 @@
 
         if (value)
         {
+            if (_needsLayout) {
+                //invalidateSize();
+                dispatchEvent(new Event('layoutNeeded'));
+            }
             dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE));
         }
     }
@@ -1726,6 +1732,23 @@
     {
         _owner = value;
     }
+	
+	//----------------------------------
+    //  automationOwner
+    //----------------------------------
+    
+    /**
+     *  @inheritDoc
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 4
+     */
+    public function get automationOwner():IUIComponent
+    {
+        return owner;
+    }
 
     //----------------------------------
     //  doubleClickEnabled
@@ -1767,7 +1790,7 @@
     public function set doubleClickEnabled(value:Boolean):void
     {
         // TODO
-        trace("doubleClickEnabled not implemented");
+        if (doTraceNI) trace("doubleClickEnabled not implemented");
     }
 
     //----------------------------------
@@ -2686,16 +2709,21 @@
                 if (oldWidth.length)
                     this.positioner.style.width = "";
                 var mw:Number = this.positioner.offsetWidth;
-                if (mw == 0 && numChildren > 0)
+                if (mw == 0 && _initialized && numChildren > 0)
                 {
                     // if children are aboslute positioned, offsetWidth can be 0 in Safari
                     for (var i:int = 0; i < numChildren; i++)
                     {
                         var child:IUIComponent = getChildAt(i);
-                        if (child) // child is null for TextNodes
+                        //@todo investigate traces
+                        if (child is IUIComponent) // child is null for TextNodes
                             mw = Math.max(mw, child.getExplicitOrMeasuredWidth());
-                        else
-                            trace("Child class not IUIComponent: " + getQualifiedClassName(getElementAt(i)));
+                        else {
+                            if (child is IUIBase) {
+                                mw = Math.max(mw, child.width);
+                            }
+                            trace(getQualifiedClassName(this) + " Child class not IUIComponent: " + getQualifiedClassName(getElementAt(i)));
+                        }
                     }
                 }
                 if (oldWidth.length)
@@ -2763,15 +2791,20 @@
                 if (oldHeight.length)
                     this.positioner.style.height = "";
                 var mh:Number = this.positioner.offsetHeight;
-                if (mh == 0 && numChildren > 0)
+                if (mh == 0 && _initialized && numChildren > 0)
                 {
                     for (var i:int = 0; i < numChildren; i++)
                     {
                         var child:IUIComponent = getChildAt(i);
-                        if (child)
+                        //@todo investigate traces
+                        if (child is IUIComponent) // child is null for TextNodes
                             mh = Math.max(mh, child.getExplicitOrMeasuredHeight());
-                        else
-                            trace("Child class not IUIComponent: " + getQualifiedClassName(getElementAt(i)));
+                        else {
+                            if (child is IUIBase) {
+                                mh = Math.max(mh, child.height);
+                            }
+                            trace(getQualifiedClassName(this) + " Child class not IUIComponent: " + getQualifiedClassName(getElementAt(i)));
+                        }
                     }
                 }
                 if (oldHeight.length)
@@ -4006,8 +4039,8 @@
 			var n:int = arr.length;
 			var num:int = 0;
 			for (var i:int = 0; i < n; i++)
-			{
-				if ((arr[i] as WrappedHTMLElement).royale_wrapper)
+			{   //@todo review issuses with internal native support that points to 'this' (2nd check below), can cause infinite recursion in measurement if avoided:
+				if ((arr[i] as WrappedHTMLElement).royale_wrapper && (arr[i] as WrappedHTMLElement).royale_wrapper != this)
 					num++;
 			}
 			return num;
@@ -4193,8 +4226,62 @@
      */
     protected function initializationComplete():void
     {
-        dispatchEvent(new FlexEvent(FlexEvent.INITIALIZE));
+        layoutDeferred = false;
+        processedDescriptors = true;
     }
+
+        //----------------------------------
+        //  processedDescriptors
+        //----------------------------------
+
+        /**
+         *  @private
+         *  Storage for the processedDescriptors property.
+         */
+        private var _processedDescriptors:Boolean = false;
+
+        [Inspectable(environment="none")]
+
+        /**
+         *  Set to <code>true</code> after immediate or deferred child creation,
+         *  depending on which one happens. For a Container object, it is set
+         *  to <code>true</code> at the end of
+         *  the <code>createComponentsFromDescriptors()</code> method,
+         *  meaning after the Container object creates its children from its child descriptors.
+         *
+         *  <p>For example, if an Accordion container uses deferred instantiation,
+         *  the <code>processedDescriptors</code> property for the second pane of
+         *  the Accordion container does not become <code>true</code> until after
+         *  the user navigates to that pane and the pane creates its children.
+         *  But, if the Accordion had set the <code>creationPolicy</code> property
+         *  to <code>"all"</code>, the <code>processedDescriptors</code> property
+         *  for its second pane is set to <code>true</code> during application startup.</p>
+         *
+         *  <p>For classes that are not containers, which do not have descriptors,
+         *  it is set to <code>true</code> after the <code>createChildren()</code>
+         *  method creates any internal component children.</p>
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 9
+         *  @playerversion AIR 1.1
+         *  @productversion Flex 3
+         */
+        public function get processedDescriptors():Boolean
+        {
+            return _processedDescriptors;
+        }
+
+        /**
+         *  @private
+         */
+        public function set processedDescriptors(value:Boolean):void
+        {
+            _processedDescriptors = value;
+
+            if (value)
+                dispatchEvent(new FlexEvent(FlexEvent.INITIALIZE));
+        }
+
     
     /**
      *  Create child objects of the component.
@@ -4221,9 +4308,16 @@
      */
     protected function createChildren():void
     {
-        MXMLDataInterpreter.generateMXMLInstances(mxmlDocument, this, MXMLDescriptor);
+        var children:Array =  this.MXMLDescriptor;
+        if (children && children.length && !processedMXMLDescriptors) {
+            layoutDeferred = true;
+            MXMLDataInterpreter.generateMXMLInstances(mxmlDocument, this, children);
+            processedMXMLDescriptors = true;
+        }
     }
-    
+
+    private var processedMXMLDescriptors : Boolean;
+
     private var _mxmlDescriptor:Array;
     
     /**
@@ -4340,6 +4434,85 @@
             (parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded")); // might cause too many layouts
     }
 
+    private var _layoutDeferred:Boolean;
+    /**
+     *  Support for deferred layout requests
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     * @productversion Royale 0.9.9
+     */
+    protected function get layoutDeferred():Boolean{
+        return _layoutDeferred
+    }
+    protected function set layoutDeferred(value:Boolean):void{
+        _layoutDeferred = value;
+        if (!value && _needsLayout) {
+            dispatchEvent(new Event('layoutNeeded'));
+        }
+    }
+    private var _needsLayout:Boolean;
+    /**
+     *  Support for deferred layout requests
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     * @productversion Royale 0.9.9
+     */
+    protected function get needsLayout():Boolean{
+        return _needsLayout;
+    }
+
+    /**
+     *  Support for deferred layout requests
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     * @productversion Royale 0.9.9
+     */
+    COMPILE::JS
+    override public function dispatchEvent(event:Object):Boolean{
+        //trap the layout requests and ignore them if we have deferred layout
+        if (event.type == "layoutNeeded" || event == 'layoutNeeded') {
+            if (_layoutDeferred) {
+                _needsLayout = true;
+                return false;
+            } else {
+                //layout will run, no 'need' to re-run later
+                _needsLayout = false;
+            }
+        }
+        return super.dispatchEvent(event);
+    }
+    /**
+     *  Support for deferred layout requests
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     * @productversion Royale 0.9.9
+     */
+    COMPILE::SWF
+    {
+        [SWFOverride(params="flash.events.Event", altparams="org.apache.royale.events.Event:org.apache.royale.events.MouseEvent")]
+        override public function dispatchEvent(event:Event):Boolean {
+            //trap the layout requests and ignore them if we have deferred layout
+            if (event.type == "layoutNeeded") {
+                if (_layoutDeferred) {
+                    _needsLayout = true;
+                    return false;
+                } else {
+                    //layout will run, no 'need' to re-run later
+                    _needsLayout = false;
+                }
+            }
+            return super.dispatchEvent(event);
+        }
+    }
+
     /**
      *  Helper method to invalidate parent size and display list if
      *  this object affects its layout (includeInLayout is true).
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UITextField.as b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UITextField.as
index e2fc885..f8eaf59 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UITextField.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UITextField.as
@@ -38,6 +38,7 @@
  import mx.styles.ISimpleStyleClient;

  import mx.styles.IStyleManager2;

  import mx.utils.StringUtil;

+ import mx.core.IUIComponent;

  

  import org.apache.royale.core.TextLineMetrics;

  import org.apache.royale.events.Event;

@@ -2833,7 +2834,7 @@
     /**

      *  @private

      */

-    //private var _owner:DisplayObjectContainer;

+    private var _owner:IUIComponent; /* DisplayObjectContainer; */

 

     /**

      *  By default, set to the parent container of this object. 

@@ -2854,17 +2855,18 @@
      *  @playerversion AIR 1.1

      *  @productversion Royale 0.9.3

      */

-    /* public function get owner():DisplayObjectContainer

+    override public function get owner():IUIComponent

     {

-        return _owner ? _owner : parent;

+        return _owner ? _owner : parent as IUIComponent;

     }

 

-    public function set owner(value:DisplayObjectContainer):void

+    override public function set owner(value:IUIComponent):void

     {

         _owner = value;

     }

 

-    private function creatingSystemManager():ISystemManager

+

+  /*   private function creatingSystemManager():ISystemManager

     {

         return ((moduleFactory != null) && (moduleFactory is ISystemManager))

                 ? ISystemManager(moduleFactory)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as b/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as
index da78766..8853fba 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as
@@ -98,6 +98,8 @@
 import org.apache.royale.events.IEventDispatcher;

 import org.apache.royale.geom.Rectangle;

 

+import mx.utils.RoyaleUtil;

+

 //--------------------------------------

 //  Events

 //--------------------------------------

@@ -3736,8 +3738,15 @@
     { override }

     public function getChildByName(name:String):IUIComponent

     {

-        trace("getChildByName not implemented");

-        return null;

+        COMPILE::SWF

+        {

+            return super.getChildByName(name) as IUIComponent;

+        }

+        COMPILE::JS

+        {

+            return RoyaleUtil.childByName(this, name);

+        }

+

     }

     

     /**

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/ButtonItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/ButtonItemRenderer.as
index 70e2405..2596ce3 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/ButtonItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/supportClasses/ButtonItemRenderer.as
@@ -18,11 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.supportClasses
 {
-	import org.apache.royale.core.IItemRenderer;
-	import org.apache.royale.core.IItemRendererOwnerView;
-	import org.apache.royale.core.UIBase;
-	import org.apache.royale.core.SimpleCSSStylesWithFlex;
-	import org.apache.royale.events.Event;
+	import org.apache.royale.core.IHasLabelField;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.ITextItemRenderer;
 	import org.apache.royale.events.ItemClickedEvent;
@@ -43,7 +39,7 @@
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.8
 	 */
-	public class ButtonItemRenderer extends Button implements ITextItemRenderer
+	public class ButtonItemRenderer extends Button implements ITextItemRenderer, IHasLabelField
 	{
 		public function ButtonItemRenderer()
 		{
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/FlexEvent.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/FlexEvent.as
index 2281d22..940e074 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/FlexEvent.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/events/FlexEvent.as
@@ -324,7 +324,7 @@
      *  @playerversion AIR 1.1
      *  @productversion Flex 4
      */
-    //public static const CONTENT_CREATION_COMPLETE:String = "contentCreationComplete";
+    public static const CONTENT_CREATION_COMPLETE:String = "contentCreationComplete";
 
     
     /**
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
index 42337a0..a6e2d81 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/utils/RoyaleUtil.as
@@ -18,7 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.utils
 {
-
+import mx.core.IUIComponent;
+import mx.core.IChildList;
 
 COMPILE::SWF{
 
@@ -33,6 +34,8 @@
  * @playerversion Flash 10.2
  * @playerversion AIR 2.6
  * @productversion Royale 0.9.9
+ *
+ * @royalesuppressexport
  */
 public class RoyaleUtil
 {	
@@ -72,6 +75,18 @@
 
     private static var deferreds:Array = [];
 
+
+    COMPILE::JS
+    public static function childByName(parent:IChildList, name:String):IUIComponent{
+        var i:uint = 0;
+        var l:uint = parent.numChildren;
+        for (;i<l;i++) {
+            var child:IUIComponent = parent.getChildAt(i);
+            if (child && child.name == name) return child;
+        }
+        return null;
+    }
+
 }
 
 }
diff --git a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/TabBar.as b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/TabBar.as
index 4da4593..96afb9d 100644
--- a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/TabBar.as
+++ b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/TabBar.as
@@ -27,6 +27,7 @@
         import org.apache.royale.html.util.addElementToWrapper;

         import org.apache.royale.core.CSSClassList;

     }

+    import org.apache.royale.core.IHasLabelField;

     

 	/**

 	 *  The Material Design Lite (MDL) tab bar component is a user interface element that allows

@@ -48,7 +49,7 @@
 	 *  @playerversion AIR 2.6

 	 *  @productversion Royale 0.8

 	 */

-	public class TabBar extends org.apache.royale.html.List

+	public class TabBar extends org.apache.royale.html.List implements IHasLabelField

 	{

 		/**

 		 *  constructor.

diff --git a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/Tabs.as b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/Tabs.as
index e677fd7..0de270b 100644
--- a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/Tabs.as
+++ b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/Tabs.as
@@ -27,6 +27,7 @@
         import org.apache.royale.html.util.addElementToWrapper;

         import org.apache.royale.core.CSSClassList;

     }

+    import org.apache.royale.core.IHasLabelField;

     

 	/**

 	 *  The Material Design Lite (MDL) tab component is a user interface element that allows

@@ -45,7 +46,7 @@
 	 *  @playerversion AIR 2.6

 	 *  @productversion Royale 0.8

 	 */

-	public class Tabs extends org.apache.royale.html.List

+	public class Tabs extends org.apache.royale.html.List implements IHasLabelField

 	{

 		/**

 		 *  constructor.

diff --git a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererFactoryForArrayData.as b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererFactoryForArrayData.as
index 22babf4..74bb8cf 100644
--- a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererFactoryForArrayData.as
@@ -35,6 +35,7 @@
     import org.apache.royale.events.Event;
     import org.apache.royale.mdl.supportClasses.ITabItemRenderer;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.IHasLabelField;
 
     [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 
@@ -48,7 +49,7 @@
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-    public class TabsItemRendererFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
+    public class TabsItemRendererFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper, IHasLabelField
     {
         public function TabsItemRendererFactoryForArrayData(target:Object = null)
         {
@@ -57,7 +58,15 @@
 
         protected var dataProviderModel:ITabModel;
 
-        protected var labelField:String;
+        protected var _labelField:String;
+        /**
+         * Label field
+         */
+        public function get labelField():String
+        {
+        	return _labelField;
+        }
+
         protected var tabsIdField:String;
 
         private var _strand:IStrand;
@@ -94,7 +103,7 @@
             dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
 
             tabsIdField = dataProviderModel.tabIdField;
-            labelField = dataProviderModel.labelField
+            _labelField = dataProviderModel.labelField
 
             dataProviderChangeHandler(null);
         }
diff --git a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
index 5eb66e5..2b15602 100644
--- a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
+++ b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
@@ -33,6 +33,7 @@
 
     import org.apache.royale.mdl.supportClasses.ITabItemRenderer;
     import org.apache.royale.mdl.beads.models.ITabModel;
+    import org.apache.royale.core.IHasLabelField;
     
 	/**
 	 *  The ListItemRendererInitializer class initializes item renderers
@@ -43,7 +44,7 @@
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class TabsItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer
+	public class TabsItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer, IHasLabelField
 	{
 		/**
 		 *  constructor.
@@ -59,7 +60,12 @@
 		
         protected var presentationModel:IListPresentationModel;
         protected var dataProviderModel:IDataProviderModel;
-        protected var labelField:String;
+        protected var _labelField:String;
+
+        public function get labelField():String
+        {
+        	return _labelField;
+        }
         protected var tabsIdField:String;
                 
 		/**
@@ -77,7 +83,7 @@
 			_strand = value;
             var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;            
             dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-            labelField = dataProviderModel.labelField;            
+            _labelField = dataProviderModel.labelField;            
             var model:ITabModel = _strand.getBeadByType(ITabModel) as ITabModel;
             tabsIdField = model.tabIdField;
 		}
diff --git a/frameworks/projects/SparkRoyale/asconfig.json b/frameworks/projects/SparkRoyale/asconfig.json
index cca6ca6..a6aa346 100644
--- a/frameworks/projects/SparkRoyale/asconfig.json
+++ b/frameworks/projects/SparkRoyale/asconfig.json
@@ -32,10 +32,30 @@
         "source-path": [
             "src/main/royale"
         ],
+        "js-external-library-path": [
+            "../../js/libs/MXRoyaleJS.swc",
+            "../../js/libs/MXRoyaleBaseJS.swc"
+        ],
         "external-library-path": [
-            "../../../../frameworks/libs/air/airglobal.swc"
+            "../../../../frameworks/libs/air/airglobal.swc",
+            "../../libs/MXRoyale.swc",
+            "../../libs/MXRoyaleBase.swc"
+
+        ],
+        "namespace": [
+            {
+                "uri": "library://ns.apache.org/royale/spark",
+                "manifest": "src/main/resources/spark-royale-manifest.xml"
+            }
         ],
         "output": "target/SparkRoyale.swc"
     },
-    "additionalOptions": "-compiler.define+=ROYALE::DISPLAYOBJECT,DisplayObject -js-compiler-define+=ROYALE::DISPLAYOBJECT,IUIComponent -js-compiler-define+=COMPILE::SWF,false -js-compiler-define+=COMPILE::JS,true"
-}
\ No newline at end of file
+    "additionalOptions": [
+        "-compiler.define+=GOOG::DEBUG,true",
+        "-compiler.define+=ROYALE::DISPLAYOBJECT,DisplayObject",
+        "-js-compiler-define+=GOOG::DEBUG,goog.DEBUG",
+        "-js-compiler-define+=ROYALE::DISPLAYOBJECT,IUIComponent",
+        "-js-compiler-define+=COMPILE::SWF,false",
+        "-js-compiler-define+=COMPILE::JS,true"
+    ]
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/config/compile-swf-config.xml b/frameworks/projects/SparkRoyale/src/main/config/compile-swf-config.xml
index 95c1a86..6103149 100644
--- a/frameworks/projects/SparkRoyale/src/main/config/compile-swf-config.xml
+++ b/frameworks/projects/SparkRoyale/src/main/config/compile-swf-config.xml
@@ -39,6 +39,7 @@
             <path-element>../../../../../libs/DragDrop.swc</path-element>
             <path-element>../../../../../libs/HTML.swc</path-element>
             <path-element>../../../../../libs/MXRoyale.swc</path-element>
+            <path-element>../../../../../libs/MXRoyaleBase.swc</path-element>
             <path-element>../../../../../libs/Reflection.swc</path-element>
             <path-element>../../../../../libs/Text.swc</path-element>
             <path-element>../../../../../libs/TLF.swc</path-element>
diff --git a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
index 1b4de88..88c7d29 100644
--- a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
@@ -70,7 +70,7 @@
 {
 	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForIListData");
 	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionIListModel");
-	IBeadView:  ClassReference("spark.components.beads.DataContainerView");			
+	IBeadView:  ClassReference("spark.components.beads.SparkDataContainerView");	
 	IBeadLayout: ClassReference("spark.layouts.supportClasses.SparkLayoutBead");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
 	IItemRenderer: ClassReference("spark.components.beads.SelfItemRenderer");
@@ -83,7 +83,7 @@
 {
 	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.VirtualDataItemRendererFactoryForIListData");
 	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionIListModel");
-	IBeadView:  ClassReference("mx.containers.beads.VirtualListView");			
+	IBeadView:  ClassReference("spark.components.beads.VirtualListView");			
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VirtualListVerticalLayout");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
@@ -98,33 +98,17 @@
 {
 	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForIListData");
 	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionIListModel");
-	IBeadView:  ClassReference("org.apache.royale.html.beads.DataContainerView");			
+	IBeadView:  ClassReference("spark.components.beads.SparkDataContainerView");	
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("spark.layouts.HorizontalLayout");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
 	IItemRenderer: ClassReference("spark.components.supportClasses.SparkTextButtonItemRenderer");
-	IItemRendererInitializer: ClassReference("mx.controls.beads.ListItemRendererInitializer");
+	IItemRendererInitializer: ClassReference("spark.components.beads.TabBarItemRendererInitializer");
 	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
 
-/* not used
-NonVirtualVDataGroup
-{
-	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForIListData");
-	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionIListModel");
-	IBeadView:  ClassReference("org.apache.royale.html.beads.DataContainerView");			
-	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
-	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
-	IItemRenderer: ClassReference("mx.controls.listClasses.ListItemRenderer");
-	IItemRendererInitializer: ClassReference("mx.controls.beads.ListItemRendererInitializer");
-	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
-	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
-	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
-} */
-
 DropDownList
 {
 	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionIListModel");
@@ -165,7 +149,7 @@
 Panel
 {
 	IBeadModel: ClassReference("mx.containers.beads.models.PanelModel");
-	IViewport: ClassReference("spark.components.beads.SparkSkinViewport");
+	IViewport: ClassReference("spark.components.beads.SparkSkinScrollingViewport");
 	skinClass: ClassReference("spark.skins.spark.PanelSkin");
 		
 	background-color: #FFFFFF;
diff --git a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
index d4df984..cd08390 100644
--- a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
+++ b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
@@ -145,7 +145,6 @@
     <component id="Sort" class="spark.collections.Sort"/>
     <component id="SortField" class="spark.collections.SortField"/>
     <component id="CollectionChangeUpdateForArrayListData" class="spark.components.beads.CollectionChangeUpdateForArrayListData" />
-    <component id="TabBarSelectionUpdateFromSelectableDataProvider" class="spark.components.beads.TabBarSelectionUpdateFromSelectableDataProvider"/>
     <component id="SelfItemRenderer" class="spark.components.beads.SelfItemRenderer"/>
     <component id="SimpleMotionPath" class="spark.effects.animation.SimpleMotionPath"/>
     <component id="DateTimeFormatter" class="spark.formatters.DateTimeFormatter"/>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
index 1d834c2..90b5722 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
@@ -84,18 +84,20 @@
 	import spark.components.SkinnablePopUpContainer; SkinnablePopUpContainer;

     

     import spark.components.beads.PanelView; PanelView;

-    import spark.components.beads.DataContainerView; DataContainerView;

     import spark.components.beads.GroupView; GroupView;

     import spark.components.beads.SkinnableContainerView; SkinnableContainerView;

     import spark.components.beads.SkinnableDataContainerView; SkinnableDataContainerView;

+    import spark.components.beads.SparkSkinViewport; SparkSkinViewport;

     import spark.components.beads.SparkSkinScrollingViewport; SparkSkinScrollingViewport;

 	import spark.components.beads.SparkSkinWithClipAndEnableScrollingViewport; SparkSkinWithClipAndEnableScrollingViewport;

+    import spark.components.beads.VirtualListView; VirtualListView;

     import spark.components.beads.CollectionChangeUpdateForArrayListData; CollectionChangeUpdateForArrayListData;

-	import spark.components.beads.TabBarSelectionUpdateFromSelectableDataProvider; TabBarSelectionUpdateFromSelectableDataProvider;

     import spark.components.beads.DropDownListView; DropDownListView;

     import spark.components.beads.TitleWindowView; TitleWindowView;

     import spark.components.beads.controllers.DropDownListController; DropDownListController;

     import spark.components.beads.controllers.TabBarController; TabBarController;

+    import spark.components.beads.SelfItemRendererInitializer; SelfItemRendererInitializer;

+    import spark.components.beads.TabBarItemRendererInitializer; TabBarItemRendererInitializer;

     import spark.controls.advancedDataGridClasses.MXAdvancedDataGridItemRenderer; MXAdvancedDataGridItemRenderer;

     import spark.events.DropDownEvent; DropDownEvent;

 

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
index 90dd0b9..93bd89e 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
@@ -63,6 +63,7 @@
 

 import mx.core.mx_internal;

 import mx.core.FlexGlobals;

+import mx.core.IUIComponent;

 import mx.events.utils.MouseEventConverter;

 import mx.managers.ISystemManager;

 

@@ -85,6 +86,7 @@
 import org.apache.royale.core.ValuesManager;

 import org.apache.royale.events.IEventDispatcher;

 import org.apache.royale.reflection.beads.ClassAliasBead;

+import spark.core.ISparkLayoutHost;

 

 use namespace mx_internal; 

 

@@ -2336,14 +2338,29 @@
 		return _softKeyboardRect;

 	}*/

      

-    override public function setActualSize(w:Number, h:Number):void

-    {

-		super.setActualSize(w, h);

-		if (!skin) {

-			((view as ILayoutHost).contentView as Group).width = w;

-			((view as ILayoutHost).contentView as Group).height = h;

+		override public function setActualSize(w:Number, h:Number):void

+		{

+			super.setActualSize(w, h);

+

+			var lh:ISparkLayoutHost = getLayoutHost() as ISparkLayoutHost;

+			var g:IUIComponent = (lh ? lh.displayView as IUIComponent : null);

+			if (g && g != this)

+			{

+				// TODO: If Applicaiton has no explicit or percent sizes, then

+				//       this function is used to set the default size of the app.

+				//       Unfortunatley, setActualSize() [non-explicit width/height]

+				//       is overridden during LayoutBase.layout() when it gets

+				//       measured sizes.  So legacy code has this function

+				//       setting explicit sizes on contentView (and now displayView).

+				//       This is not ideal, since displayView then has explicit sizes

+				//       that always stick (hence, why this function doesn't do it

+				//       in SkinnableContainerBase).

+				//

+//				g.setActualSize(w, h);

+				g.width = w;

+				g.height = h;

+			}

 		}

-    }

 

      //--------------------------------------------------------------------------

      //

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
index 4c3beae..275f88a 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
@@ -27,6 +27,7 @@
 import org.apache.royale.core.ISelectableItemRenderer;

 import org.apache.royale.core.ValuesManager;

 import org.apache.royale.events.Event;

+import org.apache.royale.core.IHasLabelField;

 

 //import org.apache.royale.events.EventDispatcher;

 /**

@@ -65,7 +66,7 @@
  *  @playerversion AIR 1.5

  *  @productversion Royale 0.9.4

  */

-public class DataRenderer extends Group implements IDataRenderer

+public class DataRenderer extends Group implements IDataRenderer, IHasLabelField

 

 {

 

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Grid.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Grid.as
index 276c35a..e5170265 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Grid.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Grid.as
@@ -6022,13 +6022,13 @@
 			return 0;
 		}
 		
-		public function set processedDescriptors(value:Boolean):void {
+		/*public function set processedDescriptors(value:Boolean):void {
 			
 		}
 		
 		public function get processedDescriptors():Boolean {
 			return false;
-		}
+		}*/
 		
 		public function set updateCompletePendingFlag(value:Boolean):void {
 			
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/List.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/List.as
index e20ea63..05ea745 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/List.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/List.as
@@ -61,9 +61,11 @@
 import org.apache.royale.html.beads.SingleSelectionDropIndicatorBead;

 import mx.managers.IFocusManagerComponent;

 import spark.components.supportClasses.ListBase;

+import spark.layouts.VerticalLayout;

 import mx.core.mx_internal;

 import mx.core.UIComponent;

 use namespace mx_internal;

+

 [Event(name="dragComplete", type="mx.events.DragEvent")]

 //--------------------------------------

 //  Styles

@@ -424,7 +426,9 @@
     public function List()

     {

         super();

-

+        layout = new VerticalLayout();

+        VerticalLayout(layout).gap = 0;

+        

         typeNames += " List";

         

        /*  useVirtualLayout = true;

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
index df4140f..8694745 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
@@ -37,7 +37,7 @@
 import spark.components.supportClasses.SkinnableContainerBase;

 import spark.components.supportClasses.SkinnableComponent;

 import spark.components.supportClasses.GroupBase;

-import spark.components.beads.SkinnableContainerView;

+import spark.core.ISparkContainer;

 import spark.layouts.supportClasses.LayoutBase;

 import spark.layouts.BasicLayout;

 

@@ -52,7 +52,6 @@
 import org.apache.royale.core.IContainer;

 import org.apache.royale.core.IContainerBaseStrandChildrenHost;

 import org.apache.royale.core.ILayoutHost;

-import org.apache.royale.core.ILayoutParent;

 import org.apache.royale.core.IParent;

 import org.apache.royale.core.ValuesManager;

 import org.apache.royale.events.ValueEvent;

@@ -368,8 +367,8 @@
  *  @playerversion AIR 1.5

  *  @productversion Royale 0.9.4

  */

-public class SkinnableContainer extends SkinnableContainerBase implements IContainer, IContainerBaseStrandChildrenHost, ILayoutParent

-{// SkinnableContainerBase 

+public class SkinnableContainer extends SkinnableContainerBase implements IContainer, IContainerBaseStrandChildrenHost, ISparkContainer

+{

  //    implements IDeferredContentOwner, IVisualElementContainer

    // include "../core/Version.as";

     

@@ -409,20 +408,6 @@
         typeNames = "SkinnableContainer";

     }

     

-    /**

-     * Returns the ILayoutHost which is its view. From ILayoutParent.

-     *

-     *  @langversion 3.0

-     *  @playerversion Flash 10.2

-     *  @playerversion AIR 2.6

-     *  @productversion Royale 0.8

-     */

-    public function getLayoutHost():ILayoutHost

-    {

-        return view as ILayoutHost;

-    }

-    

-

     //----------------------------------

     //  textDecoration

     //----------------------------------

@@ -660,14 +645,11 @@
             ? contentGroup.layout 

             : contentGroupProperties.layout;

         */

-        //if (!_layout)

-        //    _layout = new BasicLayout();

         return _layout;

     }

     

     /**

      * @private

-     * @royaleignorecoercion spark.components.beads.SkinnableContainerView

      * @royaleignorecoercion spark.components.supportClasses.GroupBase

      */

     public function set layout(value:LayoutBase):void

@@ -685,9 +667,9 @@
         _layout = value;

         if (getBeadByType(IBeadView))

         {

-            ((view as SkinnableContainerView).contentView as GroupBase).layout = value;

+            (getLayoutHost().contentView as GroupBase).layout = value;

             if (parent)

-                ((view as SkinnableContainerView).contentView as GroupBase).dispatchEvent(new Event("layoutNeeded"));       

+                (getLayoutHost().contentView as GroupBase).dispatchEvent(new Event("layoutNeeded"));       

         }

     }

     

@@ -914,7 +896,7 @@
     {

         if (skin)

         {

-            var skinDispatcher:IEventDispatcher = (view as SkinnableContainerView).contentView as IEventDispatcher;

+            var skinDispatcher:IEventDispatcher = getLayoutHost().contentView as IEventDispatcher;

             skinDispatcher.dispatchEvent(new ValueEvent("childrenAdded"));

         }

         dispatchEvent(new ValueEvent("childrenAdded"));

@@ -991,9 +973,7 @@
         

         dispatchEvent(new Event("beadsAdded"));

         dispatchEvent(new Event("initComplete"));

-        if ((isHeightSizedToContent() || !isNaN(explicitHeight)) &&

-            (isWidthSizedToContent() || !isNaN(explicitWidth)))

-            dispatchEvent(new Event("layoutNeeded"));

+        dispatchEvent(new Event("layoutNeeded"));

     }

 

 

@@ -1200,21 +1180,21 @@
      *  @playerversion AIR 1.5

      *  @productversion Royale 0.9.4

      */

-    /* public function createDeferredContent():void

-    {

+     public function createDeferredContent():void

+    {   //@todo similar fix as mx Container for creationPolicy NONE (at least)

         var children:Array =  this.MXMLDescriptor;

         if (children)

         {

-			creatingDeferredContent = true;

+			/*creatingDeferredContent = true;

             generateMXMLInstances(document, children);

 			creatingDeferredContent = false;

             mxmlContentCreated = true; // keep the code from recursing back into here.

             _deferredContentCreated = true; 

-            dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));

+            dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));*/

             return;

         }

         

-        if (!mxmlContentCreated)

+        /*if (!mxmlContentCreated)

         {

             mxmlContentCreated = true;

             

@@ -1225,11 +1205,11 @@
                 _deferredContentCreated = true;

                 dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CREATION_COMPLETE));

             }

-        }

+        }*/

     }

-

+    //@todo similar fix as mx for creationPolicy NONE (at least)

     private var _deferredContentCreated:Boolean;

-    */

+

     /**

      *  Contains <code>true</code> if deferred content has been created.

      *  

@@ -1238,10 +1218,10 @@
      *  @playerversion AIR 1.5

      *  @productversion Royale 0.9.4

      */

-    /* public function get deferredContentCreated():Boolean

+     public function get deferredContentCreated():Boolean

     {

         return _deferredContentCreated;

-    } */

+    }

 

     /**

      *  @private

@@ -1318,7 +1298,7 @@
      override public function addElement(c:IChild, dispatchEvent:Boolean = true):void

      {

          var contentView:IParent = getLayoutHost().contentView as IParent;

-         if (c == contentView)

+         if (c == contentView || c == skin)

          {

              super.addElement(c); // ContainerView uses addElement to add inner contentView

              if (c == skin)

@@ -1470,7 +1450,6 @@
      {

          return super.getElementAt(index);

      }

-

 }

 

 }

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableDataContainer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableDataContainer.as
index 95267fe..466cea5 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableDataContainer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableDataContainer.as
@@ -31,9 +31,7 @@
 
 import spark.components.supportClasses.SkinnableContainerBase;
 import spark.components.supportClasses.GroupBase;
-import spark.components.beads.SkinnableDataContainerView;
-import spark.components.beads.SparkDataContainerView;
-import spark.core.IViewport;
+import spark.core.ISparkContainer;
 //import spark.events.RendererExistenceEvent;
 import spark.layouts.supportClasses.LayoutBase;
 
@@ -51,7 +49,6 @@
 import org.apache.royale.core.IBeadView;
 import org.apache.royale.core.IChild;
 import org.apache.royale.core.ILayoutHost;
-import org.apache.royale.core.ILayoutParent;
 import org.apache.royale.core.IParent;
 import org.apache.royale.core.ItemRendererClassFactory;
 import org.apache.royale.core.ValuesManager;
@@ -230,7 +227,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Royale 0.9.8
  */
-public class SkinnableDataContainer extends SkinnableContainerBase implements IItemRendererProvider, IStrandWithPresentationModel, ILayoutParent
+public class SkinnableDataContainer extends SkinnableContainerBase implements IItemRendererProvider, IStrandWithPresentationModel, ISparkContainer
 { //implements IItemRendererOwner
     //include "../core/Version.as";
     
@@ -292,20 +289,6 @@
 
 
     /**
-     * Returns the ILayoutHost which is its view. From ILayoutParent.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.8
-     */
-    public function getLayoutHost():ILayoutHost
-    {
-        return view as ILayoutHost;
-    }
-
-    
-    /**
      *  The presentation model for the list.
      *
      *  @langversion 3.0
@@ -440,7 +423,6 @@
      *  @productversion Royale 0.9.8
      * 
      *  @royaleignorecoercion spark.components.DataGroup
-     *  @royaleignorecoercion spark.components.beads.SparkDataContainerView
      */
     [Bindable("dataProviderChanged")]
     [Inspectable(category="Data")]
@@ -451,13 +433,12 @@
             ? dataGroup.dataProvider 
             : dataGroupProperties.dataProvider; */
 
-        return ((view as SparkDataContainerView).contentView as DataGroup).dataProvider;
+        return (getLayoutHost().contentView as DataGroup).dataProvider;
     }
     
     /**
      *  @private
      *  @royaleignorecoercion spark.components.DataGroup
-     *  @royaleignorecoercion spark.components.beads.SparkDataContainerView
      */
     public function set dataProvider(value:IList):void
     {
@@ -471,27 +452,9 @@
             dataGroupProperties.dataProvider = value;
         dispatchEvent(new Event("dataProviderChanged")); */
 
-        if (isWidthSizedToContent() || isHeightSizedToContent())
-            ((view as SparkDataContainerView).contentView as DataGroup).addEventListener("itemsCreated", itemsCreatedHandler);
-        ((view as SparkDataContainerView).contentView as DataGroup).dataProvider = value;
+        (getLayoutHost().contentView as DataGroup).dataProvider = value;
     }
 
-    private function itemsCreatedHandler(event:Event):void
-    {
-        if (parent)
-        {
-            COMPILE::JS
-            {
-                // clear last width/height so elements size to content
-                element.style.width = "";
-                element.style.height = "";
-                ((view as SparkDataContainerView).contentView as DataGroup).element.style.width = "";
-                ((view as SparkDataContainerView).contentView as DataGroup).element.style.height = "";
-            }
-            (parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
-        }
-    }
-    
     //----------------------------------
     //  itemRenderer
     //----------------------------------
@@ -513,7 +476,7 @@
             ? dataGroup.itemRenderer 
             : dataGroupProperties.itemRenderer; */
 
-        return ((view as SparkDataContainerView).contentView as DataGroup).itemRenderer;
+        return (getLayoutHost().contentView as DataGroup).itemRenderer;
     }
     
     /**
@@ -531,10 +494,10 @@
         else
             dataGroupProperties.itemRenderer = value; */
 
-        ((view as SparkDataContainerView).contentView as DataGroup).itemRenderer = value;
+        (getLayoutHost().contentView as DataGroup).itemRenderer = value;
         // the ItemRendererFactory was already put on the DataGroup's strand and
         // determined which factory to use so we have to set it up later here.
-        var factory:ItemRendererClassFactory = ((view as SparkDataContainerView).contentView as DataGroup).getBeadByType(ItemRendererClassFactory) as ItemRendererClassFactory;
+        var factory:ItemRendererClassFactory = (getLayoutHost().contentView as DataGroup).getBeadByType(ItemRendererClassFactory) as ItemRendererClassFactory;
         factory.createFunction = factory.createFromClass;
         factory.itemRendererFactory = value;
     }
@@ -601,15 +564,12 @@
             ? dataGroup.layout 
             : dataGroupProperties.layout;
          */
-        //if (!_layout)
-        //    _layout = new BasicLayout();
         return _layout;
     }
 
     /**
      *  @private
      *  @royaleignorecoercion spark.components.GroupBase
-     *  @royaleignorecoercion spark.components.beads.SparkDataContainerView
      */
     public function set layout(value:LayoutBase):void
     {
@@ -626,9 +586,9 @@
         _layout = value;
         if (getBeadByType(IBeadView))
         {
-            ((view as SkinnableDataContainerView).contentView as GroupBase).layout = value;
+            (getLayoutHost().contentView as GroupBase).layout = value;
             if (parent)
-                ((view as SkinnableDataContainerView).contentView as GroupBase).dispatchEvent(new Event("layoutNeeded"));       
+                (getLayoutHost().contentView as GroupBase).dispatchEvent(new Event("layoutNeeded"));       
         }
     }
     
@@ -948,13 +908,9 @@
     /**
      *  @private
      *  @royaleignorecoercion spark.components.DataGroup
-     *  @royaleignorecoercion spark.components.beads.SparkDataContainerView
      */
     override public function addedToParent():void
     {
-//        if (!getBeadByType(IBeadLayout))
-//            addBead(new VerticalLayout());
-
         if (!initialized) {
             // each MXML file can also have styles in fx:Style block
             ValuesManager.valuesImpl.init(this);
@@ -967,15 +923,10 @@
 
         dispatchEvent(new Event("beadsAdded"));
         dispatchEvent(new Event("initComplete"));
-        if ((isHeightSizedToContent() || !isNaN(explicitHeight)) &&
-            (isWidthSizedToContent() || !isNaN(explicitWidth)))
-            dispatchEvent(new Event("layoutNeeded"));
+        dispatchEvent(new Event("layoutNeeded"));
 
-//		((view as SparkDataContainerView).contentView as DataGroup).addEventListener("change", redispatcher);
-		((view as SparkDataContainerView).contentView as DataGroup).addEventListener("itemClick", redispatcher);
-		((view as SparkDataContainerView).contentView as DataGroup).addEventListener("doubleClick", redispatcher);
-		
-        setActualSize(getExplicitOrMeasuredWidth(), getExplicitOrMeasuredHeight());
+		(getLayoutHost().contentView as DataGroup).addEventListener("itemClick", redispatcher);
+		(getLayoutHost().contentView as DataGroup).addEventListener("doubleClick", redispatcher);
     }
 
     override protected function createChildren():void
@@ -988,12 +939,6 @@
         dispatchEvent(new Event("initBindings"));
     }
     
-    override public function setActualSize(w:Number, h:Number):void
-    {
-        super.setActualSize(w, h);
-        ((view as SparkDataContainerView).contentView as DataGroup).setActualSize(w, h);
-    }
-
 	private function redispatcher(event:Event):void
 	{
 		dispatchEvent(new Event(event.type));
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TabBar.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TabBar.as
index 4148226..2f1a8aa 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TabBar.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/TabBar.as
@@ -44,6 +44,7 @@
     import org.apache.royale.core.ILayoutHost;

     import org.apache.royale.core.IStrand;

     import mx.core.IUIComponent;

+

     /**

      *  Defines the radius of the TabBar buttons' top-left and top-right corners for the default

      *  TabBarButton skin.

@@ -189,16 +190,5 @@
             if (TabBar.createAccessibilityImplementation != null)

                 TabBar.createAccessibilityImplementation(this);

         } */

-

-        override public function get measuredWidth():Number

-        {

-            var contentView:IUIComponent = (this.view as ILayoutHost).contentView as IUIComponent;

-            if (contentView)

-            {

-                (contentView.getBeadByType(LayoutBase) as LayoutBase).measure();

-                measuredWidth = contentView.measuredWidth;

-            }

-            return super.measuredWidth;

-        }

     }

 }
\ No newline at end of file
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/DataContainerView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/DataContainerView.as
deleted file mode 100644
index 96f3c71..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/DataContainerView.as
+++ /dev/null
@@ -1,52 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components.beads
-{	
-	import spark.events.RendererExistenceEvent;
-	import org.apache.royale.utils.sendStrandEvent;
-	import org.apache.royale.html.beads.DataContainerView;
-	import org.apache.royale.core.IItemRenderer;
-	import mx.core.IVisualElement;
-
-
-	/**
-	 *  The DataContainerView provides the visual elements for the DataContainer.
-	 *  
-	 *  @viewbead
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10.2
-	 *  @playerversion AIR 2.6
-	 *  @productversion Royale 0.9.8
-	 */
-	public class DataContainerView extends org.apache.royale.html.beads.DataContainerView
-	{
-		public function DataContainerView()
-		{
-			super();
-		}
-		
-		override protected function dispatchItemAdded(renderer:IItemRenderer):void
-		{
-			super.dispatchItemAdded(renderer);
-		    var newEvent:RendererExistenceEvent = new RendererExistenceEvent(RendererExistenceEvent.RENDERER_ADD, false, false, renderer as IVisualElement);
-		    sendStrandEvent(_strand,newEvent);
-		}
-
-	}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/GroupView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/GroupView.as
index 619c5b2..7f88751 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/GroupView.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/GroupView.as
@@ -68,27 +68,9 @@
     override public function beforeLayout():Boolean
     {
         var host:GroupBase = _strand as GroupBase;
-        // some Groups have left/right but are still sized to content.
-        // the left/right create padding instead.  So instead of
-        // isWidthSizedToContent, we only check explicit
-        if (!(!isNaN(host.explicitWidth) && !isNaN(host.explicitHeight)))
+        if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
         {
-			var lastMeasuredWidth:Number = host.measuredWidth;
-			var lastMeasuredHeight:Number = host.measuredHeight;
             host.layout.measure();
-			if (lastMeasuredWidth != host.measuredWidth || 
-				lastMeasuredHeight != host.measuredHeight)
-			{
-		        if (!(host.isWidthSizedToContent() || host.isHeightSizedToContent()))
-				{
-					// afterlayout is not going to run layout, but might
-					// need one if percentages are involved
-					if (!isNaN(host.percentWidth) || !isNaN(host.percentHeight))
-					{
-		                (host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
-					}
-				}			
-			}
         }
 		return true;
     }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SelfItemRendererInitializer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SelfItemRendererInitializer.as
index ab4fa04..2ec5555 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SelfItemRendererInitializer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SelfItemRendererInitializer.as
@@ -19,6 +19,7 @@
 
 package spark.components.beads
 {
+	import mx.core.LayoutElementUIComponentUtils;
 	import org.apache.royale.core.Bead;
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IItemRenderer;
@@ -60,23 +61,17 @@
 			var sir:SelfItemRenderer = renderer as SelfItemRenderer;
 			if (sir == null) return;
 			
-			var plc:ILayoutChild = sir.parent as ILayoutChild;
 			var clc:ILayoutChild = child as ILayoutChild;
-			if (plc && clc)
+			if (clc)
 			{
-				sir.explicitWidth = NaN;
-				sir.percentWidth = NaN;
-				if (!plc.isWidthSizedToContent() && !clc.isWidthSizedToContent()) sir.percentWidth = 100;
-				sir.explicitHeight = NaN;
-				sir.percentHeight = NaN;
-				if (!plc.isHeightSizedToContent() && !clc.isHeightSizedToContent()) sir.percentHeight = 100;
+				LayoutElementUIComponentUtils.setSizeFromChild(sir, clc);
 			}
 			
 			sir.removeAllElements();
 			sir.addElement(child);
 			sir.invalidateSize();
 		}
-
+		
 		/**
 		 *  @private
 		 */
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableContainerView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableContainerView.as
index 4760290..ef941db 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableContainerView.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableContainerView.as
@@ -19,133 +19,56 @@
 
 package spark.components.beads
 {
-
-import spark.components.SkinnableContainer;
-import spark.components.supportClasses.GroupBase;
-import spark.components.supportClasses.SkinnableComponent;
-import spark.components.supportClasses.Skin;
-import spark.layouts.BasicLayout;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContainer;
-import org.apache.royale.core.ILayoutChild;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.UIBase;
-
-/**
- *  @private
- *  The SkinnableContainerView for emulation.
- */
-public class SkinnableContainerView extends SparkContainerView
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
-
+	import mx.core.UIComponent;
+	import org.apache.royale.core.IContainer;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import spark.components.supportClasses.GroupBase;
+	import spark.components.supportClasses.SkinnableComponent;
+	import spark.components.supportClasses.Skin;
+	
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The SkinnableContainerView for emulation.
 	 */
-	public function SkinnableContainerView()
+	public class SkinnableContainerView extends SparkContainerView
 	{
-		super();
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.6
+		 */
+		public function SkinnableContainerView()
+		{
+			super();
+		}
+		
+		override public function get displayView():GroupBase
+		{
+			var skinhost:SkinnableComponent = _strand as SkinnableComponent;
+			if (skinhost && skinhost.skin)
+				return skinhost.skin as GroupBase;
+			else	
+				return super.displayView;
+		}
+
+		override protected function addViewport():void
+		{
+			var chost:IContainer = host as IContainer;
+			var skinhost:SkinnableComponent = _strand as SkinnableComponent;
+			if (chost && skinhost.skin)
+			{
+				chost.addElement(skinhost.skin);
+			}
+			else
+			{
+				super.addViewport();
+			}
+		}
 	}
-
-    override protected function prepareContentView():void
-    {
-        var host:SkinnableContainer = _strand as SkinnableContainer;
-        if (host.skin)
-        {
-            if (!host.isWidthSizedToContent())
-                host.skin.percentWidth = 100;
-            if (!host.isHeightSizedToContent())
-                host.skin.percentHeight = 100;            
-        }
-        else
-            super.prepareContentView();
-    }
-
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function beforeLayout():Boolean
-    {
-        var host:SkinnableContainer = _strand as SkinnableContainer;
-        if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
-        {
-            if (host.skin)
-            {
-                (host.skin as Skin).layout.measure();
-                host.measuredHeight = host.skin.measuredHeight;
-                host.measuredWidth = host.skin.measuredWidth;
-            }
-            else 
-            {
-                if (host.layout == null)
-                    host.layout = new BasicLayout();
-                host.layout.measure();
-            }
-        }
-        else
-        {
-            if (host.skin)
-            {
-			    (host.skin as Skin).layout.measure();
-			    if (host.isWidthSizedToContent()) 
-			    {
-				    host.skin.setLayoutBoundsSize(NaN, host.height);
-				    host.measuredWidth = host.skin.measuredWidth;
-			    } 
-				else
-			    {
-					if (host.isHeightSizedToContent())
-					{
-					    host.skin.setLayoutBoundsSize(host.width, NaN);
-					    host.measuredHeight = host.skin.measuredHeight;
-					}
-					else
-					{
-						host.skin.setLayoutBoundsSize(host.width, host.height);
-					}
-			    }
-            }
-            else
-            {
-                if (host.layout == null)
-                    host.layout = new BasicLayout();
-                host.layout.measure();
-				var h:Number = host.isHeightSizedToContent() ? host.measuredHeight : host.height;
-				var w:Number = host.isWidthSizedToContent() ? host.measuredWidth : host.width;
-                (viewport.contentView as ILayoutChild).setWidthAndHeight(w, h);
-            }
-                
-        }
-	return true;
-    }
-    
-    override protected function addViewport():void
-    {
-        var chost:IContainer = host as IContainer;
-        var skinhost:SkinnableComponent = host as SkinnableComponent;
-        if (chost != null && chost != viewport.contentView && skinhost.skin) {
-            chost.addElement(skinhost.skin);
-        }
-        else
-            super.addViewport();
-    }
-
-}
-
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableDataContainerView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableDataContainerView.as
index bfd5e8d..faaa640 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableDataContainerView.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SkinnableDataContainerView.as
@@ -19,125 +19,56 @@
 
 package spark.components.beads
 {
-
-import spark.components.SkinnableDataContainer;
-import spark.components.supportClasses.GroupBase;
-import spark.components.supportClasses.SkinnableComponent;
-import spark.components.supportClasses.Skin;
-import spark.layouts.BasicLayout;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContainer;
-import org.apache.royale.core.ILayoutChild;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.UIBase;
-
-/**
- *  @private
- *  The SkinnableDataContainerView for emulation.
- */
-public class SkinnableDataContainerView extends SparkDataContainerView
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
-
+	import mx.core.UIComponent;
+	import org.apache.royale.core.IContainer;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import spark.components.supportClasses.GroupBase;
+	import spark.components.supportClasses.SkinnableComponent;
+	import spark.components.supportClasses.Skin;
+	
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The SkinnableDataContainerView for emulation.
 	 */
-	public function SkinnableDataContainerView()
+	public class SkinnableDataContainerView extends SparkDataContainerView
 	{
-		super();
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.8
+		 */
+		public function SkinnableDataContainerView()
+		{
+			super();
+		}
+		
+		override public function get displayView():GroupBase
+		{
+			var skinhost:SkinnableComponent = _strand as SkinnableComponent;
+			if (skinhost && skinhost.skin)
+				return skinhost.skin as GroupBase;
+			else	
+				return super.displayView;
+		}
+
+		override protected function addViewport():void
+		{
+			var chost:IContainer = host as IContainer;
+			var skinhost:SkinnableComponent = _strand as SkinnableComponent;
+			if (chost && skinhost.skin)
+			{
+				chost.addElement(skinhost.skin);
+			}
+			else
+			{
+				super.addViewport();
+			}
+		}
 	}
-
-    override protected function prepareContentView():void
-    {
-        var host:SkinnableDataContainer = _strand as SkinnableDataContainer;
-        if (host.skin)
-        {
-            if (!host.isWidthSizedToContent())
-                host.skin.percentWidth = 100;
-            if (!host.isHeightSizedToContent())
-                host.skin.percentHeight = 100;            
-        }
-        else
-            super.prepareContentView();
-    }
-
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function beforeLayout():Boolean
-    {
-        var host:SkinnableDataContainer = _strand as SkinnableDataContainer;
-        if (host.isWidthSizedToContent() && host.isHeightSizedToContent())
-        {
-            if (host.skin)
-            {
-                (host.skin as Skin).layout.measure();
-                host.measuredHeight = host.skin.measuredHeight;
-                host.measuredWidth = host.skin.measuredWidth;
-            }
-            else 
-            {
-                if (host.layout == null)
-                    host.layout = new BasicLayout();
-                host.layout.measure();
-            }
-        }
-        else
-        {
-            if (host.skin)
-            {
-			    (host.skin as Skin).layout.measure();
-			    if (host.isWidthSizedToContent()) 
-			    {
-				    host.skin.setLayoutBoundsSize(NaN, host.height);
-				    host.measuredWidth = host.skin.measuredWidth;
-			    } else
-			    {
-				    host.skin.setLayoutBoundsSize(host.width, NaN);
-				    host.measuredHeight = host.skin.measuredHeight;
-			    }
-            }
-            else
-            {
-                if (host.layout == null)
-                    host.layout = new BasicLayout();
-                host.layout.measure();
-				var h:Number = host.isHeightSizedToContent() ? host.measuredHeight : host.height;
-				var w:Number = host.isWidthSizedToContent() ? host.measuredWidth : host.width;
-                (viewport.contentView as ILayoutChild).setWidthAndHeight(w, h);
-            }
-                
-        }
-	return true;
-    }
-    
-    override protected function addViewport():void
-    {
-        var chost:IContainer = host as IContainer;
-        var skinhost:SkinnableComponent = host as SkinnableComponent;
-        if (chost != null && chost != viewport.contentView && skinhost.skin) {
-            chost.addElement(skinhost.skin);
-        }
-        else
-            super.addViewport();
-    }
-
-}
-
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkContainerView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkContainerView.as
index 3923423..5a8efad 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkContainerView.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkContainerView.as
@@ -19,112 +19,148 @@
 
 package spark.components.beads
 {
-
-import spark.components.SkinnableContainer;
-import spark.components.supportClasses.GroupBase;
-import spark.layouts.BasicLayout;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContainer;
-import org.apache.royale.core.ILayoutChild;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.UIBase;
-import org.apache.royale.html.beads.ContainerView;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.IEventDispatcher;
-
-/**
- *  @private
- *  The SparkContainerView for emulation.
- */
-public class SparkContainerView extends ContainerView
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
-
+	import mx.core.LayoutElementUIComponentUtils;
+	import mx.core.UIComponent;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.html.beads.ContainerView;
+	import spark.components.supportClasses.GroupBase;
+	import spark.core.ISparkContainer;
+	import spark.core.ISparkLayoutHost;
+	import spark.layouts.BasicLayout;
+	
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The SparkContainerView for emulation.
 	 */
-	public function SparkContainerView()
+	public class SparkContainerView extends ContainerView implements ISparkLayoutHost
 	{
-		super();
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.6
+		 */
+		public function SparkContainerView()
+		{
+			super();
+		}
+		
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+			prepareContentView();
+			prepareDisplayView();
+		}
+		
+		protected function prepareContentView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = contentView as GroupBase;
+			
+			if (!host || !g)
+				return;
+				
+			if (host == g)
+			{
+				if (g.layout == null)
+					g.layout = new BasicLayout();
+				return;
+			}
+
+			// only for the case where host.layout was set before view set
+			var hc:ISparkContainer = _strand as ISparkContainer;
+			if (hc.layout != null)
+				g.layout = hc.layout;
+
+			if (g.layout == null)
+				g.layout = new BasicLayout();
+		}
+
+		public function get displayView():GroupBase
+		{
+			return contentView as GroupBase;
+		}
+		
+		protected function prepareDisplayView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = displayView as GroupBase;
+
+			if (!host || !g || host == g)
+				return;
+
+			// Resize content to host, because 
+			// (a) ScrollingViewport sets content to 100% and
+			// (b) we don't yet have content reverse-proxing the explicit size functions 
+			//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+			// Layout asks target (content) for explicit sizes, sometimes.
+			//
+			LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+		}
+		
+		/**
+		 *  Measure before layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function beforeLayout():Boolean
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				// Resize content to host, because 
+				// (a) ScrollingViewport sets content to 100% and
+				// (b) we don't yet have content reverse-proxing the explicit size functions 
+				//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+				// Layout asks target (content) for explicit sizes, sometimes.
+				//
+				LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+				
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					g.layout.measure();
+				}
+			}
+			return true;
+		}
+		
+		/**
+		 *  Dispatch after layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function afterLayout():void
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				host.setActualSize(g.width, g.height);
+
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					// request re-run layout on the parent.  In theory, we should only
+					// end up in afterLayout if the content size changed.
+					if (host.parent)
+					{
+						(host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
+					}
+				}
+			}
+		}
 	}
-
-    /**
-     */
-    override public function set strand(value:IStrand):void
-    {
-        super.strand = value;
-        prepareContentView();
-    }
-    
-    protected function prepareContentView():void
-    {
-        var host:SkinnableContainer = _strand as SkinnableContainer;
-        var g:GroupBase = (contentView as GroupBase);
-        if (host.layout != null)
-            g.layout = host.layout;
-        if (g.layout == null)
-            g.layout = new BasicLayout();
-        
-        if (!host.isWidthSizedToContent())
-            g.percentWidth = 100;
-        if (!host.isHeightSizedToContent())
-            g.percentHeight = 100;
-
-    }
-    
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function beforeLayout():Boolean
-    {
-        var host:SkinnableContainer = _strand as SkinnableContainer;
-        if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
-        {
-            host.layout.measure();
-        }
-		return true;
-    }
-    
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function afterLayout():void
-    {
-        var host:SkinnableContainer = _strand as SkinnableContainer;
-        if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
-        {
-            // request re-run layout on the parent.  In theory, we should only
-            // end up in afterLayout if the content size changed.
-            if (host.parent)
-            {
-                (host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
-            }
-        }
-    }
-
-
-}
-
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkDataContainerView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkDataContainerView.as
index be5e9b5..a33dc1f 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkDataContainerView.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkDataContainerView.as
@@ -19,112 +19,174 @@
 
 package spark.components.beads
 {
-
-import spark.components.SkinnableDataContainer;
-import spark.components.supportClasses.GroupBase;
-import spark.layouts.BasicLayout;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContainer;
-import org.apache.royale.core.ILayoutChild;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.UIBase;
-import org.apache.royale.html.beads.ContainerView;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.IEventDispatcher;
-
-/**
- *  @private
- *  The SparkDataContainerView for emulation.
- */
-public class SparkDataContainerView extends ContainerView
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
-
+	import mx.core.IVisualElement;
+	import mx.core.LayoutElementUIComponentUtils;
+	import mx.core.UIComponent;
+	import org.apache.royale.core.IItemRenderer;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.html.beads.DataContainerView;
+	import org.apache.royale.utils.sendStrandEvent;
+	import spark.components.supportClasses.GroupBase;
+	import spark.core.ISparkContainer;
+	import spark.core.ISparkLayoutHost;
+	import spark.events.RendererExistenceEvent;
+	import spark.layouts.BasicLayout;
+	
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The SparkDataContainerView for emulation.
 	 */
-	public function SparkDataContainerView()
+	public class SparkDataContainerView extends DataContainerView implements ISparkLayoutHost
 	{
-		super();
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.8
+		 */
+		public function SparkDataContainerView()
+		{
+			super();
+		}
+		
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+			prepareContentView();
+			prepareDisplayView();
+		}
+		
+		override protected function dispatchItemAdded(renderer:IItemRenderer):void
+		{
+			super.dispatchItemAdded(renderer);
+			var newEvent:RendererExistenceEvent = new RendererExistenceEvent(RendererExistenceEvent.RENDERER_ADD, false, false, renderer as IVisualElement);
+			sendStrandEvent(_strand,newEvent);
+		}
+
+		override protected function itemsCreatedHandler(event:Event):void
+		{
+			// Note that we assume host has same sizing as content group, if applicable
+			var host:UIComponent = _strand as UIComponent;
+			if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
+			{
+				host.invalidateSize();
+				if (host.parent)
+				{
+					(host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
+				}
+			}
+			super.itemsCreatedHandler(event);
+		}
+
+		protected function prepareContentView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = contentView as GroupBase;
+			
+			if (!host || !g)
+				return;
+				
+			if (host == g)
+			{
+				if (g.layout == null)
+					g.layout = new BasicLayout();
+				return;
+			}
+
+			// only for the case where host.layout was set before view set
+			var hc:ISparkContainer = _strand as ISparkContainer;
+			if (hc.layout != null)
+				g.layout = hc.layout;
+
+			if (g.layout == null)
+				g.layout = new BasicLayout();
+		}
+
+		public function get displayView():GroupBase
+		{
+			return contentView as GroupBase;
+		}
+		
+		protected function prepareDisplayView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = displayView as GroupBase;
+
+			if (!host || !g || host == g)
+				return;
+
+			// Resize content to host, because 
+			// (a) ScrollingViewport sets content to 100% and
+			// (b) we don't yet have content reverse-proxing the explicit size functions 
+			//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+			// Layout asks target (content) for explicit sizes, sometimes.
+			//
+			LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+		}
+		
+		/**
+		 *  Measure before layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function beforeLayout():Boolean
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				// Resize content to host, because 
+				// (a) ScrollingViewport sets content to 100% and
+				// (b) we don't yet have content reverse-proxing the explicit size functions 
+				//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+				// Layout asks target (content) for explicit sizes, sometimes.
+				//
+				LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+				
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					g.layout.measure();
+				}
+			}
+			return true;
+		}
+		
+		/**
+		 *  Dispatch after layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function afterLayout():void
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				host.setActualSize(g.width, g.height);
+
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					// request re-run layout on the parent.  In theory, we should only
+					// end up in afterLayout if the content size changed.
+					if (host.parent)
+					{
+						(host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
+					}
+				}
+			}
+		}
 	}
-
-    /**
-     */
-    override public function set strand(value:IStrand):void
-    {
-        super.strand = value;
-        prepareContentView();
-    }
-    
-    protected function prepareContentView():void
-    {
-        var host:SkinnableDataContainer = _strand as SkinnableDataContainer;
-        var g:GroupBase = (contentView as GroupBase);
-        if (host.layout != null)
-            g.layout = host.layout;
-        if (g.layout == null)
-            g.layout = new BasicLayout();
-        
-        if (!host.isWidthSizedToContent())
-            g.percentWidth = 100;
-        if (!host.isHeightSizedToContent())
-            g.percentHeight = 100;
-
-    }
-    
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function beforeLayout():Boolean
-    {
-        var host:SkinnableDataContainer = _strand as SkinnableDataContainer;
-        if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
-        {
-            host.layout.measure();
-        }
-		return true;
-    }
-    
-    /**
-     *  Adjusts the size of the host after the layout has been run if needed
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     *  @royaleignorecoercion org.apache.royale.core.UIBase
-     */
-    override public function afterLayout():void
-    {
-        var host:SkinnableDataContainer = _strand as SkinnableDataContainer;
-        if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
-        {
-            // request re-run layout on the parent.  In theory, we should only
-            // end up in afterLayout if the content size changed.
-            if (host.parent)
-            {
-                (host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
-            }
-        }
-    }
-
-
-}
-
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
index 91ec1aa..f2cef5e 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinScrollingViewport.as
@@ -19,134 +19,99 @@
 
 package spark.components.beads
 {
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.html.supportClasses.ScrollingViewport;
+	import spark.components.supportClasses.GroupBase;
+	import spark.components.supportClasses.SkinnableComponent;
+	import spark.core.ISparkContainer;
+	import spark.layouts.BasicLayout;
 
-import mx.core.mx_internal;
-
-    import spark.core.IViewport;
-
-    use namespace mx_internal;
-
-import spark.components.supportClasses.GroupBase;
-import spark.components.supportClasses.SkinnableComponent;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContentView;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.IUIBase;
-import org.apache.royale.core.IScrollingViewport;
-import org.apache.royale.core.UIBase;
-import org.apache.royale.core.ValuesManager;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.EventDispatcher;
-import org.apache.royale.geom.Size;
-
-COMPILE::SWF
-{
-    import flash.geom.Rectangle;
-}
-
-/**
- *  @private
- *  The viewport that loads a Spark Skin.
- */
-public class SparkSkinScrollingViewport extends SparkSkinViewport implements IScrollingViewport
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
+	// for host.setSkin()
+	import mx.core.mx_internal;
+	use namespace mx_internal;
 
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The scrolling viewport that loads a Spark Skin.
 	 */
-	public function SparkSkinScrollingViewport()
+	public class SparkSkinScrollingViewport extends org.apache.royale.html.supportClasses.ScrollingViewport
 	{
-		super();
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.6
+		 */
+		public function SparkSkinScrollingViewport()
+		{
+			super();
+		}
+
+		override public function set strand(value:IStrand):void
+		{
+			var host:SkinnableComponent = value as SkinnableComponent;
+
+			super.strand = value;
+
+			var c:Class = ValuesManager.valuesImpl.getValue(value, "skinClass") as Class;
+			if (c)
+			{
+				if (!host.skin)
+				{
+					host.setSkin(new c());
+				}
+				host.skin.addEventListener("initComplete", initCompleteHandler);
+			}
+		}
+
+		protected function initCompleteHandler(event:Event):void
+		{
+			var host:SkinnableComponent = _strand as SkinnableComponent;
+
+			// can SkinPart do this better?
+			contentArea = host.skin["contentGroup"];
+			COMPILE::JS
+			{
+				setScrollStyle();
+			}
+			prepareContentView();
+		}
+
+		protected function prepareContentView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = contentView as GroupBase;
+			
+			if (!host || !g)
+				return;
+				
+			if (host == g)
+			{
+				if (g.layout == null)
+					g.layout = new BasicLayout();
+				return;
+			}
+
+			// only for the case where host.layout was set before view set
+			var hc:ISparkContainer = _strand as ISparkContainer;
+			if (hc.layout != null)
+				g.layout = hc.layout;
+
+			if (g.layout == null)
+				g.layout = new BasicLayout();
+		}
+
+		COMPILE::JS
+		override protected function setScrollStyle():void
+		{
+			// default GroupBase.clipAndEnableScrolling == false, so we initially disable scrolling
+			contentArea.element.style.overflow = "visible";
+			adaptContentArea();
+		}
 	}
-
-    override protected function initCompleteHandler(event:Event):void
-    {
-		super.initCompleteHandler(event);
-        COMPILE::JS
-        {
-            setScrollStyle();
-        }        
-    }
-    
-    /**
-     * Subclasses override this method to change scrolling behavior
-     */
-    COMPILE::JS
-    protected function setScrollStyle():void
-    {
-        contentArea.element.style.overflow = "auto";
-    }
-    
-    COMPILE::SWF
-    protected var _verticalScrollPosition:Number = 0;
-    
-    public function get verticalScrollPosition():Number
-    {
-        COMPILE::JS
-        {
-            return contentArea.element.scrollTop;
-        }
-        COMPILE::SWF
-        {
-            return _verticalScrollPosition;
-        }
-    }
-    public function set verticalScrollPosition(value:Number):void
-    {
-        COMPILE::JS
-        {
-            contentArea.element.scrollTop = value;
-        }
-        COMPILE::SWF
-        {
-            _verticalScrollPosition = value;
-            dispatchEvent(new Event("verticalScrollPositionChanged"));
-            // handleVerticalScrollChange();  figure out how to re-use from ScrollingViewport
-            // given we need different timing (waiting on initComplete)
-        }
-    }
-
-    COMPILE::SWF
-    protected var _horizontalScrollPosition:Number = 0;
-    
-    public function get horizontalScrollPosition():Number
-    {
-        COMPILE::JS
-        {
-            return contentArea.element.scrollLeft;
-        }
-        COMPILE::SWF
-        {
-            return _horizontalScrollPosition;
-        }
-    }
-    
-    public function set horizontalScrollPosition(value:Number):void
-    {
-        COMPILE::JS
-        {
-           contentArea.element.scrollLeft = value;
-        }
-        COMPILE::SWF
-        {
-            _horizontalScrollPosition = value;
-            dispatchEvent(new Event("horizontalScrollPositionChanged"));
-            // handleHorizontalScrollChange();     figure out how to re-use from ScrollingViewport
-            // given we need different timing (waiting on initComplete)         
-        }
-    }
-
-}
-
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
index b8af175..dab4f50 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/SparkSkinViewport.as
@@ -19,221 +19,87 @@
 
 package spark.components.beads
 {
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.html.supportClasses.Viewport;
+	import spark.components.supportClasses.GroupBase;
+	import spark.components.supportClasses.SkinnableComponent;
+	import spark.core.ISparkContainer;
+	import spark.layouts.BasicLayout;
 
-import mx.core.mx_internal;
-use namespace mx_internal;
-
-import spark.components.supportClasses.GroupBase;
-import spark.components.supportClasses.SkinnableComponent;
-
-import org.apache.royale.core.IBead;
-import org.apache.royale.core.IContentView;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.IUIBase;
-import org.apache.royale.core.IViewport;
-import org.apache.royale.core.UIBase;
-import org.apache.royale.core.ValuesManager;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.EventDispatcher;
-import org.apache.royale.geom.Size;
-import spark.components.SkinnableContainer;
-import spark.components.SkinnableDataContainer;
-import spark.layouts.supportClasses.LayoutBase;
-
-COMPILE::SWF
-{
-    import flash.geom.Rectangle;
-}
-
-/**
- *  @private
- *  The viewport that loads a Spark Skin.
- */
-public class SparkSkinViewport extends EventDispatcher implements IBead, IViewport
-{
-	//--------------------------------------------------------------------------
-	//
-	//  Constructor
-	//
-	//--------------------------------------------------------------------------
+	// for host.setSkin()
+	import mx.core.mx_internal;
+	use namespace mx_internal;
 
 	/**
-	 *  Constructor.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
+	 *  @private
+	 *  The viewport that loads a Spark Skin.
 	 */
-	public function SparkSkinViewport()
+	public class SparkSkinViewport extends org.apache.royale.html.supportClasses.Viewport
 	{
-		super();
-	}
-
-    protected var contentArea:UIBase;
-    
-    /**
-     * Get the actual parent of the container's content.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function get contentView():IUIBase
-    {
-        return contentArea;
-    }
-    
-    protected var host:SkinnableComponent;
-    
-    /**
-     */
-    public function set strand(value:IStrand):void
-    {
-        host = value as SkinnableComponent;
-        
-        var c:Class = ValuesManager.valuesImpl.getValue(value, "skinClass") as Class;
-        if (c)
-        {
-            if (!host.skin)
-            {
-                host.setSkin(new c());
-            }
-            host.skin.addEventListener("initComplete", initCompleteHandler);
-            contentArea = host.skin; // temporary assigment so that SkinnableXXContainer.addElement can add the skin
-        }
-        else
-        {
-            var f:Function = ValuesManager.valuesImpl.getValue(value, "iContentView") as Function;
-            if (f)
-            {
-                contentArea = new f() as UIBase;
-            }
-            
-            if (!contentArea)
-                contentArea = value as UIBase;
-        }
-    }
-    
-    protected function initCompleteHandler(event:Event):void
-    {
-        contentArea = host.skin["contentGroup"];
-        if (host is SkinnableContainer)
-        {
-            var sc:SkinnableContainer = host as SkinnableContainer;
-            if (sc.layout)
-                (contentArea as GroupBase).layout = sc.layout;       
-        }
-        else if (host is SkinnableDataContainer)
-        {
-            var sdc:SkinnableDataContainer = host as SkinnableDataContainer;
-            if (sdc.layout)
-                (contentArea as GroupBase).layout = sdc.layout;
-        }
-            
-		COMPILE::JS
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Royale 0.9.6
+		 */
+		public function SparkSkinViewport()
 		{
-		    adaptContentArea();
+			super();
 		}
-    }
-    
-    /**
-     * If the contentArea is not the same as the strand,
-     * we need to size it to 100% for scrolling to work correctly.
-     * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-     */
-    COMPILE::JS
-    protected function adaptContentArea():void
-    {
-        if(host != contentArea)
-        {
-            var scl:LayoutBase = null;
 
-            if (host is SkinnableContainer)
-            {
-                var sc:SkinnableContainer = host as SkinnableContainer;
-                scl = sc.layout;
-            }
-            else if (host is SkinnableDataContainer)
-            {
-                var sdc:SkinnableDataContainer = host as SkinnableDataContainer;
-                scl = sdc.layout;
-            }
+		override public function set strand(value:IStrand):void
+		{
+			var host:SkinnableComponent = value as SkinnableComponent;
 
-            if (scl)
-            {
-                if (!scl.isWidthSizedToContent())
-                    contentArea.percentWidth = 100;
-                if (!scl.isHeightSizedToContent())
-                   contentArea.percentHeight = 100;
-            }
-            else
-            {
-                if (host.isWidthSizedToContent())
-                    contentArea.percentWidth = 100;
-                if (host.isHeightSizedToContent())
-                    contentArea.percentHeight = 100;
-                
-            }
-            contentArea.element.style.position = "absolute";
-        }
-    }
-    
-    /**
-     * @copy org.apache.royale.core.IViewport#setPosition()
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function setPosition(x:Number, y:Number):void
-    {
-        COMPILE::SWF {
-            contentArea.x = x;
-            contentArea.y = y;
-        }
-    }
-    
-    /**
-     * @copy org.apache.royale.core.IViewport#layoutViewportBeforeContentLayout()
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function layoutViewportBeforeContentLayout(width:Number, height:Number):void
-    {
-        COMPILE::SWF {
-            if (!isNaN(width))
-                contentArea.width = width;
-            if (!isNaN(height))
-                contentArea.height = height;
-        }
-    }
-    
-    /**
-     * @copy org.apache.royale.core.IViewport#layoutViewportAfterContentLayout()
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-    public function layoutViewportAfterContentLayout(contentSize:Size):void
-    {
-        COMPILE::SWF {
-            var hostWidth:Number = UIBase(host).width;
-            var hostHeight:Number = UIBase(host).height;
-            
-            var rect:flash.geom.Rectangle = new flash.geom.Rectangle(0, 0, hostWidth, hostHeight);
-            contentArea.scrollRect = rect;
-            
-            return;
-        }
-    }
-}
+			super.strand = value;
 
+			var c:Class = ValuesManager.valuesImpl.getValue(value, "skinClass") as Class;
+			if (c)
+			{
+				if (!host.skin)
+				{
+					host.setSkin(new c());
+				}
+				host.skin.addEventListener("initComplete", initCompleteHandler);
+			}
+		}
+
+		protected function initCompleteHandler(event:Event):void
+		{
+			var host:SkinnableComponent = _strand as SkinnableComponent;
+
+			// can SkinPart do this better?
+			contentArea = host.skin["contentGroup"];
+			prepareContentView();
+		}
+
+		protected function prepareContentView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = contentView as GroupBase;
+			
+			if (!host || !g)
+				return;
+				
+			if (host == g)
+			{
+				if (g.layout == null)
+					g.layout = new BasicLayout();
+				return;
+			}
+
+			// only for the case where host.layout was set before view set
+			var hc:ISparkContainer = _strand as ISparkContainer;
+			if (hc.layout != null)
+				g.layout = hc.layout;
+
+			if (g.layout == null)
+				g.layout = new BasicLayout();
+		}
+	}
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarItemRendererInitializer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarItemRendererInitializer.as
new file mode 100644
index 0000000..eb0ee18
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarItemRendererInitializer.as
@@ -0,0 +1,60 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components.beads
+{	
+	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.SimpleCSSStyles;
+	import org.apache.royale.core.UIBase;
+	import org.apache.royale.html.beads.HorizontalListItemRendererInitializer;
+
+	/**
+	 *  The TabBarItemRendererInitializer class initializes item renderers
+	 *  in TabBar tab labels.
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.8
+	 */
+	public class TabBarItemRendererInitializer extends org.apache.royale.html.beads.HorizontalListItemRendererInitializer
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.8
+		 */
+		public function TabBarItemRendererInitializer() 
+		{
+		}
+		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.UIBase
+		 */
+		override protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+		{
+			var style:SimpleCSSStyles = new SimpleCSSStyles();
+			style.marginBottom = presentationModel.separatorThickness;
+			(ir as UIBase).style = style;
+			//(ir as UIBase).height = presentationModel.rowHeight;
+		}
+	}
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarSelectionUpdateFromSelectableDataProvider.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarSelectionUpdateFromSelectableDataProvider.as
deleted file mode 100644
index 2d5fa6a..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/TabBarSelectionUpdateFromSelectableDataProvider.as
+++ /dev/null
@@ -1,158 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components.beads
-{
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IDataProviderModel;
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.core.IViewport;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
-	import mx.core.ISelectableList;
-	import spark.components.TabBar;
-
-
-    /**
-	 *  Updates TabBar.selectedIndex when the selectable dataProvider (i.e. ViewStack)
-	 *  has a selectedIndex change.
-	 *
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10.2
-	 *  @playerversion AIR 2.6
-	 *  @productversion Royale 0.9.8
-	 */
-	public class TabBarSelectionUpdateFromSelectableDataProvider implements IBead
-	{
-		/**
-		 *  Constructor
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.8
-		 */
-		public function TabBarSelectionUpdateFromSelectableDataProvider()
-		{
-		}
-
-		protected var _strand:IStrand;
-
-		/**
-		 *  @copy org.apache.royale.core.IStrand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.8
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", initComplete);
-		}
-
-		/**
-		 *  finish setup
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.8
-		 *  @royaleignorecoercion org.apache.royale.core.IDataProviderModel
-		 */
-		protected function initComplete(event:Event):void
-		{
-			IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
-
-			var contentView:IStrand = (_strand.getBeadByType(IViewport) as IViewport).contentView as IStrand;
-			_dataProviderModel = contentView.getBeadByType(IDataProviderModel) as IDataProviderModel;
-
-			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
-
-			// invoke now in case "dataProviderChanged" has already been dispatched.
-			dataProviderChangeHandler(null);
-		}
-
-		private var dp:ISelectableList;
-
-		/**
-		 * @private
-		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		protected function dataProviderChangeHandler(event:Event):void
-		{
-			if (dp)
-			{
-				dp.removeEventListener("change", handleIndexChange);
-				dp.removeEventListener("valueCommit", handleIndexChange);
-			}
-
-			dp = dataProviderModel.dataProvider as ISelectableList;
-			if (!dp) return;
-
-			dp.addEventListener("change", handleIndexChange);
-			dp.addEventListener("valueCommit", handleIndexChange);
-			
-			handleIndexChange(null);
-		}
-
-		/**
-		 *  Handles the selectedIndex change event.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.8
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		protected function handleIndexChange(event:Event):void
-		{
-			var tb:TabBar = _strand as TabBar;
-			var newSelectedIndex:int = dp.selectedIndex;
-			if (tb.selectedIndex != newSelectedIndex)
-			{
-				tb.selectedIndex = newSelectedIndex;
-			}
-		}
-
-		private var _dataProviderModel:IDataProviderModel;
-
-		/**
-		 *  The org.apache.royale.core.IDataProviderModel that contains the
-		 *  data source.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.8
-		 *  @royaleignorecoercion org.apache.royale.core.IDataProviderModel
-		 */
-		public function get dataProviderModel():IDataProviderModel
-		{
-			if (!_dataProviderModel)
-			{
-				var contentView:IStrand = (_strand.getBeadByType(IViewport) as IViewport).contentView as IStrand;
-				_dataProviderModel = contentView.getBeadByType(IDataProviderModel) as IDataProviderModel;
-			}
-			return _dataProviderModel;
-		}
-		
-	}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/VirtualListView.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/VirtualListView.as
new file mode 100644
index 0000000..528fdc7
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/beads/VirtualListView.as
@@ -0,0 +1,186 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.components.beads
+{
+	import mx.containers.beads.VirtualListView;
+	import mx.core.IVisualElement;
+	import mx.core.LayoutElementUIComponentUtils;
+	import mx.core.UIComponent;
+	import org.apache.royale.core.IItemRenderer;
+	import org.apache.royale.core.ILayoutChild;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.utils.sendStrandEvent;
+	import spark.components.supportClasses.GroupBase;
+	import spark.core.ISparkContainer;
+	import spark.events.RendererExistenceEvent;
+	import spark.layouts.BasicLayout;
+		
+	/**
+	 *  @viewbead
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.8
+	 */
+	public class VirtualListView extends mx.containers.beads.VirtualListView
+	{
+		public function VirtualListView()
+		{
+			super();
+		}
+
+		//
+		//  From SparkDataContainerView (also derived from Basic DataContainer)
+		//
+
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+			prepareContentView();
+			prepareDisplayView();
+		}
+		
+		override protected function dispatchItemAdded(renderer:IItemRenderer):void
+		{
+			super.dispatchItemAdded(renderer);
+			var newEvent:RendererExistenceEvent = new RendererExistenceEvent(RendererExistenceEvent.RENDERER_ADD, false, false, renderer as IVisualElement);
+			sendStrandEvent(_strand,newEvent);
+		}
+
+		override protected function itemsCreatedHandler(event:Event):void
+		{
+			// Note that we assume host has same sizing as content group, if applicable
+			var host:UIComponent = _strand as UIComponent;
+			if (host.isWidthSizedToContent() || host.isHeightSizedToContent())
+			{
+				host.invalidateSize();
+			}
+			super.itemsCreatedHandler(event);
+		}
+
+		protected function prepareContentView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = contentView as GroupBase;
+			
+			if (!host || !g)
+				return;
+				
+			if (host == g)
+			{
+				if (g.layout == null)
+					g.layout = new BasicLayout();
+				return;
+			}
+
+			// only for the case where host.layout was set before view set
+			var hc:ISparkContainer = _strand as ISparkContainer;
+			if (hc.layout != null)
+				g.layout = hc.layout;
+
+			if (g.layout == null)
+				g.layout = new BasicLayout();
+		}
+
+		public function get displayView():GroupBase
+		{
+			return contentView as GroupBase;
+		}
+		
+		protected function prepareDisplayView():void
+		{
+			var host:ILayoutChild = _strand as ILayoutChild;
+			var g:GroupBase = displayView as GroupBase;
+
+			if (!host || !g || host == g)
+				return;
+
+			// Resize content to host, because 
+			// (a) ScrollingViewport sets content to 100% and
+			// (b) we don't yet have content reverse-proxing the explicit size functions 
+			//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+			// Layout asks target (content) for explicit sizes, sometimes.
+			//
+			LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+		}
+		
+		/**
+		 *  Measure before layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function beforeLayout():Boolean
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				// Resize content to host, because 
+				// (a) ScrollingViewport sets content to 100% and
+				// (b) we don't yet have content reverse-proxing the explicit size functions 
+				//     (explicitXX, percentXX, isXXSizedToContent) back to the host.
+				// Layout asks target (content) for explicit sizes, sometimes.
+				//
+				LayoutElementUIComponentUtils.setSizeFromChild(g, host);
+				
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					g.layout.measure();
+				}
+			}
+			return true;
+		}
+		
+		/**
+		 *  Dispatch after layout.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
+		override public function afterLayout():void
+		{
+			if (_strand != displayView)
+			{
+				var host:UIComponent = _strand as UIComponent;
+				var g:GroupBase = displayView as GroupBase;
+
+				host.setActualSize(g.width, g.height);
+
+				if (g.isWidthSizedToContent() || g.isHeightSizedToContent())
+				{
+					// request re-run layout on the parent.  In theory, we should only
+					// end up in afterLayout if the content size changed.
+					if (host.parent)
+					{
+						(host.parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));   
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/gridClasses/GridColumn.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/gridClasses/GridColumn.as
index 762d837..d48b5ad 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/gridClasses/GridColumn.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/gridClasses/GridColumn.as
@@ -39,6 +39,7 @@
     import mx.core.mx_internal;
 	import mx.collections.SortField;// import spark.collections.SortField;
     import spark.components.Grid;
+    import org.apache.royale.core.IHasDataField;
 
     use namespace mx_internal;
 
@@ -94,7 +95,7 @@
  *  @playerversion AIR 2.5
  *  @productversion Flex 4.5
  */   
-public class GridColumn extends EventDispatcher
+public class GridColumn extends EventDispatcher implements IHasDataField
 {
     // include "../../core/Version.as";
     
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListBase.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListBase.as
index 070eb0e..7fd9770 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListBase.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListBase.as
@@ -45,6 +45,7 @@
 import spark.components.supportClasses.DropDownController;

 import org.apache.royale.geom.Point;

 import mx.core.UIComponent;

+import org.apache.royale.core.IHasLabelField;

 

 //--------------------------------------

 //  Styles

@@ -191,7 +192,7 @@
  *  @playerversion AIR 1.5

  *  @productversion Royale 0.9.4

  */

-public class DropDownListBase extends List

+public class DropDownListBase extends List implements IHasLabelField

 {

     //include "../../core/Version.as";

  

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as
index 420e1df..997336c 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/DropDownListButton.as
@@ -20,8 +20,22 @@
 package spark.components.supportClasses
 {
 	import spark.components.Button;
+	COMPILE::JS
+	{
+		import org.apache.royale.svg.elements.Svg;
+		import org.apache.royale.svg.elements.ClipPath;
+		import org.apache.royale.svg.elements.Text;
+		import org.apache.royale.svg.elements.Rect;
+		import org.apache.royale.svg.elements.Path;
+		import org.apache.royale.core.WrappedHTMLElement;
+		import org.apache.royale.core.WrappedHTMLElement;
+		import org.apache.royale.svg.elements.Svg;
+		import org.apache.royale.svg.elements.ClipPath;
+		import org.apache.royale.svg.GraphicShape;
+		import org.apache.royale.html.util.createSVG;
+	}
 	
-    /**
+	/**
 	 */ 
 	public class DropDownListButton extends Button
 	{
@@ -30,7 +44,7 @@
 		
 		/**
 		 *  Constructor.
-         * 
+		 *
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10
 		 *  @playerversion AIR 1.5
@@ -38,57 +52,120 @@
 		 */
 		public function DropDownListButton()
 		{
-			super();
 			instanceId = instanceCounter.toString();
 			instanceCounter++;
+			super();
 		}
 		
 		private var instanceId:String;
 		
-        override public function setActualSize(w:Number, h:Number):void
-        {
-            super.setActualSize(w, h);
-            COMPILE::JS
-            {
-                updateSkin(w, h);
-            }
-        }
+		override public function setActualSize(w:Number, h:Number):void
+		{
+			super.setActualSize(w, h);
+			COMPILE::JS
+			{
+				updateSkin(w, h);
+			}
+		}
         
-        COMPILE::JS
-        override public function set label(value:String):void
-        {
-            super.label = value;
-            updateSkin(width, height);
-        }
+		COMPILE::JS
+		override public function set label(value:String):void
+		{
+			super.label = value;
+			updateSkin(width, height);
+		}
         
-        COMPILE::JS
-        private function updateSkin(w:Number, h:Number):void
-        {
-			var clipid:String = "txtClip" + instanceId;
+		COMPILE::JS
+		private function updateSkin(w:Number, h:Number):void
+		{
 			if (h < 4) return;
-            element.innerHTML = '<svg width="' + w + 'px" height="' +
-                h + 'px" xmlns="http://www.w3.org/2000/svg"><clipPath id="' + clipid + '"><rect x="0" y="0" height="' + h + 
-				'px" width="' + (w - 29) + 'px"/></clipPath><text y="3px" clip-path="url(#' + clipid + ')">' +
-                label + '</text><style><![CDATA[' +
-                'text{ dominant-baseline: hanging;' +
-                /*    font: 12px Verdana, Helvetica, Arial, sans-serif;*/
-                '}]]></style><rect x="' +
-                (w - 26) + 'px" width="1px" height="' + (h - 4) + 'px"/><path d="M' +
-                (w - 21) + ',5 L ' + (w - 13) + ',5 L ' +
-                (w - 17) + ',12 L ' + (w - 21) + ',5"</path></svg>';    
-            
-        }
+			text.element.textContent = label;
+			svg.width = w;
+			svg.element.style.width = w + "px";
+			svg.height = h;
+			svg.element.style.height = h + "px";
+			rect.x = w - 26;
+			rect.height = h - 4;
+			var d:String = 'M' + (w - 21) + ',5 L ' + (w - 13) + ',5 L ' +
+				(w - 17) + ',12 L ' + (w - 21) + ',5';
+			path.element.setAttribute("d",d);
+			// element.innerHTML = '<svg width="' + w + 'px" height="' +
+			// 	h + 'px" xmlns="http://www.w3.org/2000/svg"><clipPath id="' + clipid + '"><rect x="0" y="0" height="' + h + 
+			// 	'px" width="' + (w - 29) + 'px"/></clipPath><text y="3px" clip-path="url(#' + clipid + ')">' +
+			// 	label + '</text><style><![CDATA[' +
+			// 	'text{ dominant-baseline: hanging;' +
+			// 	/*    font: 12px Verdana, Helvetica, Arial, sans-serif;*/
+			// 	'}]]></style><rect x="' +
+			// 	(w - 26) + 'px" width="1px" height="' + (h - 4) + 'px"/><path d="M' +
+			// 	(w - 21) + ',5 L ' + (w - 13) + ',5 L ' +
+			// 	(w - 17) + ',12 L ' + (w - 21) + ',5"</path></svg>';    
+				
+		}
+		
+		COMPILE::JS
+		override protected function createElement():WrappedHTMLElement
+		{
+			var elem:WrappedHTMLElement = super.createElement();
+			svg = new Svg();
+			clipPath = new ClipPath();
+			var clipid:String = "txtClip" + instanceId;
+			clipPath.id = clipid;
+			clipRect = new Rect();
+			clipRect.x = 0;
+			clipRect.y = 0;
+			clipPath.addElement(clipRect);
+			svg.addElement(clipPath);
+			text = new Text();
+			text.y = 3;
+			text.element.setAttribute("clip-path",'url(#' + clipid + ')');
+			svg.addElement(text)
+			var style:SVGStyleElement = createSVG('style') as SVGStyleElement;
+			style.innerHTML = '<![CDATA[' +
+				'text{ dominant-baseline: hanging;' +
+				/*    font: 12px Verdana, Helvetica, Arial, sans-serif;*/
+				'}]]>';
+			svg.element.appendChild(style);
+			rect = new Rect();
+			rect.width = 1;
+			svg.addElement(rect);
+			path = new Path();
+			svg.addElement(path);
+			return elem;
+		}
+		COMPILE::JS
+		private var svg:Svg;
+		COMPILE::JS
+		private var clipPath:ClipPath;
+		COMPILE::JS
+		private var clipRect:Rect;
+		COMPILE::JS
+		private var text:Text;
+		COMPILE::JS
+		private var rect:Rect;
+		COMPILE::JS
+		private var path:Path;
+		//style
 
-	    //--------------------------------------------------------------------------
-	    //
-	    //  Overridden methods
-	    //
-	    //--------------------------------------------------------------------------
-	    
-	    override public function get measuredHeight():Number
-	    {
-	        return 21; // maybe measure font someday if fontSize is large
-	    }
+		/**
+		 * svg
+		 *   clipPath
+		 *    rect
+		 *   text
+		 *   style
+		 *   rect
+		 *   path
+		 */
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods
+		//
+		//--------------------------------------------------------------------------
+		
+		override public function get measuredHeight():Number
+		{
+			return 21; // maybe measure font someday if fontSize is large
+		}
 
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ListBase.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ListBase.as
index b30ed72..2489e51 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ListBase.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ListBase.as
@@ -40,6 +40,8 @@
 import spark.events.ListEvent;

 import spark.events.RendererExistenceEvent;

 import spark.layouts.supportClasses.LayoutBase;*/

+

+import spark.components.SkinnableDataContainer;

 import spark.utils.LabelUtil;

 import mx.collections.IList;

 import mx.core.IFactory;

@@ -48,8 +50,6 @@
 import org.apache.royale.html.beads.ItemRendererFunctionBead;

 import spark.components.DataGroup;

 import spark.components.SkinnableContainer;

-import spark.components.beads.SparkContainerView;

-import spark.layouts.VerticalLayout;

 

 import org.apache.royale.core.IBeadLayout;

 import org.apache.royale.core.IStrand;

@@ -57,6 +57,10 @@
 import org.apache.royale.core.ItemRendererClassFactory;

 import org.apache.royale.events.Event;

 import org.apache.royale.events.IEventDispatcher;

+import org.apache.royale.core.IContainer;

+import org.apache.royale.core.IParent;

+import org.apache.royale.events.ValueEvent;

+import org.apache.royale.core.IHasLabelField;

 

 use namespace mx_internal;   //ListBase and List share selection properties that are mx_internal

 

@@ -195,7 +199,7 @@
  *  @productversion Royale 0.9.4

  *  @royalesuppresspublicvarwarning

  */

-public class ListBase  extends SkinnableContainer

+public class ListBase  extends SkinnableDataContainer implements IContainer, IHasLabelField

 { //extends SkinnableDataContainer implements IDataProviderEnhance

     //include "../../core/Version.as";

 

@@ -269,7 +273,6 @@
     public function ListBase()

     {

         super();

-		layout = new VerticalLayout();

     }

     

     //--------------------------------------------------------------------------

@@ -473,143 +476,12 @@
         return _caretIndex;

     }

     

-    //----------------------------------

-    //  dataProvider copied from SkinnableDataContainer

-    //----------------------------------    

+

     

-    /**

-     *  @copy spark.components.DataGroup#dataProvider

-     *

-     *  @see #itemRenderer

-     *  @see #itemRendererFunction

-     *  @see mx.collections.IList

-     *  @see mx.collections.ArrayCollection

-     *  @see mx.collections.ArrayList

-     *  @see mx.collections.XMLListCollection

-     *  

-     *  @langversion 3.0

-     *  @playerversion Flash 10

-     *  @playerversion AIR 1.5

-     *  @productversion Royale 0.9.4

-     * 

-     *  @royaleignorecoercion spark.components.DataGroup

-     *  @royaleignorecoercion spark.components.beads.SparkContainerView

-     */

-    [Bindable("dataProviderChanged")]

-    [Inspectable(category="Data")]

-    

-    public function get dataProvider():IList

-    {       

-        return ((view as SparkContainerView).contentView as DataGroup).dataProvider;

-    }

-    

-    /**

-     *  @private

-     *  @royaleignorecoercion spark.components.DataGroup

-     *  @royaleignorecoercion spark.components.beads.SparkContainerView

-     */

-    public function set dataProvider(value:IList):void

-    {

-        if (isWidthSizedToContent() || isHeightSizedToContent())

-            ((view as SparkContainerView).contentView as DataGroup).addEventListener("itemsCreated", itemsCreatedHandler);

-        ((view as SparkContainerView).contentView as DataGroup).dataProvider = value;

-    }

-    

-    private function itemsCreatedHandler(event:Event):void

-    {

-        if (parent)

-        {

-            COMPILE::JS

-            {

-                // clear last width/height so elements size to content

-                element.style.width = "";

-                element.style.height = "";

-                ((view as SparkContainerView).contentView as DataGroup).element.style.width = "";

-                ((view as SparkContainerView).contentView as DataGroup).element.style.height = "";

-            }

-            (parent as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));

-        }

-    }

-    

-    //----------------------------------

-    //  itemRenderer copied from SkinnableDataContainer

-    //----------------------------------

-    

-    [Inspectable(category="Data")]

-    

-    /**

-     *  @copy spark.components.DataGroup#itemRenderer

-     *  

-     *  @langversion 3.0

-     *  @playerversion Flash 10

-     *  @playerversion AIR 1.5

-     *  @productversion Royale 0.9.4

-     * 

-     *  @royaleignorecoercion spark.components.DataGroup

-     *  @royaleignorecoercion spark.components.beads.SparkContainerView

-     */

-    public function get itemRenderer():IFactory

-    {

-        return ((view as SparkContainerView).contentView as DataGroup).itemRenderer;

-    }

-    

-    /**

-     *  @private

-     *  @royaleignorecoercion spark.components.DataGroup

-     *  @royaleignorecoercion spark.components.beads.SparkContainerView

-     */

-    public function set itemRenderer(value:IFactory):void

-    {

-        ((view as SparkContainerView).contentView as DataGroup).itemRenderer = value;

-        // the ItemRendererFactory was already put on the DataGroup's strand and

-        // determined which factory to use so we have to set it up later here.

-        var factory:ItemRendererClassFactory = ((view as SparkContainerView).contentView as DataGroup).getBeadByType(ItemRendererClassFactory) as ItemRendererClassFactory;

-        factory.createFunction = factory.createFromClass;

-        factory.itemRendererFactory = value;

-    }

 

 

-    //----------------------------------

-    //  itemRendererFunction

-    //----------------------------------

-    

-    [Inspectable(category="Data")]

-    

-    /**

-     *  @copy spark.components.DataGroup#itemRendererFunction

-     *  

-     *  @langversion 3.0

-     *  @playerversion Flash 10

-     *  @playerversion AIR 1.5

-     *  @productversion Flex 4

-     */

-    public function get itemRendererFunction():Function

-    {

 

-	var contentView:IStrand = (view as SparkContainerView).contentView as IStrand;

-        var itemRendererFunctionBead:ItemRendererFunctionBead = contentView.getBeadByType(ItemRendererFunctionBead) as ItemRendererFunctionBead;

-	if (itemRendererFunctionBead)

-        {

-            return itemRendererFunctionBead.itemRendererFunction;

-        }

 

-        return null;

-    }

-    

-    /**

-     *  @private

-     */

-    public function set itemRendererFunction(value:Function):void

-    {

-	var contentView:IStrand = (view as SparkContainerView).contentView as IStrand;

-        var itemRendererFunctionBead:ItemRendererFunctionBead = contentView.getBeadByType(ItemRendererFunctionBead) as ItemRendererFunctionBead;

-        if (!itemRendererFunctionBead)

-        {

-            itemRendererFunctionBead = new ItemRendererFunctionBead();

-            contentView.addBead(itemRendererFunctionBead);

-        }

-        itemRendererFunctionBead.itemRendererFunction = value;

-    }

 

     /**

      *  @private

@@ -728,7 +600,7 @@
      */

     public function get labelField():String

     {

-         return (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).labelField;

+         return ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).labelField;

     } 

     

     /**

@@ -736,7 +608,7 @@
      */

     public function set labelField(value:String):void

     {

-        (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).labelField = value;

+        ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).labelField = value;

     } 

     

     //----------------------------------

@@ -984,7 +856,7 @@
        /*  if (_proposedSelectedIndex != NO_PROPOSED_SELECTION)

             return _proposedSelectedIndex; */

             

-        return (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).selectedIndex;

+        return ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).selectedIndex;

     }

     

     /**

@@ -992,7 +864,7 @@
      */

     public function set selectedIndex(value:int):void

     {

-        (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).selectedIndex = value;

+        ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).selectedIndex = value;

        /*  setSelectedIndex(value, false); */

     }

     

@@ -1083,7 +955,7 @@
      */

     public function get selectedItem():*

     {

-        return (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).selectedItem;

+        return ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).selectedItem;

         /* if (_pendingSelectedItem !== undefined)

             return _pendingSelectedItem;

             

@@ -1101,7 +973,7 @@
      */

     public function set selectedItem(value:*):void

     {

-        (((view as SparkContainerView).contentView as DataGroup).model as ISelectionModel).selectedItem = value;

+        ((getLayoutHost().contentView as DataGroup).model as ISelectionModel).selectedItem = value;

       //  setSelectedItem(value, false);

     }

 

@@ -1434,20 +1306,20 @@
     

     /**

      *  Given a data item, return the correct text a renderer

-     *  should display while taking the <code>labelField</code> 

-     *  and <code>labelFunction</code> properties into account. 

+     *  should display while taking the <code>labelField</code>

+     *  and <code>labelFunction</code> properties into account.

      *

-     *  @param item A data item 

-     *  

-     *  @return String representing the text to display for the 

-     *  data item in the  renderer. 

-     *  

+     *  @param item A data item

+     *

+     *  @return String representing the text to display for the

+     *  data item in the  renderer.

+     *

      *  @langversion 3.0

      *  @playerversion Flash 10

      *  @playerversion AIR 1.5

      *  @productversion Royale 0.9.4

      */

-    public function itemToLabel(item:Object):String

+    override public function itemToLabel(item:Object):String

     {

         return LabelUtil.itemToLabel(item, labelField, labelFunction);

     }

@@ -2256,32 +2128,50 @@
     /**

      *  @private

      *  @royaleignorecoercion spark.components.DataGroup

-     *  @royaleignorecoercion spark.components.beads.SparkContainerView

      */

     override public function addedToParent():void

     {

-        if (!getBeadByType(IBeadLayout))

-            addBead(new ListBaseLayout());

         super.addedToParent();

         if (requireSelection && selectedIndex == -1)

             selectedIndex = 0;

-		((view as SparkContainerView).contentView as DataGroup).addEventListener("change", redispatcher);

-		((view as SparkContainerView).contentView as DataGroup).addEventListener("itemClick", redispatcher);

-		((view as SparkContainerView).contentView as DataGroup).addEventListener("doubleClick", redispatcher);

+		(getLayoutHost().contentView as DataGroup).addEventListener("change", redispatcher);

+		(getLayoutHost().contentView as DataGroup).addEventListener("itemClick", redispatcher);

+		(getLayoutHost().contentView as DataGroup).addEventListener("doubleClick", redispatcher);

 		

-        setActualSize(getExplicitOrMeasuredWidth(), getExplicitOrMeasuredHeight());

+        dispatchEvent(new Event("layoutNeeded"));

     }

     

-    override public function setActualSize(w:Number, h:Number):void

-    {

-        super.setActualSize(w, h);

-        ((view as SparkContainerView).contentView as DataGroup).setActualSize(w, h);

-    }

-

 	private function redispatcher(event:Event):void

 	{

 		dispatchEvent(new Event(event.type));

 	}

+

+    /*

+    * IContainer

+    */

+    

+    /**

+     *  @private

+     */

+    public function childrenAdded():void

+    {

+        dispatchEvent(new ValueEvent("childrenAdded"));

+    }

+    

+    /**

+     * @copy org.apache.royale.core.IContentViewHost#strandChildren

+     *  

+     *  @langversion 3.0

+     *  @playerversion Flash 10.2

+     *  @playerversion AIR 2.6

+     *  @productversion Royale 0.8

+     */

+    public function get strandChildren():IParent

+    {

+        return this;

+    }

+

+

 }

 

 }

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableContainerBase.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableContainerBase.as
index 5f3aa8f..c7d5eee 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableContainerBase.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SkinnableContainerBase.as
@@ -19,12 +19,15 @@
 
 package spark.components.supportClasses
 {
-    
+	import org.apache.royale.core.ILayoutHost;
+	import org.apache.royale.core.ILayoutParent;
 // import flash.display.DisplayObject;
 
 // import mx.core.ContainerGlobals;
 import mx.core.IFlexDisplayObject;
+	import mx.core.IUIComponent;
 import mx.managers.IFocusManagerContainer;
+	import spark.core.ISparkLayoutHost;
 
 /**
  *  Normal State
@@ -61,7 +64,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class SkinnableContainerBase extends SkinnableComponent implements IFocusManagerContainer
+public class SkinnableContainerBase extends SkinnableComponent implements IFocusManagerContainer, ILayoutParent
 {
     // include "../../core/Version.as";
 
@@ -146,5 +149,51 @@
     {
         return enabled ? "normal" : "disabled";
     }
+
+    /**
+     * Returns the ILayoutHost which is its view. From ILayoutParent.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.8
+     */
+    public function getLayoutHost():ILayoutHost
+    {
+        return view as ILayoutHost;
+    }
+
+		//
+		// Delegate to displayView
+		//
+
+		override public function get measuredWidth():Number
+		{
+			var lh:ISparkLayoutHost = getLayoutHost() as ISparkLayoutHost;
+			var g:IUIComponent = (lh ? lh.displayView as IUIComponent : null);
+			return g ? g.measuredWidth : super.measuredWidth;
+		}
+		
+		override public function get measuredHeight():Number
+		{
+			var lh:ISparkLayoutHost = getLayoutHost() as ISparkLayoutHost;
+			var g:IUIComponent = (lh ? lh.displayView as IUIComponent : null);
+			return g ? g.measuredHeight : super.measuredHeight;
+		}
+
+		override public function setActualSize(w:Number, h:Number):void
+		{
+			super.setActualSize(w, h);
+
+			var lh:ISparkLayoutHost = getLayoutHost() as ISparkLayoutHost;
+			var g:IUIComponent = (lh ? lh.displayView as IUIComponent : null);
+			if (g && g != this)
+			{
+				g.setActualSize(w, h);
+				// TODO: See note in Spark Application.setActualSize().
+//				g.width = w;
+//				g.height = h;
+			}
+		}
 }
 }
\ No newline at end of file
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SparkTextButtonItemRenderer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SparkTextButtonItemRenderer.as
index 5aa6919..da01ffa 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SparkTextButtonItemRenderer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/SparkTextButtonItemRenderer.as
@@ -32,6 +32,7 @@
     import spark.components.supportClasses.ToggleButtonBase;
     import mx.controls.listClasses.IListItemRenderer;
     import mx.events.ListEvent;
+    import org.apache.royale.core.IHasLabelField;
 
     /**
      *  The TextButtonItemRenderer is the default renderer for TabBar
@@ -42,7 +43,7 @@
      *  @productversion Flex 3
      */
 
-    public class SparkTextButtonItemRenderer extends ToggleButtonBase implements IListItemRenderer
+    public class SparkTextButtonItemRenderer extends ToggleButtonBase implements IListItemRenderer, IHasLabelField
     {
         public function SparkTextButtonItemRenderer()
         {
@@ -273,7 +274,7 @@
             throw new Error("Method not implemented.");
         }
 
-        public function get processedDescriptors():Boolean
+       /* public function get processedDescriptors():Boolean
         {
             throw new Error("Method not implemented.");
         }
@@ -281,7 +282,7 @@
         public function set processedDescriptors(value:Boolean):void
         {
             throw new Error("Method not implemented.");
-        }
+        }*/
 
         public function get updateCompletePendingFlag():Boolean
         {
@@ -292,6 +293,33 @@
         {
             throw new Error("Method not implemented.");
         }
+
+		COMPILE::JS
+		override public function get measuredWidth():Number
+		{
+			if (isNaN(_measuredWidth) || (!_measuredWidth && text != ""))
+				measure();
+			return super.measuredWidth;
+		}
+		
+		COMPILE::JS
+		override public function get measuredHeight():Number
+		{
+			if (isNaN(_measuredHeight) || (!_measuredHeight && text != ""))
+				measure();
+			return super.measuredHeight;
+		}
+
+		COMPILE::JS
+		override protected function measure():void
+		{
+			var oldParent:Element = element.parentElement;
+			document.body.appendChild(element);
+			_measuredWidth = element.offsetWidth;
+			_measuredHeight = element.offsetHeight;
+			document.body.removeChild(element);
+			oldParent.appendChild(element);
+		}
     }
 
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkContainer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkContainer.as
new file mode 100644
index 0000000..8b95d23
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkContainer.as
@@ -0,0 +1,51 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.core
+{
+	import spark.layouts.supportClasses.LayoutBase;
+
+	/**
+	 * 
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10
+	 *  @playerversion AIR 1.5
+	 *  @productversion Royale 0.9.8
+	 */
+	public interface ISparkContainer
+	{
+		/**
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10
+		 *  @playerversion AIR 1.5
+		 *  @productversion Royale 0.9.8
+		 */
+		function get layout():LayoutBase;
+
+		/**
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10
+		 *  @playerversion AIR 1.5
+		 *  @productversion Royale 0.9.8
+		 */
+		function set layout(value:LayoutBase):void;
+	}
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkLayoutHost.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkLayoutHost.as
new file mode 100644
index 0000000..e011a32
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/core/ISparkLayoutHost.as
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 spark.core
+{
+	import spark.components.supportClasses.GroupBase;
+
+	/**
+	 *  The ISparkLayoutHost interface is an extension of ILayoutHost for
+	 *  Spark container views that have an IBeadLayout.  The layout implementation
+	 *  often needs to know certain things about other objects in the view.
+	 * 
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.8
+	 */
+	public interface ISparkLayoutHost
+	{
+		/**
+		 *  The container which is displayed (contentView or skin).
+		 * 
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.8
+		 */
+		function get displayView():GroupBase;
+	}
+}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/LayoutBase.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/LayoutBase.as
index 33b92f5..7eed160 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/LayoutBase.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/LayoutBase.as
@@ -2158,7 +2158,10 @@
     
     override public function layout():Boolean
     {
-        var n:int = layoutView.numElements;
+        // TODO: can we just use target all the time?  in other words, is target always host.view.contentView?
+        //       sometimes host == null, and SparkLayoutBead used target.numElements before
+        //
+        var n:int = (host ? layoutView.numElements : target.numElements);
         if (n == 0)
             return false;
         
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/SparkLayoutBead.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/SparkLayoutBead.as
index fa5969e..c963de3 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/SparkLayoutBead.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/layouts/supportClasses/SparkLayoutBead.as
@@ -19,188 +19,95 @@
 
 package spark.layouts.supportClasses
 {
-import mx.core.Container;
-import mx.core.ILayoutElement;
-import mx.core.IVisualElement;
-import mx.core.UIComponent;
-import mx.core.mx_internal;
-
-import spark.components.supportClasses.GroupBase;
-import spark.components.SkinnableContainer;
-import spark.components.SkinnableDataContainer;
-import spark.core.NavigationUnit;
-
-import org.apache.royale.core.IBeadLayout;
-import org.apache.royale.core.ILayoutHost;
-import org.apache.royale.core.IStrand;
-import org.apache.royale.core.LayoutBase;
-import org.apache.royale.core.UIBase;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.EventDispatcher;
-import org.apache.royale.events.IEventDispatcher;
-import org.apache.royale.utils.MXMLDataInterpreter;
-import org.apache.royale.utils.loadBeadFromValuesManager;
-
-use namespace mx_internal;
-
-/**
- *  The SparkLayoutBead class is a layout bead that pumps the Spark 
- *  LayoutBase subclasses.
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class SparkLayoutBead extends org.apache.royale.core.LayoutBase
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    public function SparkLayoutBead()
-    {
-        super();
-    }
-
-	private var sawSizeChanged:Boolean;
+	import mx.core.UIComponent;
+	import org.apache.royale.core.ILayoutHost;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.LayoutBase;
+	import org.apache.royale.core.UIBase;
+	import org.apache.royale.events.Event;
+	import spark.components.supportClasses.GroupBase;
+	import spark.components.supportClasses.SkinnableComponent;
 	
-	override	 protected function handleSizeChange(event:Event):void
+	/**
+	 *  The SparkLayoutBead class is a layout bead that pumps the Spark 
+	 *  LayoutBase subclasses.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10
+	 *  @playerversion AIR 1.5
+	 *  @productversion Royale 0.9.6
+	 */
+	public class SparkLayoutBead extends org.apache.royale.core.LayoutBase
 	{
-		sawSizeChanged = true;
-		super.handleSizeChange(event);
-	}
-	
-	private var ranLayout:Boolean;	
-	private var inUpdateDisplayList:Boolean;	
-		
-    override public function layout():Boolean
-    {
-		ranLayout = true;
-		
-        var n:int = target.numChildren;
-        if (n == 0)
-            return false;
-        
-		var usingSkin:Boolean = false;
-		if (host is SkinnableContainer)
-			usingSkin = (host as SkinnableContainer).skin != null;
-		else if (host is SkinnableDataContainer)
-			usingSkin = (host as SkinnableDataContainer).skin != null;
-				
-        if (!usingSkin && target != host)
-        {
-            var tlc:UIComponent = host as UIComponent;
-            if (!tlc.isWidthSizedToContent() &&
-                !tlc.isHeightSizedToContent())
-                target.setActualSize(tlc.width, tlc.height);
-        }
-        
-		if ((!isNaN(target.percentWidth)) || (!isNaN(target.percentHeight)))
-			if (!sawSizeChanged)
-				return false;
-				
-        var w:Number = target.width;
-        var h:Number = target.height;
-        if (target.layout.isHeightSizedToContent())
-            h = target.measuredHeight;
-        if (target.layout.isWidthSizedToContent())
-            w = target.measuredWidth;
-		inUpdateDisplayList = true;
-        target.layout.updateDisplayList(w, h);
-		inUpdateDisplayList = false;
-        
-        // update the target's actual size if needed.
-        if (target.layout.isWidthSizedToContent() && target.layout.isHeightSizedToContent()) {
-            target.setActualSize(target.getExplicitOrMeasuredWidth(), 
-                target.getExplicitOrMeasuredHeight());
-        }
-        else if (target.layout.isWidthSizedToContent())
-            target.setWidth(target.getExplicitOrMeasuredWidth());
-        else if (target.layout.isHeightSizedToContent())
-            target.setHeight(target.getExplicitOrMeasuredHeight());
-        
-        return true;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    private var _strand:IStrand;
-    
-    override public function set strand(value:IStrand):void
-    {
-        _strand = value;
-        var host:UIBase = value as UIBase;
-        _target = (host.view as ILayoutHost).contentView as GroupBase;
-        super.strand = value;
-        	// The main layout may not get put on the strand until
-		// after children are added so listen here as well
-		if (target.parent)
-			listenToChildren();		
-    }
-    
-    private var _target:GroupBase;
-    
-    public function get target():GroupBase
-    {
-        return _target;
-    }
-    
-    public function set target(value:GroupBase):void
-    {
-        _target = value;
-    }
-
-	override protected function handleChildrenAdded(event:Event):void
-	{
-		COMPILE::JS {
-			super.handleChildrenAdded(event);
-			listenToChildren();
-		}
-	}
-	
-	private function listenToChildren():void
-	{
-		var n:Number = layoutView.numElements;
-		for(var i:int=0; i < n; i++) {
-			var child:IEventDispatcher = layoutView.getElementAt(i) as IEventDispatcher;
-			child.addEventListener("widthChanged", childResizeHandler);
-			child.addEventListener("heightChanged", childResizeHandler);
-			child.addEventListener("sizeChanged", childResizeHandler);
-		}
-	}
-	
-	override protected function childResizeHandler(event:Event):void
-	{
-		if (inUpdateDisplayList) 
+		/**
+		 *  Constructor. 
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10
+		 *  @playerversion AIR 1.5
+		 *  @productversion Royale 0.9.6
+		 */    
+		public function SparkLayoutBead()
 		{
-			// children are resizing during layout.
-			if (isNaN(target.explicitWidth) || isNaN(target.explicitHeight))
-			{
-				// that means our we need to be re-measured
-				target.invalidateSize();
-			}
-			return;
+			super();
 		}
-		ranLayout = false;
-		super.childResizeHandler(event); // will set ranLayout if it did
-		if (!ranLayout)
-			performLayout();
-	}		
 		
-}
+		private var sawSizeChanged:Boolean;
+		
+		override protected function handleSizeChange(event:Event):void
+		{
+			sawSizeChanged = true;
+			super.handleSizeChange(event);
+		}
+		
+		override public function layout():Boolean
+		{
+			// NOTE: Can't test numChildren, due to virtual layouts
+			//var n:int = target.numChildren;
+			//if (n == 0)
+			//	return false;
+			
+			var usingSkin:Boolean = false;
+			if (host is SkinnableComponent)
+				usingSkin = (host as SkinnableComponent).skin != null;
+			
+			if (!usingSkin && target != host)
+			{
+				var tlc:UIComponent = host as UIComponent;
+				if (!tlc.isWidthSizedToContent() && !tlc.isHeightSizedToContent())
+					target.setActualSize(tlc.width, tlc.height);
+			}
+			
+			if (!isNaN(target.percentWidth) || !isNaN(target.percentHeight))
+			{
+				if (!sawSizeChanged)
+					return false;
+			}
+			
+			target.layout.layout();
+			return true;
+		}
+		
+		private var _strand:IStrand;
+		
+		override public function set strand(value:IStrand):void
+		{
+			_strand = value;
+			var host:UIBase = value as UIBase;
+			_target = (host.view as ILayoutHost).contentView as GroupBase;
+			super.strand = value;
+		}
+		
+		private var _target:GroupBase;
+		
+		public function get target():GroupBase
+		{
+			return _target;
+		}
+		
+		public function set target(value:GroupBase):void
+		{
+			_target = value;
+		}
+	}
 }
diff --git a/frameworks/projects/XML/src/main/royale/XML.as b/frameworks/projects/XML/src/main/royale/XML.as
index 39cd4f2..6586ebf 100644
--- a/frameworks/projects/XML/src/main/royale/XML.as
+++ b/frameworks/projects/XML/src/main/royale/XML.as
@@ -1533,11 +1533,16 @@
 			}
 			return namespaces;
 		}
-		
+		/**
+		 * This method is public to enable code optimizations for getting attributes
+		 */
 		public function getAttributeArray():Array
 		{
 			return _attributes ? _attributes : [];
 		}
+		/**
+		 * This method is public to enable code optimizations for getting children
+		 */
 		public function getChildrenArray():Array
 		{
 			return _children ? _children : [];
@@ -1890,7 +1895,7 @@
 		{
 			/*if(!_name)
 				_name = getQName("","","",false);*/
-			return _name;
+			return _name ? _name : null;
 		}
 		
 		/**
diff --git a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as
index 6412658..5965a4f 100644
--- a/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as
+++ b/frameworks/projects/XML/src/test/royale/flexUnitTests/xml/XMLQNameTest.as
@@ -22,6 +22,7 @@
     
     import flexUnitTests.xml.support.QNameTest;    
     import org.apache.royale.test.asserts.*;
+    import org.apache.royale.test.asserts.assertStrictlyEquals;
     
    // import testshim.RoyaleUnitTestRunner;
     
@@ -297,7 +298,37 @@
             assertTrue(test6 == test1, 'unexpected equality result');
             
         }
-        
+        [Test]
+        public function testXMLWithNamespace():void{
+            var xml:XML = 
+                    <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
+                        soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
+
+                                    <soap:Body xmlns:wx = "http://example.com/weather">
+                            <wx:forecast>
+                                <wx:city>Quito</wx:city>
+                            </wx:forecast>
+                        </soap:Body>
+                    </soap:Envelope>;
+                    
+            assertEquals(xml.name().localName,"Envelope", "unexpected localName result");
+            assertEquals(xml.name().uri,"http://www.w3.org/2001/12/soap-envelope","unexpected uri result");
+        }
+
+        [Test]
+        public function testNameWithTextAndAttribute():void{
+            var xml:XML = 
+                    <foo x="15" y="22">
+                        text
+                    </foo>;
+                    
+            assertEquals(xml.name().localName,"foo");
+            assertEquals(xml.name().uri, "","unexpected uri result");
+            assertEquals(xml.children()[0],"text","unexpected text result");
+            assertStrictlyEquals(xml.children()[0].name(),null,"unexpected name to be null and not undefined");
+            assertEquals(xml.attributes()[0],15,"unexpected attribute result");
+            assertEquals(xml.attributes()[0].name(),"x","unexpected name result");
+        }        
        
     }
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
index 0f3e303..6deba17 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#eba3ea, #e279e0);
+  border: 1px solid #8a1e88;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#c92cc6, #d94fd6);
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #f9e2f8;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
index f687348..f2dd6e3 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#cbe9fb, #9bd5f8);
+  border: 1px solid #0f88d1;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#3cadf1, #6cc1f4);
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
index cec28bb..464c14f 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#d2e9b2, #bbdd8b);
+  border: 1px solid #638c29;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#8cc63c, #a3d263);
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #f5faee;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
index 14cfd36..0d3e8d6 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#a6e2ad, #7fd68a);
+  border: 1px solid #277b32;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#3ab549, #58ca66);
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #e0f5e2;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
index 0dba326..c78710e 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fcdab1, #fac380);
+  border: 1px solid #c16c07;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#f7941d, #f9ab4e);
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fffdfb;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
index bc2814f..f7b8577 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f8a9ac, #f47a7f);
+  border: 1px solid #ad0e15;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#ec1c24, #f04b51);
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fef0f0;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
index ae4f100..d3ab2c2 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#9bc1e8, #72a7de);
+  border: 1px solid #1e4e80;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#2c74be, #488ed5);
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #d9e8f6;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
index 7ac5193..9844038 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fdedd3, #fcd9a1);
+  border: 1px solid #e28f08;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#f8b13f, #fac570);
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
index f3da35d..99d7c03 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fac8b8, #f6a389);
+  border: 1px solid #be390e;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#ef5a2a, #f37f59);
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
index 09550f0..ef95b10 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#88e2dc, #5fd8cf);
+  border: 1px solid #1a6b65;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#29a89f, #36cec3);
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #c6f1ee;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
index c3e13a4..f810e51 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#b27ed7, #9a56cc);
+  border: 1px solid #3c1a55;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#662c90, #8238b7);
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #d5b8e9;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
index e1f549a..df21259 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: #737373;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f9f48d, #f7ef5c);
+  border: 1px solid #999207;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#e2d70b, #f5ea2b);
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fdfbd6;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
index 7d1cf31..58e6083 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#eba3ea, #e279e0);
   border: 1px solid #8a1e88;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#c92cc6, #d94fd6);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
index 5c5dc84..cd26cfe 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#cbe9fb, #9bd5f8);
   border: 1px solid #0f88d1;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#3cadf1, #6cc1f4);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
index 4e9be06..029ffab 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#d2e9b2, #bbdd8b);
   border: 1px solid #638c29;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#8cc63c, #a3d263);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
index 66a24af..2bb8ff2 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#a6e2ad, #7fd68a);
   border: 1px solid #277b32;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#3ab549, #58ca66);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
index c5303e1..e3a86c2 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fcdab1, #fac380);
   border: 1px solid #c16c07;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#f7941d, #f9ab4e);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
index 3bd3218..951c7d0 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#f8a9ac, #f47a7f);
   border: 1px solid #ad0e15;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#ec1c24, #f04b51);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
index 919cd66..e15fda6 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#9bc1e8, #72a7de);
   border: 1px solid #1e4e80;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#2c74be, #488ed5);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
index ff967bf..0d3e46a 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fdedd3, #fcd9a1);
   border: 1px solid #e28f08;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#f8b13f, #fac570);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
index c3b60c4..06e2f8c 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fac8b8, #f6a389);
   border: 1px solid #be390e;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#ef5a2a, #f37f59);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
index 866edc0..2fce57f 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#88e2dc, #5fd8cf);
   border: 1px solid #1a6b65;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#29a89f, #36cec3);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
index 908a073..6da99be 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#b27ed7, #9a56cc);
   border: 1px solid #3c1a55;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#662c90, #8238b7);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
index c605dba..57f8fc8 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#f9f48d, #f7ef5c);
   border: 1px solid #999207;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #0d0d0d;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#e2d70b, #f5ea2b);
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
index a75e81e..ebef9dd 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#eba3ea, #e279e0);
+  border: 1px solid #8a1e88;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#c92cc6, #d94fd6);
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #f9e2f8;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
index d6c284c..faca8a4 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#cbe9fb, #9bd5f8);
+  border: 1px solid #0f88d1;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#3cadf1, #6cc1f4);
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
index 2daa3f3..94af9df 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#d2e9b2, #bbdd8b);
+  border: 1px solid #638c29;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#8cc63c, #a3d263);
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #f5faee;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
index b475d96..8f8a9dc 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#a6e2ad, #7fd68a);
+  border: 1px solid #277b32;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#3ab549, #58ca66);
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #e0f5e2;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
index 36bc581..a242b35 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fcdab1, #fac380);
+  border: 1px solid #c16c07;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#f7941d, #f9ab4e);
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fffdfb;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
index 006321b..8ac0d78 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f8a9ac, #f47a7f);
+  border: 1px solid #ad0e15;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#ec1c24, #f04b51);
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fef0f0;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
index 1eeebff..b4b2609 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#9bc1e8, #72a7de);
+  border: 1px solid #1e4e80;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#2c74be, #488ed5);
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #d9e8f6;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
index 2869127..72b5d9f 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fdedd3, #fcd9a1);
+  border: 1px solid #e28f08;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#f8b13f, #fac570);
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
index b38da4d..748960f 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fac8b8, #f6a389);
+  border: 1px solid #be390e;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#ef5a2a, #f37f59);
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
index 7af38e4..38af291 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#88e2dc, #5fd8cf);
+  border: 1px solid #1a6b65;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#29a89f, #36cec3);
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #c6f1ee;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
index 2b7478b..4f1218f 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#b27ed7, #9a56cc);
+  border: 1px solid #3c1a55;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#662c90, #8238b7);
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #d5b8e9;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
index 384d269..8019f9b 100644
--- a/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Dark-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: #737373;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(#7f7f7f, #737373);
+  border: 1px solid #333333;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f9f48d, #f7ef5c);
+  border: 1px solid #999207;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: #737373;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #404040;
+  border: 1px solid #0d0d0d;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23191919' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23191919' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23191919' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#e2d70b, #f5ea2b);
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #8c8c8c;
+  box-shadow: 0px 0px 0px 1px #7f7f7f;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #737373;
+  box-shadow: 0px 0px 0px 1px #999999;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: #595959;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#595959, #737373);
+  box-shadow: 0px 0px 0px 1px #4c4c4c;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fdfbd6;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
index 2e94d96..95a884a 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #e68ee5;
+  border: 1px solid #C92CC6;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #C92CC6;
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Blue-Theme/src/main/resources/defaults.css
index 0812f73..793cd55 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Blue-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #b3dffa;
+  border: 1px solid #3CADF1;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #3CADF1;
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
index 731457e..3682381 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #c6e39f;
+  border: 1px solid #8CC63C;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #8CC63C;
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Green-Theme/src/main/resources/defaults.css
index cde0db4..7e3ca11 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Green-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #92dc9b;
+  border: 1px solid #3AB549;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #3AB549;
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Orange-Theme/src/main/resources/defaults.css
index 6dc0f15..5a10843 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Orange-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #fbce98;
+  border: 1px solid #F7941D;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #F7941D;
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Red-Theme/src/main/resources/defaults.css
index 00dc630..c045200 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Red-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #f69296;
+  border: 1px solid #EC1C24;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #EC1C24;
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
index 39c5996..c1a1661 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #86b4e3;
+  border: 1px solid #2C74BE;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #2C74BE;
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
index 895aae7..48cf1c7 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #fce3ba;
+  border: 1px solid #F8B13F;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #F8B13F;
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
index f931d19..23cb960 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #f8b6a1;
+  border: 1px solid #EF5A2A;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #EF5A2A;
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
index ac9ee5e..d627e72 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #74ddd5;
+  border: 1px solid #29A89F;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #29A89F;
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Violet-Theme/src/main/resources/defaults.css
index 4e4032c..8604b84 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Violet-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #a66ad1;
+  border: 1px solid #662C90;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #662C90;
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Emphasized-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
index 7f1c002..56957ca 100644
--- a/frameworks/themes/Jewel-Light-Flat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
@@ -124,6 +124,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: #f8f174;
+  border: 1px solid #E2D70B;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: #E2D70B;
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: none;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Amethyst-Theme/src/main/resources/defaults.css
index 10937df..e328793 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Amethyst-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #e68ee5;
   border: 1px solid #C92CC6;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #C92CC6;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Blue-Theme/src/main/resources/defaults.css
index 634fc37..b6da749 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Blue-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #b3dffa;
   border: 1px solid #3CADF1;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #3CADF1;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Emerald-Theme/src/main/resources/defaults.css
index bd61cc9..c2036d5 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Emerald-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #c6e39f;
   border: 1px solid #8CC63C;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #8CC63C;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Green-Theme/src/main/resources/defaults.css
index 10d6c59..50d4dd4 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Green-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #92dc9b;
   border: 1px solid #3AB549;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #3AB549;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Orange-Theme/src/main/resources/defaults.css
index c7f2123..5303819 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Orange-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #fbce98;
   border: 1px solid #F7941D;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #F7941D;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Red-Theme/src/main/resources/defaults.css
index a8b0643..6ba75df 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Red-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #f69296;
   border: 1px solid #EC1C24;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #EC1C24;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Sapphire-Theme/src/main/resources/defaults.css
index 247f54f..07a2e19 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Sapphire-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #86b4e3;
   border: 1px solid #2C74BE;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #2C74BE;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Sunflower-Theme/src/main/resources/defaults.css
index bf2ed93..71647d8 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Sunflower-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #fce3ba;
   border: 1px solid #F8B13F;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #F8B13F;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Topaz-Theme/src/main/resources/defaults.css
index b4aa938..d65c7f7 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Topaz-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #f8b6a1;
   border: 1px solid #EF5A2A;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #EF5A2A;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Turquoise-Theme/src/main/resources/defaults.css
index bd352a7..06c9a33 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Turquoise-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #74ddd5;
   border: 1px solid #29A89F;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #29A89F;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Violet-Theme/src/main/resources/defaults.css
index 0141f53..ec85cb5 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Violet-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #a66ad1;
   border: 1px solid #662C90;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #662C90;
diff --git a/frameworks/themes/Jewel-Light-Flat-Primary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Primary-Yellow-Theme/src/main/resources/defaults.css
index b3adace..f85939a 100644
--- a/frameworks/themes/Jewel-Light-Flat-Primary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Primary-Yellow-Theme/src/main/resources/defaults.css
@@ -415,9 +415,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: #f8f174;
   border: 1px solid #E2D70B;
   border-radius: 3px;
@@ -430,12 +436,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: #E2D70B;
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
index 5ca44a7..110efc4 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #e68ee5;
+  border: 1px solid #C92CC6;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #C92CC6;
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Blue-Theme/src/main/resources/defaults.css
index 13b5b20..2077a69 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Blue-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #b3dffa;
+  border: 1px solid #3CADF1;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #3CADF1;
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Emerald-Theme/src/main/resources/defaults.css
index 66cb2b7..6487a23 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Emerald-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #c6e39f;
+  border: 1px solid #8CC63C;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #8CC63C;
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Green-Theme/src/main/resources/defaults.css
index 55f9be1..33b413d 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Green-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #92dc9b;
+  border: 1px solid #3AB549;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #3AB549;
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Orange-Theme/src/main/resources/defaults.css
index 8a6656b..38d5003 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Orange-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #fbce98;
+  border: 1px solid #F7941D;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #F7941D;
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Red-Theme/src/main/resources/defaults.css
index 208ccbe..6879347 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Red-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #f69296;
+  border: 1px solid #EC1C24;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #EC1C24;
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
index 66bc9b5..d536287 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #86b4e3;
+  border: 1px solid #2C74BE;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #2C74BE;
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
index f067a1c..7141ea4 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #fce3ba;
+  border: 1px solid #F8B13F;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #F8B13F;
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Topaz-Theme/src/main/resources/defaults.css
index c316d75..ad5935c 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Topaz-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #f8b6a1;
+  border: 1px solid #EF5A2A;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #EF5A2A;
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
index 6f984f9..cfed884 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #74ddd5;
+  border: 1px solid #29A89F;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #29A89F;
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Violet-Theme/src/main/resources/defaults.css
index f3ef995..c742cae 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Violet-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #a66ad1;
+  border: 1px solid #662C90;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #662C90;
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Light-Flat-Secondary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-Flat-Secondary-Yellow-Theme/src/main/resources/defaults.css
index 965bcaa..8053600 100644
--- a/frameworks/themes/Jewel-Light-Flat-Secondary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-Flat-Secondary-Yellow-Theme/src/main/resources/defaults.css
@@ -124,6 +124,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: white;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: #f8f174;
+  border: 1px solid #E2D70B;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: #E2D70B;
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #d9d9d9);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
index e16c356..2131f38 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Amethyst-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#eba3ea, #e279e0);
+  border: 1px solid #8a1e88;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#c92cc6, #d94fd6);
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #f9e2f8;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
index f4c521f..558b306 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Blue-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#cbe9fb, #9bd5f8);
+  border: 1px solid #0f88d1;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#3cadf1, #6cc1f4);
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
index ad5f9d8..c84296d 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Emerald-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#d2e9b2, #bbdd8b);
+  border: 1px solid #638c29;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#8cc63c, #a3d263);
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #f5faee;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
index 3d8b9c9..85d5d6b 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Green-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#a6e2ad, #7fd68a);
+  border: 1px solid #277b32;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#3ab549, #58ca66);
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #e0f5e2;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
index 2286517..a72a7c7 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Orange-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fcdab1, #fac380);
+  border: 1px solid #c16c07;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#f7941d, #f9ab4e);
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fffdfb;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
index b85456d..82be5ff 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Red-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f8a9ac, #f47a7f);
+  border: 1px solid #ad0e15;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#ec1c24, #f04b51);
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fef0f0;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
index a7a6879..65cfee2 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sapphire-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#9bc1e8, #72a7de);
+  border: 1px solid #1e4e80;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#2c74be, #488ed5);
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #d9e8f6;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
index 0a74a70..60bb21c 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Sunflower-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fdedd3, #fcd9a1);
+  border: 1px solid #e28f08;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#f8b13f, #fac570);
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
index 26f0a9b..e7da755 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Topaz-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fac8b8, #f6a389);
+  border: 1px solid #be390e;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#ef5a2a, #f37f59);
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: white;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
index 7d2eec5..a511b67 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Turquoise-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#88e2dc, #5fd8cf);
+  border: 1px solid #1a6b65;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#29a89f, #36cec3);
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #c6f1ee;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
index c7487ae..4471552 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Violet-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#b27ed7, #9a56cc);
+  border: 1px solid #3c1a55;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#662c90, #8238b7);
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #d5b8e9;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
index 5319dfb..3135920 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Emphasized-Yellow-Theme/src/main/resources/defaults.css
@@ -123,6 +123,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f9f48d, #f7ef5c);
+  border: 1px solid #999207;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#e2d70b, #f5ea2b);
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #fdfbd6;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
index f59e136..1be3bdf 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Amethyst-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#eba3ea, #e279e0);
   border: 1px solid #8a1e88;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#c92cc6, #d94fd6);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
index 9aefce1..822240f 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Blue-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#cbe9fb, #9bd5f8);
   border: 1px solid #0f88d1;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#3cadf1, #6cc1f4);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
index edda6c6..3666890 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Emerald-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#d2e9b2, #bbdd8b);
   border: 1px solid #638c29;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#8cc63c, #a3d263);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
index 77ed8eb..effaf7b 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Green-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#a6e2ad, #7fd68a);
   border: 1px solid #277b32;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#3ab549, #58ca66);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
index 6438a98..9054d5c 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Orange-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fcdab1, #fac380);
   border: 1px solid #c16c07;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#f7941d, #f9ab4e);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
index 45772dd..5b89803 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Red-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#f8a9ac, #f47a7f);
   border: 1px solid #ad0e15;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#ec1c24, #f04b51);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
index b796526..e047f4e 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Sapphire-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#9bc1e8, #72a7de);
   border: 1px solid #1e4e80;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#2c74be, #488ed5);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
index 99117e4..e339cdd 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Sunflower-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fdedd3, #fcd9a1);
   border: 1px solid #e28f08;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#f8b13f, #fac570);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
index 02cdee7..39dd1a9 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Topaz-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#fac8b8, #f6a389);
   border: 1px solid #be390e;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#ef5a2a, #f37f59);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
index d5410d4..9ddd296 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Turquoise-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#88e2dc, #5fd8cf);
   border: 1px solid #1a6b65;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#29a89f, #36cec3);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
index 11dce35..e0429eb 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Violet-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#b27ed7, #9a56cc);
   border: 1px solid #3c1a55;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#662c90, #8238b7);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
index 99a0ad8..950524e 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Primary-Yellow-Theme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#f9f48d, #f7ef5c);
   border: 1px solid #999207;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#e2d70b, #f5ea2b);
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
index a51a00e..ffc7be8 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Amethyst-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23C92CC6' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23C92CC6' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#eba3ea, #e279e0);
+  border: 1px solid #8a1e88;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23C92CC6' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#c92cc6, #d94fd6);
+  box-shadow: 0px 0px 0px 1px #b427b1;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #9f239d;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f9e2f8;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #f9e2f8;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #da58d8;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
index 52562b2..91e6482 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Blue-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#cbe9fb, #9bd5f8);
+  border: 1px solid #0f88d1;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#3cadf1, #6cc1f4);
+  box-shadow: 0px 0px 0px 1px #24a3ef;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1198e9;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #75c5f5;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
index 5e7b07e..772056e 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Emerald-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#d2e9b2, #bbdd8b);
+  border: 1px solid #638c29;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#8cc63c, #a3d263);
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #f5faee;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #a8d46b;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
index edb5c93..4d6343a 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Green-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233AB549' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233AB549' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#a6e2ad, #7fd68a);
+  border: 1px solid #277b32;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233AB549' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#3ab549, #58ca66);
+  box-shadow: 0px 0px 0px 1px #34a241;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #2e8e39;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #e0f5e2;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #e0f5e2;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #60cc6d;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
index 4a88337..7b73ad9 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Orange-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F7941D' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F7941D' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fcdab1, #fac380);
+  border: 1px solid #c16c07;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F7941D' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#f7941d, #f9ab4e);
+  box-shadow: 0px 0px 0px 1px #f28809;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d97a08;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fffdfb;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fffdfb;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f9b058;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
index 2e4f955..b3071f9 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Red-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EC1C24' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EC1C24' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f8a9ac, #f47a7f);
+  border: 1px solid #ad0e15;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EC1C24' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#ec1c24, #f04b51);
+  box-shadow: 0px 0px 0px 1px #dc121a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #c51017;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fef0f0;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fef0f0;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f1545a;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
index ee2626a..35d93f0 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sapphire-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%232C74BE' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%232C74BE' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#9bc1e8, #72a7de);
+  border: 1px solid #1e4e80;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%232C74BE' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#2c74be, #488ed5);
+  box-shadow: 0px 0px 0px 1px #2767a9;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #225b95;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d9e8f6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #d9e8f6;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #5193d7;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
index eb18efb..121dd76 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Sunflower-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23F8B13F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23F8B13F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fdedd3, #fcd9a1);
+  border: 1px solid #e28f08;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23F8B13F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#f8b13f, #fac570);
+  box-shadow: 0px 0px 0px 1px #f7a726;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #f69d0e;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #fac97a;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
index 1aa9699..8acbc56 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Topaz-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fac8b8, #f6a389);
+  border: 1px solid #be390e;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#ef5a2a, #f37f59);
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f38663;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
index 77484f3..e5ea058 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Turquoise-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%2329A89F' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%2329A89F' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#88e2dc, #5fd8cf);
+  border: 1px solid #1a6b65;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%2329A89F' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#29a89f, #36cec3);
+  box-shadow: 0px 0px 0px 1px #24948c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #1f7f78;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #c6f1ee;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #c6f1ee;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #3ed0c6;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
index 327db86..3b40345 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Violet-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23662C90' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23662C90' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#b27ed7, #9a56cc);
+  border: 1px solid #3c1a55;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23662C90' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#662c90, #8238b7);
+  box-shadow: 0px 0px 0px 1px #58267c;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #4a2069;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #d5b8e9;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #d5b8e9;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #873abf;
 }
diff --git a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
index b1ad97f..63e09b1 100644
--- a/frameworks/themes/Jewel-Light-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
+++ b/frameworks/themes/Jewel-Light-NoFlat-Secondary-Yellow-Theme/src/main/resources/defaults.css
@@ -123,6 +123,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23E2D70B' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23E2D70B' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#f9f48d, #f7ef5c);
+  border: 1px solid #999207;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23E2D70B' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#e2d70b, #f5ea2b);
+  box-shadow: 0px 0px 0px 1px #cac00a;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #b1a909;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: #fdfbd6;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: #fdfbd6;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f5eb35;
 }
diff --git a/frameworks/themes/JewelTheme/src/main/resources/defaults.css b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
index 7eb658f..5a0f0a7 100644
--- a/frameworks/themes/JewelTheme/src/main/resources/defaults.css
+++ b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
@@ -413,9 +413,15 @@
   transform: scale(0);
 }
 .jewel.checkbox input:checked + span::after, .jewel.checkbox input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%233CADF1' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
   transform: scale(1);
 }
-.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before {
+.jewel.checkbox input:indeterminate + span::after, .jewel.checkbox input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%233CADF1' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox input:focus + span::before, .jewel.checkbox input:checked:focus + span::before, .jewel.checkbox input:checked:active:focus + span::before, .jewel.checkbox input:indeterminate:focus + span::before, .jewel.checkbox input:indeterminate:active:focus + span::before {
   background: linear-gradient(#cbe9fb, #9bd5f8);
   border: 1px solid #0f88d1;
   border-radius: 3px;
@@ -428,12 +434,23 @@
   border: 1px solid #d9d9d9;
   border-radius: 3px;
 }
-.jewel.checkbox input[disabled] + span::after {
+.jewel.checkbox input:checked[disabled] + span::after {
   background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
 }
+.jewel.checkbox input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
 .jewel.checkbox span {
   padding-left: 8px;
 }
+.jewel.checkbox.rejected input:indeterminate + span::after, .jewel.checkbox.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%233CADF1' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+  opacity: 1;
+  transform: scale(1);
+}
+.jewel.checkbox.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
 
 .jewel.switch input:checked + .switch {
   background: linear-gradient(#3cadf1, #6cc1f4);
@@ -2054,6 +2071,72 @@
   color: silver;
 }
 
+.jewel.checkbox.secondary input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.secondary input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:checked + span::after, .jewel.checkbox.secondary input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23EF5A2A' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate + span::after, .jewel.checkbox.secondary input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23EF5A2A' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:focus + span::before, .jewel.checkbox.secondary input:checked:focus + span::before, .jewel.checkbox.secondary input:checked:active:focus + span::before, .jewel.checkbox.secondary input:indeterminate:focus + span::before, .jewel.checkbox.secondary input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#fac8b8, #f6a389);
+  border: 1px solid #be390e;
+}
+.jewel.checkbox.secondary input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.secondary input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.secondary input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate + span::after, .jewel.checkbox.secondary.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23EF5A2A' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.secondary.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.secondary input:checked + .switch {
+  background: linear-gradient(#ef5a2a, #f37f59);
+  box-shadow: 0px 0px 0px 1px #ed4812;
+}
+.jewel.switch.secondary input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #d64010;
+}
+.jewel.switch.secondary input:checked + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.secondary input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.secondary .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.secondary .switch::before {
+  background: white;
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.secondary.hovered {
   background: #f38663;
 }
@@ -2335,6 +2418,73 @@
   color: silver;
 }
 
+.jewel.checkbox.emphasized input + span::before {
+  background: linear-gradient(white, #f3f3f3);
+  border: 1px solid #b3b3b3;
+}
+.jewel.checkbox.emphasized input + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:checked + span::after, .jewel.checkbox.emphasized input:checked:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%238CC63C' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate + span::after, .jewel.checkbox.emphasized input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%238CC63C' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:focus + span::before, .jewel.checkbox.emphasized input:checked:focus + span::before, .jewel.checkbox.emphasized input:checked:active:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:focus + span::before, .jewel.checkbox.emphasized input:indeterminate:active:focus + span::before {
+  background: linear-gradient(#d2e9b2, #bbdd8b);
+  border: 1px solid #638c29;
+}
+.jewel.checkbox.emphasized input[disabled] + span {
+  color: silver;
+}
+.jewel.checkbox.emphasized input[disabled] + span::before {
+  background: #f3f3f3;
+  border: 1px solid #d9d9d9;
+}
+.jewel.checkbox.emphasized input:checked[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cpolygon fill='%23cccccc' points='3.50018311 12.4854126 8.48547363 17.4989624 18.4641113 7.47589111 15.5010376 4.51739502 8.48547363 11.5650024 6.52087402 9.47265625'/%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Crect stroke-width='0' stroke='%23FFFFFF' height='12' width='12' y='5' x='5' fill='%23cccccc' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate + span::after, .jewel.checkbox.emphasized.rejected input:indeterminate:active + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%238CC63C' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+.jewel.checkbox.emphasized.rejected input:indeterminate[disabled] + span::after {
+  background: url("data:image/svg+xml,%3Csvg viewBox='0 0 22 22' version='1.1' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='0' width='22' height='22' fill-opacity='0'/%3E%3Cline stroke-width='4' stroke='%23cccccc' stroke-linecap='undefined' stroke-linejoin='undefined' y2='10.9375' x2='17' y1='11.0625' x1='5' fill='none' /%3E%3C/svg%3E") no-repeat center center;
+}
+
+.jewel.switch.emphasized input:checked + .switch {
+  background: linear-gradient(#8cc63c, #a3d263);
+  box-shadow: 0px 0px 0px 1px #7eb435;
+}
+.jewel.switch.emphasized input:focus + .switch {
+  box-shadow: 0px 0px 0px 1px #71a02f;
+}
+.jewel.switch.emphasized input:checked + .switch::before {
+  background: #f5faee;
+}
+.jewel.switch.emphasized input[disabled]:checked + .switch {
+  background: #d9d9d9;
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized input[disabled] + .switch {
+  background: #f3f3f3;
+  box-shadow: 0px 0px 0px 1px #e6e6e6;
+}
+.jewel.switch.emphasized input[disabled] + .switch::before {
+  background: white;
+}
+.jewel.switch.emphasized .switch {
+  background: linear-gradient(#d9d9d9, #f3f3f3);
+  box-shadow: 0px 0px 0px 1px #cccccc;
+}
+.jewel.switch.emphasized .switch::before {
+  background: #f5faee;
+  box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.1);
+}
+
 .jewel.datagrid .jewel.list.column .jewel.item.datagrid.emphasized.hovered {
   background: #a8d46b;
 }