diff --git a/bundles/org.eclipse.e4.tools.orion.css.editor/src/org/eclipse/e4/tools/orion/css/editor/views/SampleCSSView.java b/bundles/org.eclipse.e4.tools.orion.css.editor/src/org/eclipse/e4/tools/orion/css/editor/views/SampleCSSView.java
index 544d8af..d4ec3c6 100644
--- a/bundles/org.eclipse.e4.tools.orion.css.editor/src/org/eclipse/e4/tools/orion/css/editor/views/SampleCSSView.java
+++ b/bundles/org.eclipse.e4.tools.orion.css.editor/src/org/eclipse/e4/tools/orion/css/editor/views/SampleCSSView.java
@@ -6,9 +6,16 @@
 import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.RegistryFactory;
 import org.eclipse.e4.tools.orion.css.editor.Activator;
 import org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngine;
 import org.eclipse.e4.ui.css.swt.theme.ITheme;
@@ -64,33 +71,85 @@
 		try {
 			initContent();
 			final Bundle bundle = Activator.getDefault().getBundle();
-			final InputStream in = bundle
-					.getEntry("/web/css.html").openStream();
-			String cssTemplate = loadFile(in, 1024);
-			final String editorCssUrl = FileLocator.toFileURL(bundle.getEntry("/web/built-editor.css")).toExternalForm();
-			final String editorJsUrl = FileLocator.toFileURL(bundle.getEntry("/web/built-editor.js")).toExternalForm();
-			
-			editorHtml = String.format(cssTemplate, editorCssUrl, editorJsUrl, editorContent);
+			final InputStream contentAssistInput = bundle.getEntry(
+					"/web/swtContentAssist.js").openStream();
+			String contentAssistTemplate = loadFile(contentAssistInput, 1024);
+			String keywords = loadKeywords();
+			String contentAssist = String.format(contentAssistTemplate,
+					keywords);
+			final InputStream cssTemplateInput = bundle.getEntry(
+					"/web/css.html").openStream();
+			String cssTemplate = loadFile(cssTemplateInput, 1024);
+			final String editorCssUrl = FileLocator.toFileURL(
+					bundle.getEntry("/web/built-editor.css")).toExternalForm();
+			final String editorJsUrl = FileLocator.toFileURL(
+					bundle.getEntry("/web/built-editor.js")).toExternalForm();
+
+			editorHtml = String.format(cssTemplate, editorCssUrl, editorJsUrl,
+					contentAssist, editorContent);
 			System.out.println(editorHtml);
 		} catch (IOException e) {
 			throw new PartInitException("Failed to load CSS editor", e);
 		}
 	}
