diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF b/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF
index 2082894..e8c39c8 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF
@@ -29,6 +29,7 @@
  org.eclipse.debug.ui;resolution:=optional,
  org.eclipse.e4.ui.css.core.dom;resolution:=optional,
  org.eclipse.e4.ui.css.core.engine;resolution:=optional,
+ org.eclipse.e4.ui.css.core.utils;resolution:=optional,
  org.eclipse.e4.ui.css.swt.dom;resolution:=optional,
  org.eclipse.e4.ui.css.swt.properties;resolution:=optional,
  org.eclipse.e4.ui.css.swt.theme;resolution:=optional,
@@ -63,4 +64,6 @@
  org.eclipse.statet.ecommons.ui.viewers,
  org.eclipse.statet.ecommons.ui.viewers.breadcrumb,
  org.eclipse.statet.ecommons.ui.workbench,
+ org.eclipse.statet.ecommons.ui.workbench.css,
+ org.eclipse.statet.ecommons.ui.workbench.css.dom,
  org.eclipse.statet.ecommons.ui.workbench.workspace
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml b/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml
index 16c161c..df85c72 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml
@@ -235,13 +235,15 @@
             class="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.ECommonsSwtElementProvider">
          <widget
                class="org.eclipse.statet.ecommons.ui.swt.expandable.ExpandableComposite"/>
+         <widget
+               class="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualWidget"/>
       </provider>
    </extension>
    <extension
          point="org.eclipse.e4.ui.css.core.propertyHandler">
       <handler
             adapter="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.ExpandableCompositeElement"
-            handler="org.eclipse.statet.internal.ecommons.ui.swt.css.properties.ExpandableCompositeHandler">
+            handler="org.eclipse.statet.internal.ecommons.ui.swt.css.properties.ExpandableCompositePropertyHandler">
          <property-name
                name="swt-titlebar-color"/>
       </handler>
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java
index af1f424..9e5428f 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java
@@ -669,7 +669,7 @@
 						case SWT.Paint:
 							if (ExpandableComposite.this.toggle != null
 									&& (getExpansionStyle() & NO_TITLE_FOCUS_BOX) == 0) {
-								paintTitleFocus(e.gc);
+								paintTitleFocus(nonNullAssert(e.gc));
 							}
 							break;
 						case SWT.Resize:
@@ -1137,7 +1137,8 @@
 		final var layout= (ExpandableLayout)getLayout();
 		if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
 			size= layout.computeSize(this, wHint, hHint, changed);
