avoid early startup
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
index acc12d4..aa91ce6 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
@@ -12,7 +12,8 @@
  org.eclipse.xtext.ui;bundle-version="[2.11.0,2.12.0)",
  org.eclipse.jdt.launching,
  org.eclipse.xtext.common.types.ui;bundle-version="[2.11.0,2.12.0)",
- org.eclipse.osbp.xtext.builder.types.loader.api;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.xtext.builder.types.loader.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.common
 Import-Package: org.osgi.framework;version="1.7.0",
  org.osgi.framework.wiring;version="1.1.0",
  org.osgi.service.component;version="1.2.0",
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml b/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
index 1757a86..3359bfc 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
+++ b/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
@@ -4,4 +4,5 @@
    <service>
       <provide interface="org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService"/>
    </service>
+   <reference bind="bindWorkbenchAvailableService" cardinality="1..1" interface="org.eclipse.osbp.runtime.common.ui.IWorkbenchAvailable" name="WorkbenchAvailableService" policy="static" unbind="unbindWorkbenchAvailableService"/>
 </scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java b/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
index fd0cd70..4ff5016 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
+++ b/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
@@ -14,6 +14,11 @@
 import org.eclipse.core.resources.IStorage;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.osbp.runtime.common.ui.IWorkbenchAvailable;
+import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoader;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderFactory;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderProvider;
 import org.eclipse.xtext.common.types.TypesPackage;
 import org.eclipse.xtext.naming.QualifiedName;
 import org.eclipse.xtext.resource.IEObjectDescription;
@@ -24,14 +29,12 @@
 import org.eclipse.xtext.ui.resource.XtextResourceSetProvider;
 import org.eclipse.xtext.ui.shared.Access;
 import org.eclipse.xtext.util.Pair;
-import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoader;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderFactory;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderProvider;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -47,6 +50,7 @@
 	private XtextResourceSetProvider resourceSetProvider;
 	private IJdtTypeLoaderProvider typeLoaderProvider;
 	private IJdtTypeLoaderFactory typeLoaderFactory;
+	private IWorkbenchAvailable bindWorkbenchAvailableService;
 
 	public XtextUtilService() {
 
@@ -59,8 +63,7 @@
 		injector = Guice.createInjector(new UiModule());
 		resourceDescriptions = Access.getIResourceDescriptions().get();
 		javaStateHelper = injector.getInstance(JavaProjectsStateHelper.class);
-		resourceSetProvider = injector
-				.getInstance(XtextResourceSetProvider.class);
+		resourceSetProvider = injector.getInstance(XtextResourceSetProvider.class);
 		typeLoaderProvider = injector.getInstance(IJdtTypeLoaderProvider.class);
 		typeLoaderFactory = injector.getInstance(IJdtTypeLoaderFactory.class);
 	}