-	
+
+	private String loadKeywords() {
+		StringBuilder buf = new StringBuilder();
+
+		IExtensionRegistry registry = RegistryFactory.getRegistry();
+		IExtensionPoint extPoint = registry
+				.getExtensionPoint("org.eclipse.e4.ui.css.core.propertyHandler");
+		ArrayList<IConfigurationElement> matchingElements = new ArrayList<IConfigurationElement>();
+		ArrayList<IConfigurationElement> controlAdapters = new ArrayList<IConfigurationElement>();
+		for (IExtension e : extPoint.getExtensions()) {
+			IConfigurationElement[] elements = e.getConfigurationElements();
+			for (int i = 0; i < elements.length; i++) {
+				IConfigurationElement element = elements[i];
+				controlAdapters.add(element);
+				IConfigurationElement[] child = element
+						.getChildren("property-name");
+				for (int j = 0; j < child.length; j++) {
+					matchingElements.add(child[j]);
+				}
+			}
+		}
+		Iterator<IConfigurationElement> iter = matchingElements.iterator();
+		boolean once = true;
+		while (iter.hasNext()) {
+			IConfigurationElement type = iter.next();
+			String name = type.getAttribute("name");
+			if (!once) {
+				buf.append(',');
+				buf.append('\n');
+			}
+			buf.append('"');
+			buf.append(name);
+			buf.append('"');
+			once = false;
+		}
+		buf.append('\n');
+		
+		return buf.toString();
+	}
+
 	private void initContent() throws MalformedURLException, IOException {
-		IThemeEngine engine = (IThemeEngine) getSite().getService(IThemeEngine.class);
+		IThemeEngine engine = (IThemeEngine) getSite().getService(
+				IThemeEngine.class);
 		final ITheme theme = engine.getActiveTheme();
-		final List<String> sheets = ((ThemeEngine)engine).getStylesheets(theme);
-		if (sheets.size()>0) {
+		final List<String> sheets = ((ThemeEngine) engine)
+				.getStylesheets(theme);
+		if (sheets.size() > 0) {
 			String path = sheets.get(0);
-			final InputStream in = FileLocator.toFileURL(new URL(sheets.get(0))).openStream();
+			final InputStream in = FileLocator
+					.toFileURL(new URL(sheets.get(0))).openStream();
 			editorContent = loadFile(in, 1024);
 		} else {
 			editorContent = "/*\n * This is an Orion editor sample.\n */\nfunction() {\n    var a = 'hi there!';\n    window.console.log(a);\n}";
 		}
 	}
 
-	public String loadFile(final InputStream in, final int bufferSize) throws IOException {
+	public String loadFile(final InputStream in, final int bufferSize)
+			throws IOException {
 		final char[] buffer = new char[bufferSize];
 		final StringBuilder out = new StringBuilder();
 		final Reader reader = new InputStreamReader(in, "UTF-8");
diff --git a/bundles/org.eclipse.e4.tools.orion.css.editor/web/css.html b/bundles/org.eclipse.e4.tools.orion.css.editor/web/css.html
index 8455588..716dd05 100644
--- a/bundles/org.eclipse.e4.tools.orion.css.editor/web/css.html
+++ b/bundles/org.eclipse.e4.tools.orion.css.editor/web/css.html
@@ -1,16 +1,44 @@
 <html>
 <head>
+<title>Theme CSS editor</title>
+<style>
+#editor {
+	border: 1px solid teal;
+	position: absolute;
+	top: 0px;
+	left: 0px;
+	bottom: 0px;
+	right: 0px;
+	margin: 20px;
+}
+
+pre {
+	margin: 0px;
+}
+</style>
 <link rel="stylesheet" type="text/css" href="%s"/>
 <script src="%s"></script>
 <script>
-	require(["orion/editor/edit"], function(edit) {
-		window.editor = edit({className: "editor"})[0];
+%s
+</script>
+<script>
+	/*globals require*/
+	require(["orion/editor/edit", "examples/editor/swtContentAssist"], function(edit, mSWTContentAssist) {
+		var editor = edit({
+			lang: "css"
+		});
+		//ADD THE SWT CONTENT ASSIST
+		var contentAssist = editor.getContentAssist ? editor.getContentAssist() : editor._contentAssist;
+		contentAssist.addEventListener("Activating", function() { //$NON-NLS-0$
+			contentAssist.providers.push(new mSWTContentAssist.SWTContentAssistProvider());
+		});
+		window.editor = editor;
+		//----------------
 	});
 </script>
 </head>
-<body>
-<h2>Sample CSS Editor</h2>
-<pre id="regulus" class="editor" data-editor-lang="css">
+<body spellcheck="false">
+<pre id="editor" class="editor" data-editor-lang="css">
 %s
 </pre>
 </body>
diff --git a/bundles/org.eclipse.e4.tools.orion.css.editor/web/swtContentAssist.js b/bundles/org.eclipse.e4.tools.orion.css.editor/web/swtContentAssist.js
new file mode 100644
index 0000000..b371f6d
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.orion.css.editor/web/swtContentAssist.js
@@ -0,0 +1,66 @@
+
+/*global define */
+
+define('examples/editor/swtContentAssist', [ //$NON-NLS-0$
+	'orion/editor/templates' //$NON-NLS-0$
+], function(mTemplates) {
+
+	var colorValues = {
+		type: "link", //$NON-NLS-0$
+		values: [
+			"COLOR_BLACK", //$NON-NLS-0$
+			"COLOR_INFO_BACKGROUND", //$NON-NLS-0$
+			"black", //$NON-NLS-0$
+			"white", //$NON-NLS-0$
+			"red", //$NON-NLS-0$
+			"green", //$NON-NLS-0$
+			"blue", //$NON-NLS-0$
+			"magenta", //$NON-NLS-0$
+			"yellow", //$NON-NLS-0$
+			"cyan", //$NON-NLS-0$
+			"grey", //$NON-NLS-0$
+			"darkred", //$NON-NLS-0$
+			"darkgreen", //$NON-NLS-0$
+			"darkblue", //$NON-NLS-0$
+			"darkmagenta", //$NON-NLS-0$
+			"darkcyan", //$NON-NLS-0$
+			"darkyellow", //$NON-NLS-0$
+			"darkgray", //$NON-NLS-0$
+			"lightgray" //$NON-NLS-0$
+		]
+	};
+	function fromJSON(o) {
+		return JSON.stringify(o).replace("}", "\\}"); //$NON-NLS-1$ //$NON-NLS-0$
+	}
+	var templates = [
+		{
+			prefix: "swt-outer-keyline-color", //$NON-NLS-0$
+			description: "ctab folder keyline - keyline color", //$NON-NLS-0$
+			template: "swt-outer-keyline-color: ${color:" + fromJSON(colorValues) + "};" //$NON-NLS-1$ //$NON-NLS-0$
+		},
+		{
+			prefix: "frame-image", //$NON-NLS-0$
+			description: "image - the frame image", //$NON-NLS-0$
+			template: "frame-image: url(\"${uri}\");" //$NON-NLS-0$
+		}
+	];
+	var keywords = [
+		%s
+	];
+
+	function SWTContentAssistProvider() {
+	}
+	SWTContentAssistProvider.prototype = new mTemplates.TemplateContentAssist(keywords, templates);
+	
+	SWTContentAssistProvider.prototype.getPrefix = function(buffer, offset, context) {
+		var index = offset;
+		while (index && /[A-Za-z\-\@]/.test(buffer.charAt(index - 1))) {
+			index--;
+		}
+		return index ? buffer.substring(index, offset) : "";
+	};
+
+	return {
+		SWTContentAssistProvider: SWTContentAssistProvider
+	};
+});
\ No newline at end of file