-		} else {
+		}
+		else {
 			size= new Point(wHint, hHint);
 		}
 		final Rectangle trim= computeTrim(0, 0, size.x, size.y);
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java
index 1929f76..5c87674 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java
@@ -29,7 +29,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.workbench.StylingUtils;
+import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils;
 
 
 /**
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java
index 8503fe6..c05049f 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java
@@ -43,7 +43,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.workbench.StylingUtils;
+import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils;
 
 
 /**
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
index aff4838..0e4359c 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
@@ -68,7 +68,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.ui.swt.AccessibleArrowImage;
-import org.eclipse.statet.ecommons.ui.workbench.StylingUtils;
+import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils;
 
 
 /**
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
index bf5beae..f32afed 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
@@ -56,7 +56,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.workbench.StylingUtils;
+import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils;
 
 
 /**
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/StylingUtils.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/StylingUtils.java
similarity index 98%
rename from ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/StylingUtils.java
rename to ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/StylingUtils.java
index 784fdc7..6ff6d29 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/StylingUtils.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/StylingUtils.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ecommons.ui.workbench;
+package org.eclipse.statet.ecommons.ui.workbench.css;
 
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
 
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java
new file mode 100644
index 0000000..90b4c4a
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java
@@ -0,0 +1,23 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ecommons.ui.workbench.css;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public interface VirtualComposite {
+	
+}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java
new file mode 100644
index 0000000..334eefc
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java
@@ -0,0 +1,98 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ecommons.ui.workbench.css.dom;
+
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.dom.WidgetElement;
+import org.eclipse.swt.widgets.Control;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.ui.workbench.css.VirtualComposite;
+import org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualCompositeSkinListener;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public abstract class VirtualCompositeStylableElement<TControl extends Control & VirtualComposite>
+		extends WidgetElement implements NodeList {
+	
+	
+	private final ImList<? extends VirtualStylableElement<? extends VirtualCompositeStylableElement<TControl>>> children;
+	
+	
+	public VirtualCompositeStylableElement(final TControl control, final CSSEngine engine) {
+		super(control, engine);
+		
+		this.children= createChildren(control);
+		
+		control.addDisposeListener((event) -> dispose());
+		
+		VirtualCompositeSkinListener.enable(control.getDisplay(), engine);
+	}
+	
+	protected abstract ImList<? extends VirtualStylableElement<? extends VirtualCompositeStylableElement<TControl>>> createChildren(
+			final TControl control);
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+		
+		for (final var child : this.children) {
+			this.engine.handleWidgetDisposed(child);
+			child.dispose();
+		}
+	}
+	
+	
+	@Override
+	public NodeList getChildNodes() {
+		return this;
+	}
+	
+	@Override
+	public int getLength() {
+		return this.children.size();
+	}
+	
+	@Override
+	public @Nullable Node item(final int index) {
+		if (index >= 0 && index < this.children.size()) {
+			return this.children.get(index);
+		}
+		return null;
+	}
+	
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public TControl getNativeWidget() {
+		return (TControl)super.getNativeWidget();
+	}
+	
+	
+	@Override
+	public String toString() {
+		final var sb= new StringBuilder();
+		VirtualStylableElement.appendName(sb, this, true);
+		return sb.toString();
+	}
+	
+}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java
new file mode 100644
index 0000000..991dd94
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java
@@ -0,0 +1,156 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ecommons.ui.workbench.css.dom;
+
+import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
+import org.eclipse.e4.ui.css.core.dom.ElementAdapter;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.core.utils.ClassUtils;
+
+import org.w3c.dom.NodeList;
+
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualWidget;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public abstract class VirtualStylableElement<TParent extends CSSStylableElement>
+		extends ElementAdapter implements NodeList {
+	
+	
+	private final TParent parent;
+	
+	private final String name;
+	private final @Nullable String cssClass;
+	
+	private ImList<? extends VirtualStylableElement<? extends VirtualStylableElement<?>>> children= ImCollections.emptyList();
+	
+	
+	public VirtualStylableElement(final TParent parent,
+			final String name, final @Nullable String cssClass,
+			final CSSEngine engine) {
+		super(new VirtualWidget(), engine);
+		((VirtualWidget)getNativeWidget()).setElement(this);
+		this.parent= parent;
+		this.name= name;
+		this.cssClass= cssClass;
+	}
+	
+	protected void init(final ImList<? extends VirtualStylableElement<? extends VirtualStylableElement<TParent>>> children) {
+		this.children= children;
+	}
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+		
+		for (final VirtualStylableElement<?> child : this.children) {
+			child.dispose();
+		}
+	}
+	
+	
+	@Override
+	public TParent getParentNode() {
+		return this.parent;
+	}
+	
+	@Override
+	public NodeList getChildNodes() {
+		return this;
+	}
+	
+	@Override
+	public int getLength() {
+		return this.children.size();
+	}
+	
+	@Override
+	public @Nullable VirtualStylableElement<? extends VirtualStylableElement<?>> item(final int index) {
+		if (index >= 0 && index < this.children.size()) {
+			return this.children.get(index);
+		}
+		return null;
+	}
+	
+	
+	@Override
+	public @Nullable String getNamespaceURI() {
+		return ClassUtils.getPackageName(VirtualCompositeStylableElement.class);
+	}
+	
+	@Override
+	public String getLocalName() {
+		return this.name;
+	}
+	
+	@Override
+	public @Nullable String getCSSId() {
+		return null;
+	}
+	
+	@Override
+	public @Nullable String getCSSClass() {
+		return this.cssClass;
+	}
+	
+	@Override
+	public @Nullable String getCSSStyle() {
+		return null;
+	}
+	
+	@Override
+	public String getAttribute(final String name) {
+		return ""; //$NON-NLS-1$
+	}
+	
+	
+	@Override
+	public String toString() {
+		final var sb= new StringBuilder();
+		appendNameRec(sb, this);
+		return sb.toString();
+	}
+	
+	static void appendNameRec(final StringBuilder sb, final VirtualStylableElement<?> element) {
+		final var parentNode= element.getParentNode();
+		if (parentNode instanceof VirtualStylableElement<?>) {
+			appendNameRec(sb, (VirtualStylableElement<?>)parentNode);
+			sb.append(' ');
+		}
+		else {
+			appendName(sb, parentNode, true);
+			sb.append(' ');
+		}
+		appendName(sb, element, false);
+	}
+	
+	static void appendName(final StringBuilder sb, final CSSStylableElement element, final boolean id) {
+		sb.append(element.getLocalName());
+		final String cssClass= element.getCSSClass();
+		if (cssClass != null) {
+			sb.append('.').append(cssClass);
+		}
+		if (id) {
+			sb.append('#').append(System.identityHashCode(element));
+		}
+	}
+	
+}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java
index a3528b5..f624820 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java
@@ -36,6 +36,9 @@
 		if (element instanceof ExpandableComposite) {
 			return new ExpandableCompositeElement((ExpandableComposite)element, engine);
 		}
+		if (element instanceof VirtualWidget) {
+			return ((VirtualWidget)element).getElement();
+		}
 		return null;
 	}
 	
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java
new file mode 100644
index 0000000..5551902
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java
@@ -0,0 +1,63 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ecommons.ui.swt.css.dom;
+
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.ui.workbench.css.VirtualComposite;
+import org.eclipse.statet.ecommons.ui.workbench.css.dom.VirtualStylableElement;
+
+
+/**
+ * Add a listener for {@link SWT#Skin} to apply styles to {@link VirtualStylableElement}s of
+ * {@link VirtualComposite}s.
+ */
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class VirtualCompositeSkinListener implements Listener {
+	
+	
+	private static boolean isEnabled;
+	
+	public static void enable(final Display display, final CSSEngine engine) {
+		if (isEnabled) {
+			return;
+		}
+		display.addListener(SWT.Skin, new VirtualCompositeSkinListener(display, engine));
+		isEnabled= true;
+	}
+	
+	
+	private final CSSEngine engine;
+	
+	
+	public VirtualCompositeSkinListener(final Display display, final CSSEngine cssEngine) {
+		this.engine = cssEngine;
+	}
+	
+	@Override
+	public void handleEvent(final Event event) {
+		if (event.widget instanceof VirtualComposite) {
+			VirtualCompositeSkinListener.this.engine.applyStyles(event.widget, true);
+		}
+	}
+	
+}
\ No newline at end of file
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java
new file mode 100644
index 0000000..5f87be7
--- /dev/null
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java
@@ -0,0 +1,43 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ecommons.ui.swt.css.dom;
+
+import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class VirtualWidget {
+	
+	
+	private CSSStylableElement element;
+	
+	
+	@SuppressWarnings("null")
+	public VirtualWidget() {
+	}
+	
+	public void setElement(final CSSStylableElement element) {
+		this.element= element;
+	}
+	
+	
+	public CSSStylableElement getElement() {
+		return this.element;
+	}
+	
+}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositeHandler.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositePropertyHandler.java
similarity index 70%
rename from ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositeHandler.java
rename to ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositePropertyHandler.java
index 7d749d0..1db3d97 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositeHandler.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositePropertyHandler.java
@@ -29,7 +29,7 @@
 
 @NonNullByDefault
 @SuppressWarnings("restriction")