@@ -85,8 +88,7 @@
 	@Override
 	public IProject getProject(EClass eClass, String qualifiedName) {
 		IEObjectDescription temp = null;
-		for (IEObjectDescription desc : getEObjectDescriptions(eClass,
-				qualifiedName)) {
+		for (IEObjectDescription desc : getEObjectDescriptions(eClass, qualifiedName)) {
 			temp = desc;
 			break;
 		}
@@ -97,9 +99,8 @@
 	public IProject getProject(IEObjectDescription desc) {
 		IProject project = null;
 		if (desc != null) {
-			Iterable<Pair<IStorage, IProject>> storages = javaStateHelper
-					.getMapper().getStorages(
-							desc.getEObjectURI().trimFragment());
+			Iterable<Pair<IStorage, IProject>> storages = javaStateHelper.getMapper()
+					.getStorages(desc.getEObjectURI().trimFragment());
 
 			for (Pair<IStorage, IProject> pair : storages) {
 				project = pair.getSecond();
@@ -113,8 +114,7 @@
 	public IProject getProject(IResourceDescription description) {
 		IProject project = null;
 		if (description != null) {
-			Iterable<Pair<IStorage, IProject>> storages = javaStateHelper
-					.getMapper().getStorages(description.getURI());
+			Iterable<Pair<IStorage, IProject>> storages = javaStateHelper.getMapper().getStorages(description.getURI());
 
 			for (Pair<IStorage, IProject> pair : storages) {
 				project = pair.getSecond();
@@ -125,11 +125,9 @@
 	}
 
 	@Override
-	public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass,
-			String qualifiedName) {
+	public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass, String qualifiedName) {
 		IEObjectDescription firstDesc = null;
-		for (IEObjectDescription desc : getEObjectDescriptions(eClass,
-				qualifiedName)) {
+		for (IEObjectDescription desc : getEObjectDescriptions(eClass, qualifiedName)) {
 			firstDesc = desc;
 			break;
 		}
@@ -138,10 +136,8 @@
 		if (firstDesc != null) {
 			IProject project = getProject(firstDesc);
 			if (project != null) {
-				resourceSet = (XtextResourceSet) resourceSetProvider
-						.get(project);
-				resourceSet.getResource(firstDesc.getEObjectURI()
-						.trimFragment(), true);
+				resourceSet = (XtextResourceSet) resourceSetProvider.get(project);
+				resourceSet.getResource(firstDesc.getEObjectURI().trimFragment(), true);
 			}
 		}
 		return resourceSet;
@@ -153,13 +149,11 @@
 	}
 
 	@Override
-	public XtextResourceSet getConfiguredXtextResourceFor(IProject project,
-			Scope scope) {
+	public XtextResourceSet getConfiguredXtextResourceFor(IProject project, Scope scope) {
 		XtextResourceSet resourceSet = null;
 		if (project != null) {
 			if (project != null) {
-				resourceSet = (XtextResourceSet) resourceSetProvider
-						.get(project);
+				resourceSet = (XtextResourceSet) resourceSetProvider.get(project);
 				if (scope != null) {
 					scope.putLoadOption(resourceSet.getLoadOptions());
 				}
@@ -168,19 +162,15 @@
 		return resourceSet;
 	}
 
-	public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass,
-			String qualifiedName) {
-		Iterable<IEObjectDescription> result = resourceDescriptions
-				.getExportedObjects(eClass,
-						QualifiedName.create(qualifiedName.split("\\.")), true);
+	public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass, String qualifiedName) {
+		Iterable<IEObjectDescription> result = resourceDescriptions.getExportedObjects(eClass,
+				QualifiedName.create(qualifiedName.split("\\.")), true);
 		return result;
 	}
 
-	private Iterable<IEObjectDescription> getEObjectDescriptionsForJvmTypes(
-			String qualifiedName) {
-		Iterable<IEObjectDescription> result = resourceDescriptions
-				.getExportedObjects(TypesPackage.Literals.JVM_TYPE,
-						QualifiedName.create(qualifiedName.split("\\.")), true);
+	private Iterable<IEObjectDescription> getEObjectDescriptionsForJvmTypes(String qualifiedName) {
+		Iterable<IEObjectDescription> result = resourceDescriptions.getExportedObjects(TypesPackage.Literals.JVM_TYPE,
+				QualifiedName.create(qualifiedName.split("\\.")), true);
 		return result;
 	}
 
@@ -193,8 +183,7 @@
 
 		if (firstDesc != null) {
 			IProject project = getProject(firstDesc);
-			IJdtTypeLoader loader = typeLoaderProvider.get(JavaCore
-					.create(project));
+			IJdtTypeLoader loader = typeLoaderProvider.get(JavaCore.create(project));
 			return loader.findTypeByName(qualifiedName);
 		}
 		return null;
@@ -209,10 +198,25 @@
 
 		if (firstDesc != null) {
 			IProject project = getProject(firstDesc);
-			IJdtTypeLoader loader = typeLoaderFactory
-					.createJdtTypeLoader(JavaCore.create(project));
+			IJdtTypeLoader loader = typeLoaderFactory.createJdtTypeLoader(JavaCore.create(project));
 			return loader.findTypeByName(qualifiedName);
 		}
 		return null;
 	}
+
+	/**
+	 * Is used to track the workbench state. As soon as the workbench is
+	 * available, this service may start. But not before to avoid eager
+	 * swt.Display instantiation.
+	 * 
+	 * @param service
+	 */
+	@Reference(cardinality = ReferenceCardinality.MANDATORY)
+	void bindWorkbenchAvailableService(IWorkbenchAvailable service) {
+		this.bindWorkbenchAvailableService = service;
+	}
+
+	void unbindWorkbenchAvailableService(IWorkbenchAvailable service) {
+		this.bindWorkbenchAvailableService = null;
+	}
 }