diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.classpath b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.gitignore b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.project b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.project
new file mode 100644
index 0000000..3da90df
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.fx.ide.css.cssext.resolver.jdt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/ca.ecliptical.pde.ds.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/ca.ecliptical.pde.ds.prefs
new file mode 100644
index 0000000..7818b87
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/ca.ecliptical.pde.ds.prefs
@@ -0,0 +1,6 @@
+classpath=true
+eclipse.preferences.version=1
+enabled=true
+path=OSGI-INF/services
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/org.eclipse.jdt.core.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d39c0e7
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CssExt JDT Resolver
+Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.resolver.jdt
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.fx.ide.css.cssext;bundle-version="2.2.0"
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.core.runtime;version="3.5.0",
+ org.eclipse.fx.core;version="2.2.0",
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.internal.core,
+ org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
+Service-Component: OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver.xml
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver.xml
new file mode 100644
index 0000000..3ca643b
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" immediate="true" name="org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver">
+   <property name="context" value="org.eclipse.core.resources.IProject"/>
+   <service>
+      <provide interface="org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher"/>
+   </service>
+   <implementation class="org.eclipse.fx.ide.css.cssext.resolver.jdt.JDTClasspathCssExtResolver"/>
+</scr:component>
\ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/build.properties b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/build.properties
new file mode 100644
index 0000000..c58ea21
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/src/org/eclipse/fx/ide/css/cssext/resolver/jdt/JDTClasspathCssExtResolver.java b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/src/org/eclipse/fx/ide/css/cssext/resolver/jdt/JDTClasspathCssExtResolver.java
new file mode 100644
index 0000000..97a058f
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.jdt/src/org/eclipse/fx/ide/css/cssext/resolver/jdt/JDTClasspathCssExtResolver.java
@@ -0,0 +1,269 @@
+package org.eclipse.fx.ide.css.cssext.resolver.jdt;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.jar.Manifest;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher;
+import org.eclipse.jdt.core.ElementChangedEvent;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaElementDelta;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+
+@Component(service=CssExtFileWatcher.class, immediate=true, property={"context=org.eclipse.core.resources.IProject"})
+public class JDTClasspathCssExtResolver implements CssExtFileWatcher<IProject> {
+
+	private Map<IProject, List<Consumer<URI>>> addListener = new HashMap<>();
+	private Map<IProject, List<Consumer<URI>>> removeListener = new HashMap<>();
+	private Map<IProject, Set<URI>> cssExtURIs = new HashMap<>();
+	
+	
+	@Override
+	public String getId() {
+		return "jdt-classpath";
+	}
+	
+	private Set<URI> findAllCssExtFiles(IProject context) {
+		Set<URI> result = new HashSet<>();
+		try {
+			if (context.hasNature(JavaCore.NATURE_ID)) {
+				IJavaProject project = JavaCore.create(context);
+				IClasspathEntry[] resolvedClasspath = project.getResolvedClasspath(true);
+				
+				for (IClasspathEntry e : resolvedClasspath) {
+					System.err.println("entry " + e.getPath());
+					if (e.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
+						System.err.println("CPE_LIBRARY -> jar?");
+						System.err.println(" -> " + e.getPath());
+						
+						if (!e.getPath().toString().endsWith(".jar")) {
+							System.err.println("not supported.");
+							continue;
+						}
+						
+						try {
+							URI jarURI = URIUtil.fromString("file:" + e.getPath().toString());
+							
+							String baseURI = e.getPath().toString().endsWith(".jar") ? "jar:" + jarURI.toString() + "!" : jarURI.toString();
+							
+							URI manifestURI = new URI(baseURI + "/META-INF/MANIFEST.MF");
+							
+							Manifest mf = null;
+							String cssExtDefs = null;
+							try (InputStream data = manifestURI.toURL().openStream()) {
+								mf = new Manifest(data);
+								cssExtDefs = mf.getMainAttributes().getValue("CssExt-Definition");
+							}
+							catch (IOException ex) {
+								ex.printStackTrace();
+							}
+							
+							if (cssExtDefs != null) {
+								System.err.println("FOUND " + cssExtDefs);
+								for (String cssExtDef : cssExtDefs.split(",")) {
+									try {
+										URI extURI = new URI(baseURI + "/" + cssExtDef.trim());
+										System.err.println(" -> " + extURI);
+										result.add(extURI);
+									}
+									catch (URISyntaxException ex) {
+										ex.printStackTrace();
+									}
+								}
+							}
+						}
+						catch (URISyntaxException ex) {
+							ex.printStackTrace();
+						}
+						
+					}
+					else if (e.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
+						System.err.println("CPE_PROJECT");
+						System.err.println(" -> " + e.getOutputLocation());
+					}
+				}
+				
+			}
+		}
+		catch (CoreException e) {
+			e.printStackTrace();
+		}
+		
+		return result;
+	}
+	
+	private void onElementChange(ElementChangedEvent event) {
+		System.err.println("on catchall change " + event);
+		
+		IJavaElementDelta delta = event.getDelta();
+		for (IJavaElementDelta child : delta.getAffectedChildren()) {
+			if (child.getElement() instanceof IJavaProject) {
+				IJavaProject p = (IJavaProject) child.getElement();
+				IProject project = p.getProject();
+				System.err.println("Project " + p.getElementName() + " Change");
+				if ((child.getFlags() & IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) == IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED) {
+					System.err.println(" -> classpath change");
+					
+					for (IJavaElementDelta cc : child.getAffectedChildren()) {
+						if ((cc.getFlags() & IJavaElementDelta.F_ADDED_TO_CLASSPATH) == IJavaElementDelta.F_ADDED_TO_CLASSPATH ||
+								cc.getKind() == IJavaElementDelta.ADDED) {
+							System.err.println("  added " + cc.getElement());
+							
+							if (cc.getElement() instanceof IPackageFragmentRoot) {
+								IPackageFragmentRoot f = (IPackageFragmentRoot) cc.getElement();
+								for (URI uri : findCssExt(f)) {
+									Set<URI> set = cssExtURIs.get(project);
+									if (set != null) {
+										set.add(uri);
+										for (Consumer<URI> l : addListener.get(project)) {
+											l.accept(uri);
+										}
+									}
+								}
+							}
+							
+						}
+						if ((cc.getFlags() & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) == IJavaElementDelta.F_REMOVED_FROM_CLASSPATH ||
+								cc.getKind() == IJavaElementDelta.REMOVED) {
+							System.err.println("  removed " + cc.getElement());
+							
+							if (cc.getElement() instanceof IPackageFragmentRoot) {
+								IPackageFragmentRoot f = (IPackageFragmentRoot) cc.getElement();
+								for (URI uri : findCssExt(f)) {
+									Set<URI> set = cssExtURIs.get(project);
+									if (set != null) {
+										set.remove(uri);
+										for (Consumer<URI> l : removeListener.get(project)) {
+											l.accept(uri);
+										}
+									}
+								}
+							}
+						}
+					}
+					
+				}
+			}
+			
+		}
+	}
+	
+	private Set<URI> findCssExt(IPackageFragmentRoot f) {
+		System.err.println("external: " + f.isExternal());
+		System.err.println("path: " + f.getPath());
+		
+		String baseURI;
+		if (f.isExternal()) {
+			baseURI = "file:" + f.getPath().toString();
+		}
+		else {
+			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+			IResource res = root.findMember(f.getPath());
+			baseURI = "file:" + res.getLocation().toString();
+		}
+		
+		if (f.isArchive()) {
+			baseURI = "jar:" + baseURI.toString() + "!";
+		}
+		
+		final String fBaseURI = baseURI;
+		
+		System.err.println("baseURI = " + baseURI);
+		
+		String manifestURI = baseURI + "/META-INF/MANIFEST.MF";
+		
+		System.err.println("manifestURI = " + manifestURI);
+		
+		String cssExtDefs = null;
+		try (InputStream in = new URI(manifestURI).toURL().openStream()) {
+			Manifest mf = new Manifest(in);
+			cssExtDefs = mf.getMainAttributes().getValue("CssExt-Definition");
+		}
+		catch (URISyntaxException | IOException e) {
+			e.printStackTrace();
+		}
+		if (cssExtDefs != null) {
+			System.err.println("FOUND " + cssExtDefs + " in " + manifestURI);
+			
+			return Arrays.stream(cssExtDefs.split(","))
+					.map(cssExtDef -> URI.create(fBaseURI + (f.isArchive() ? "" : "/bin" ) + "/" + cssExtDef))
+					.collect(Collectors.toSet());
+		}
+		return Collections.emptySet();
+	}
+	
+	@Activate
+	protected void activate() {
+		JavaCore.addElementChangedListener(this::onElementChange);
+	}
+
+	@Deactivate
+	protected void deactivate() {
+		JavaCore.removeElementChangedListener(this::onElementChange);
+	}
+
+	private void init(IProject context) {
+		if (!cssExtURIs.containsKey(context)) {
+			try {
+				if (context.hasNature(JavaCore.NATURE_ID)) {
+					addListener.put(context, new ArrayList<>());
+					removeListener.put(context, new ArrayList<>());
+					cssExtURIs.put(context, new HashSet<>());
+					
+					// populate
+					cssExtURIs.get(context).addAll(findAllCssExtFiles(context));
+				}
+			}
+			catch (CoreException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	@Override
+	public Subscription subscribe(IProject context, Consumer<URI> onAdd, Consumer<URI> onRemove) {
+		init(context);
+		addListener.get(context).add(onAdd);
+		removeListener.get(context).add(onRemove);
+		
+		return new Subscription() {
+			@Override
+			public void dispose() {
+				addListener.get(context).remove(onAdd);
+				removeListener.get(context).remove(onRemove);
+				
+			}
+		};
+	}
+	
+	@Override
+	public Set<URI> getCurrent(IProject context) {
+		init(context);
+		return cssExtURIs.get(context);
+	}
+
+}
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.classpath b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.gitignore b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.project b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.project
new file mode 100644
index 0000000..df4f14f
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.fx.ide.css.cssext.resolver.osgi</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/ca.ecliptical.pde.ds.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/ca.ecliptical.pde.ds.prefs
new file mode 100644
index 0000000..7818b87
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/ca.ecliptical.pde.ds.prefs
@@ -0,0 +1,6 @@
+classpath=true
+eclipse.preferences.version=1
+enabled=true
+path=OSGI-INF/services
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/org.eclipse.jdt.core.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c4010e4
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CssExt OSGi Resolver
+Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.resolver.osgi
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.fx.ide.css.cssext;bundle-version="2.2.0"
+Service-Component: OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver.xml
+Import-Package: org.eclipse.fx.core;version="2.2.0",
+ org.osgi.framework,
+ org.osgi.service.component.annotations;version="1.2.0";resolution:=optional,
+ org.osgi.util.tracker;version="1.5.1"
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver.xml
new file mode 100644
index 0000000..11d4acd
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver">
+   <property name="context" value="java.lang.Void"/>
+   <service>
+      <provide interface="org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher"/>
+   </service>
+   <implementation class="org.eclipse.fx.ide.css.cssext.resolver.osgi.OSGiBundlesCssExtResolver"/>
+</scr:component>
\ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/build.properties b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/build.properties
new file mode 100644
index 0000000..c58ea21
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/CssExtBundleTracker.java b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/CssExtBundleTracker.java
new file mode 100644
index 0000000..9c86374
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/CssExtBundleTracker.java
@@ -0,0 +1,105 @@
+package org.eclipse.fx.ide.css.cssext.resolver.osgi;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.util.tracker.BundleTracker;
+
+public class CssExtBundleTracker extends BundleTracker<Object> implements CssExtFileWatcher<Void> {
+
+	private Set<URI> cssExtURIs = new HashSet<>();
+	private List<Consumer<URI>> addListeners = Collections.synchronizedList(new ArrayList<>());
+	private List<Consumer<URI>> removeListeners = Collections.synchronizedList(new ArrayList<>());
+	
+	@Override
+	public String getId() {
+		return "osgi-bundles";
+	}
+	
+	public CssExtBundleTracker(BundleContext context) {
+		super(context, Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE | Bundle.STARTING | Bundle.STOPPING, null);
+	}
+	
+	private static boolean notNull(Object o) {
+		return o != null;
+	}
+	
+	private static URI toURI(URL url) {
+		try {
+			return url.toURI();
+		}
+		catch (URISyntaxException e) {
+			
+		}
+		return null;
+	}
+
+	private Iterable<URI> getCssExt(Bundle bundle) {
+		String cssExtDefs = (String) bundle.getHeaders().get("CssExt-Definition");
+		if (cssExtDefs != null) {
+			return Arrays.stream(cssExtDefs.split(","))
+				.map(cssExtDef -> bundle.getResource(cssExtDef))
+				.filter(CssExtBundleTracker::notNull)
+				.map(CssExtBundleTracker::toURI)
+				.filter(CssExtBundleTracker::notNull)
+				.collect(Collectors.toSet());
+		}
+		return Collections.emptySet();
+	}
+	
+	@Override
+	public Object addingBundle(Bundle bundle, BundleEvent event) {
+		for (URI extURI : getCssExt(bundle)) {
+			cssExtURIs.add(extURI);
+			for (Consumer<URI> onAdd : addListeners) {
+				onAdd.accept(extURI);
+			}
+		}
+		return super.addingBundle(bundle, event);
+	}
+
+	@Override
+	public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
+		for (URI extURI : getCssExt(bundle)) {
+			cssExtURIs.remove(extURI);
+			for (Consumer<URI> onRemove : removeListeners) {
+				onRemove.accept(extURI);
+			}
+		}
+		super.removedBundle(bundle, event, object);
+	}
+	
+	@Override
+	public Subscription subscribe(Void context, Consumer<URI> onAdd, Consumer<URI> onRemove) {
+		if (onAdd != null) addListeners.add(onAdd);
+		if (onRemove != null) removeListeners.add(onRemove);
+		return new Subscription() {
+			@Override
+			public void dispose() {
+				if (onAdd != null) addListeners.remove(onAdd);
+				if (onRemove != null) removeListeners.remove(onRemove);
+			}
+		};
+	}
+	
+	@Override
+	public Set<URI> getCurrent(Void context) {
+		return cssExtURIs;
+	}
+	
+	
+}
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/OSGiBundlesCssExtResolver.java b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/OSGiBundlesCssExtResolver.java
new file mode 100644
index 0000000..37f5a50
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.osgi/src/org/eclipse/fx/ide/css/cssext/resolver/osgi/OSGiBundlesCssExtResolver.java
@@ -0,0 +1,44 @@
+package org.eclipse.fx.ide.css.cssext.resolver.osgi;
+
+import java.net.URI;
+import java.util.Set;
+import java.util.function.Consumer;
+
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+
+@Component(service=CssExtFileWatcher.class, property={"context=java.lang.Void"})
+public class OSGiBundlesCssExtResolver implements CssExtFileWatcher<Void> {
+
+	@Override
+	public String getId() {
+		return "osgi-bundles";
+	}
+	
+	private CssExtBundleTracker tracker;
+	
+	@Activate
+	protected void activate(BundleContext context) {
+		tracker = new CssExtBundleTracker(context);
+		tracker.open();
+	}
+	
+	@Deactivate
+	protected void deactivate() {
+		tracker.close();
+	}
+
+	@Override
+	public Subscription subscribe(Void context, Consumer<URI> onAdd, Consumer<URI> onRemove) {
+		return tracker.subscribe(context, onAdd, onRemove);
+	}
+
+	@Override
+	public Set<URI> getCurrent(Void context) {
+		return tracker.getCurrent(context);
+	}
+}
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.classpath b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.gitignore b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.project b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.project
new file mode 100644
index 0000000..b1ff9ff
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.fx.ide.css.cssext.resolver.pde</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/ca.ecliptical.pde.ds.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/ca.ecliptical.pde.ds.prefs
new file mode 100644
index 0000000..7818b87
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/ca.ecliptical.pde.ds.prefs
@@ -0,0 +1,6 @@
+classpath=true
+eclipse.preferences.version=1
+enabled=true
+path=OSGI-INF/services
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/org.eclipse.jdt.core.prefs b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ce5d429
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CssExt PDE Resolver
+Bundle-SymbolicName: org.eclipse.fx.ide.css.cssext.resolver.pde
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.runtime,
+ org.eclipse.equinox.frameworkadmin;version="2.0.0",
+ org.eclipse.fx.core;version="2.2.0",
+ org.eclipse.fx.ide.css.cssext.extapi.registry,
+ org.eclipse.osgi.service.resolver;version="1.6.0",
+ org.eclipse.pde.core.target,
+ org.eclipse.pde.internal.core,
+ org.osgi.service.component.annotations;version="1.2.0";resolution:=optional
+Service-Component: OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver.xml
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver.xml b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver.xml
new file mode 100644
index 0000000..3ea9e95
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/OSGI-INF/services/org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" immediate="true" name="org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver">
+   <property name="context" value="java.lang.Void"/>
+   <service>
+      <provide interface="org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher"/>
+   </service>
+   <implementation class="org.eclipse.fx.ide.css.cssext.resolver.pde.PDETargetCssExtResolver"/>
+</scr:component>
\ No newline at end of file
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/build.properties b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/build.properties
new file mode 100644
index 0000000..c58ea21
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/src/org/eclipse/fx/ide/css/cssext/resolver/pde/PDETargetCssExtResolver.java b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/src/org/eclipse/fx/ide/css/cssext/resolver/pde/PDETargetCssExtResolver.java
new file mode 100644
index 0000000..81de629
--- /dev/null
+++ b/bundles/tooling/org.eclipse.fx.ide.css.cssext.resolver.pde/src/org/eclipse/fx/ide/css/cssext/resolver/pde/PDETargetCssExtResolver.java
@@ -0,0 +1,160 @@
+package org.eclipse.fx.ide.css.cssext.resolver.pde;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.jar.Manifest;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.fx.core.Subscription;
+import org.eclipse.fx.ide.css.cssext.extapi.registry.CssExtFileWatcher;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.State;
+import org.eclipse.osgi.service.resolver.StateDelta;
+import org.eclipse.pde.core.target.ITargetDefinition;
+import org.eclipse.pde.core.target.TargetBundle;
+import org.eclipse.pde.internal.core.IStateDeltaListener;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.TargetPlatformHelper;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+
+@SuppressWarnings("restriction")
+@Component(service=CssExtFileWatcher.class, immediate=true, property={"context=java.lang.Void"})
+public class PDETargetCssExtResolver implements CssExtFileWatcher<Void> {
+
+	private Set<URI> cssExtURIs = new HashSet<>();
+	private List<Consumer<URI>> addListeners = Collections.synchronizedList(new ArrayList<>());
+	private List<Consumer<URI>> removeListeners = Collections.synchronizedList(new ArrayList<>());
+
+	@Override
+	public Subscription subscribe(Void context, Consumer<URI> onAdd, Consumer<URI> onRemove) {
+		if (onAdd != null) addListeners.add(onAdd);
+		if (onRemove != null) removeListeners.add(onRemove);
+		return new Subscription() {
+			@Override
+			public void dispose() {
+				if (onAdd != null) addListeners.remove(onAdd);
+				if (onRemove != null) removeListeners.remove(onRemove);
+			}
+		};
+	}
+	
+	@Override
+	public String getId() {
+		return "pde-target";
+	}
+	
+	private Set<BundleDescription> currentBundles = new HashSet<>();
+	
+	private Set<URI> findCssExt(String bundleLocation) {
+//		System.err.println("find " + bundleLocation);
+		String baseLocation = (bundleLocation.endsWith(".jar") ? "jar:" : "") + (bundleLocation.startsWith("file:") ? "" : "file:") + bundleLocation + (bundleLocation.endsWith(".jar") ? "!" : "");
+		
+		String manifestLocation = baseLocation + "/META-INF/MANIFEST.MF";
+		
+//		System.err.println(manifestLocation);
+		
+		String cssExtDefs = null;
+		try (InputStream in = new URI(manifestLocation).toURL().openStream()) {
+			Manifest mf = new Manifest(in);
+			cssExtDefs = mf.getMainAttributes().getValue("CssExt-Definition");
+		}
+		catch (URISyntaxException | IOException e) {
+			e.printStackTrace();
+		}
+		if (cssExtDefs != null) {
+			System.err.println("FOUND " + cssExtDefs + " in " + bundleLocation);
+			
+			return Arrays.stream(cssExtDefs.split(","))
+					.map(cssExtDef -> URI.create(baseLocation + (bundleLocation.endsWith(".jar") ? "" : "/bin" ) + "/" + cssExtDef))
+					.filter(PDETargetCssExtResolver::notNull)
+					.collect(Collectors.toSet());
+		}
+		return Collections.emptySet();
+	}
+	
+	private static boolean notNull(Object o) {
+		return o != null;
+	}
+	
+	private void checkBundles(Set<BundleDescription> currentBundles) {
+		Set<BundleDescription> oldBundles = this.currentBundles;
+		
+		Set<BundleDescription> removedBundles = new HashSet<>(oldBundles);
+		removedBundles.removeAll(currentBundles);
+		
+		Set<BundleDescription> addedBundles = new HashSet<>(currentBundles);
+		addedBundles.removeAll(oldBundles);
+		
+		for (BundleDescription b : addedBundles) {
+			for (URI cssExt : findCssExt(b.getLocation())) {
+				cssExtURIs.add(cssExt);
+				for (Consumer<URI> onAdd : addListeners) {
+					onAdd.accept(cssExt);
+				}
+			}
+		}
+		
+		for (BundleDescription b : removedBundles) {
+			for (URI cssExt : findCssExt(b.getLocation())) {
+				cssExtURIs.remove(cssExt);
+				for (Consumer<URI> onRemove : removeListeners) {
+					onRemove.accept(cssExt);
+				}
+			}
+		}
+		
+		this.currentBundles = currentBundles;
+	}
+
+	@Activate
+	protected void activate() {
+		try {
+			// install listener
+			PDECore.getDefault().getModelManager().addStateDeltaListener(new IStateDeltaListener() {
+
+				@Override
+				public void stateResolved(StateDelta delta) {
+					System.err.println("stateResolved " + delta);
+				}
+
+				@Override
+				public void stateChanged(State newState) {
+					System.err.println("stateChanged " + Arrays.toString(newState.getBundles()));
+					checkBundles(new HashSet<>(Arrays.asList(newState.getResolvedBundles())));
+				}
+			});
+
+			// initial load
+			ITargetDefinition target = TargetPlatformHelper.getWorkspaceTargetResolved(new NullProgressMonitor());
+			TargetBundle[] bundles = target.getBundles();
+			for (TargetBundle b : bundles) {
+				for (URI cssExt : findCssExt(b.getBundleInfo().getLocation().toString())) {
+					cssExtURIs.add(cssExt);
+					for (Consumer<URI> onAdd : addListeners) {
+						onAdd.accept(cssExt);
+					}
+				}
+			}
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@Override
+	public Set<URI> getCurrent(Void context) {
+		return cssExtURIs;
+	}
+
+}
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
index d968592..e73a2f4 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse.org
+CssExt-Definition: META-INF/jfx2.cssext
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/src/jfx2.cssext b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/jfx2.cssext
similarity index 99%
rename from bundles/tooling/org.eclipse.fx.ide.css.jfx2/src/jfx2.cssext
rename to bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/jfx2.cssext
index 33d5d39..3d2cce2 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx2/src/jfx2.cssext
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx2/META-INF/jfx2.cssext
@@ -1,3 +1,4 @@
+namespace "javafx/2"
 package javafx {
 	
 	boolean = true | false;
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
index 52f97fc..3f9512e 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse.org
+CssExt-Definition: META-INF/jfx8.cssext
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/src/jfx8.cssext b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/jfx8.cssext
similarity index 99%
rename from bundles/tooling/org.eclipse.fx.ide.css.jfx8/src/jfx8.cssext
rename to bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/jfx8.cssext
index aa2a955..1d2da4f 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.jfx8/src/jfx8.cssext
+++ b/bundles/tooling/org.eclipse.fx.ide.css.jfx8/META-INF/jfx8.cssext
@@ -1,3 +1,5 @@
+namespace "javafx/8"
+
 package javafx {
 
 	boolean = true | false;
@@ -717,7 +719,7 @@
 	 * </code>
 	 * </p>
 	 */
-	looked-up-color = reference_to_other_color_property; // TODO howto implement?!
+	looked-up-color = @PROPERTY_REF(<color>);
 
 	/**
 	 * The format of an RGB value in hexadecimal notation is a ‘#’ immediately followed by either three or six hexadecimal characters. The three-digit RGB notation (#rgb) is converted into six-digit form (#rrggbb) by replicating digits, not by adding zeros. For example, #fb0 expands to #ffbb00. This ensures that white (#ffffff) can be specified with the short notation (#fff) and removes any dependencies on the color depth of the display.
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.ui/src-gen/org/eclipse/fx/ide/css/ui/CssDslExecutableExtensionFactory.java b/bundles/tooling/org.eclipse.fx.ide.css.ui/src-gen/org/eclipse/fx/ide/css/ui/CssDslExecutableExtensionFactory.java
index c514ed8..74229f4 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css.ui/src-gen/org/eclipse/fx/ide/css/ui/CssDslExecutableExtensionFactory.java
+++ b/bundles/tooling/org.eclipse.fx.ide.css.ui/src-gen/org/eclipse/fx/ide/css/ui/CssDslExecutableExtensionFactory.java
@@ -11,7 +11,7 @@
 
 /**
  * This class was generated. Customizations should only happen in a newly
- * introduced subclass. 
+ * introduced subclass.
  */
 public class CssDslExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
 
@@ -19,10 +19,10 @@
 	protected Bundle getBundle() {
 		return CssActivator.getInstance().getBundle();
 	}
-	
+
 	@Override
 	protected Injector getInjector() {
 		return CssActivator.getInstance().getInjector(CssActivator.ORG_ECLIPSE_FX_IDE_CSS_CSSDSL);
 	}
-	
+
 }
diff --git a/bundles/tooling/org.eclipse.fx.ide.css/model/generated/CssDsl.genmodel b/bundles/tooling/org.eclipse.fx.ide.css/model/generated/CssDsl.genmodel
index 32bf1f3..77b34ae 100644
--- a/bundles/tooling/org.eclipse.fx.ide.css/model/generated/CssDsl.genmodel
+++ b/bundles/tooling/org.eclipse.fx.ide.css/model/generated/CssDsl.genmodel
@@ -3,7 +3,7 @@
     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="generated by Xtext 2.9.0" modelDirectory="/org.eclipse.fx.ide.css/src-gen"
     modelPluginID="org.eclipse.fx.ide.css" forceOverwrite="true" modelName="CssDsl"
     updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.10">
+    complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.11">
   <genPackages prefix="CssDsl" basePackage="org.eclipse.fx.ide.css" disposableProviderFactory="true"
       fileExtensions="css" ecorePackage="CssDsl.ecore#/">
     <genClasses ecoreClass="CssDsl.ecore#//Stylesheet">
