diff --git a/tests/org.eclipse.e4.ui.tests.css.swt/META-INF/MANIFEST.MF b/tests/org.eclipse.e4.ui.tests.css.swt/META-INF/MANIFEST.MF
index 6ddabb8..0fb880d 100644
--- a/tests/org.eclipse.e4.ui.tests.css.swt/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.e4.ui.tests.css.swt/META-INF/MANIFEST.MF
@@ -18,6 +18,8 @@
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.eclipse.core.runtime;version="3.5.0",
+ org.eclipse.e4.core.contexts;version="1.6.0",
+ org.eclipse.e4.ui.internal.workbench.swt,
  org.osgi.framework;version="1.7.0";resolution:=optional,
  org.osgi.service.event;version="1.3.0";resolution:=optional
 Eclipse-BundleShape: dir
diff --git a/tests/org.eclipse.e4.ui.tests.css.swt/css/cssfortest.css b/tests/org.eclipse.e4.ui.tests.css.swt/css/cssfortest.css
new file mode 100644
index 0000000..cc6a93f
--- /dev/null
+++ b/tests/org.eclipse.e4.ui.tests.css.swt/css/cssfortest.css
@@ -0,0 +1,4 @@
+Label {
+ color:blue;
+ background:red;
+}
diff --git a/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/CssSwtTestSuite.java b/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/CssSwtTestSuite.java
index 70ebf05..232ebae 100644
--- a/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/CssSwtTestSuite.java
+++ b/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/CssSwtTestSuite.java
@@ -39,6 +39,7 @@
 import org.eclipse.e4.ui.tests.css.swt.InnerClassElementTest;
 import org.eclipse.e4.ui.tests.css.swt.LabelTest;
 import org.eclipse.e4.ui.tests.css.swt.LabelTextTransformTest;
+import org.eclipse.e4.ui.tests.css.swt.LifeCycleTest;
 import org.eclipse.e4.ui.tests.css.swt.LinkTest;
 import org.eclipse.e4.ui.tests.css.swt.MarginTest;
 import org.eclipse.e4.ui.tests.css.swt.ShellActiveTest;
@@ -67,6 +68,7 @@
 	EclipsePreferencesHelperTest.class,
 	CSSSWTWidgetTest.class,
 	LabelTest.class,
+	LifeCycleTest.class,
 	LinkTest.class,
 	CTabFolderTest.class,
 	CTabItemTest.class,
diff --git a/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/swt/LifeCycleTest.java b/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/swt/LifeCycleTest.java
new file mode 100644
index 0000000..c2fa1d5
--- /dev/null
+++ b/tests/org.eclipse.e4.ui.tests.css.swt/src/org/eclipse/e4/ui/tests/css/swt/LifeCycleTest.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2017 vogella GmbH and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Lars Vogel <Lars.Vogel@vogella.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.e4.ui.tests.css.swt;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.e4.core.contexts.EclipseContextFactory;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.Test;
+
+/**
+ * Test to ensure that the PartRenderingEngine can be used with an registered
+ * CSS engie. This is useful for example in an e4 lifecycle hook, in which the
+ * CSS engine is not yet initialized
+ *
+ */
+public class LifeCycleTest extends CSSSWTTestCase {
+
+	static final RGB RED = new RGB(255, 0, 0);
+	static final RGB GREEN = new RGB(0, 255, 0);
+	static final RGB BLUE = new RGB(0, 0, 255);
+	private Label label;
+
+	protected Shell createTestShell() {
+		IEclipseContext ctx = EclipseContextFactory.create();
+
+		String cssURI = "platform:/plugin/org.eclipse.e4.ui.tests.css.swt/css/cssfortest.css";
+		ctx.set("applicationCSS", cssURI);
+		Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+		// Create widgets
+		FillLayout layout = new FillLayout();
+		shell.setLayout(layout);
+		Composite panel = new Composite(shell, SWT.NONE);
+		panel.setLayout(new FillLayout());
+		label = new Label(panel, SWT.NONE);
+		label.setText("");
+
+
+		shell.pack();
+		PartRenderingEngine.initializeStyling(display, ctx);
+		return shell;
+	}
+
+
+	@Test
+	public void testLabelColorViaPartRenderingEngine() {
+		createTestShell();
+		assertEquals(RED, label.getBackground().getRGB());
+		assertEquals(BLUE, label.getForeground().getRGB());
+	}
+
+}
\ No newline at end of file