-public class ExpandableCompositeHandler extends AbstractCSSPropertySWTHandler {
+public class ExpandableCompositePropertyHandler extends AbstractCSSPropertySWTHandler {
 	
 	
 	private static final String TITLE_BAR_FOREGROUND= "swt-titlebar-color"; //$NON-NLS-1$
@@ -38,6 +38,31 @@
 	@Override
 	protected @Nullable String retrieveCSSProperty(final Control control, final String property,
 			final @Nullable String pseudo, final CSSEngine engine) throws Exception {
+		if (!(control instanceof ExpandableComposite)) {
+			return null;
+		}
+		final var expandableComposite= (ExpandableComposite)control;
+		
+		switch (property) {
+		case TITLE_BAR_FOREGROUND:
+			if (pseudo == null) {
+				return engine.convert(expandableComposite.getTitleBarForeground(),
+						Color.class, null );
+			}
+			return null;
+//		case CSSPropertyFormHandler.TB_TOGGLE:
+//			if (pseudo == null) {
+//				expandableComposite.setToggleColor(
+//						(Color)engine.convert(value, Color.class, control.getDisplay()) );
+//			}
+//			else if (pseudo.equalsIgnoreCase("hover")) { //$NON-NLS-1$
+//				expandableComposite.setToggleHoverColor(
+//						(Color)engine.convert(value, Color.class, control.getDisplay()) );
+//			}
+//			return;
+		default:
+			break;
+		}
 		return null;
 	}
 	
@@ -45,16 +70,15 @@
 	protected void applyCSSProperty(final Control control, final String property,
 			final CSSValue value,
 			final @Nullable String pseudo, final CSSEngine engine) throws Exception {
-		if (!(control instanceof ExpandableComposite)
-				|| property == null
-				|| value.getCssValueType() != CSSValue.CSS_PRIMITIVE_VALUE) {
+		if (!(control instanceof ExpandableComposite)) {
 			return;
 		}
 		final var expandableComposite= (ExpandableComposite)control;
 		
-		switch (property.toLowerCase()) {
+		switch (property) {
 		case TITLE_BAR_FOREGROUND:
-			if (pseudo == null) {
+			if (pseudo == null
+					&& value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
 				expandableComposite.setTitleBarForeground(
 						(Color)engine.convert(value, Color.class, control.getDisplay()) );
 			}
@@ -70,8 +94,9 @@
 //			}
 //			return;
 		default:
-			return;
+			break;
 		}
+		return;
 	}
 	
 }
