diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/plugin.xml_gen b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/plugin.xml_gen
index f71433e..c759fd5 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/plugin.xml_gen
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/plugin.xml_gen
@@ -100,6 +100,12 @@
          </command>  
          </menuContribution>
     </extension>
+    	<extension
+         point="org.eclipse.xtext.ui.core.languageBuilder">
+      <languageBuilder
+            class="org.eclipse.amp.amf.testing.ATestExecutableExtensionFactory:org.eclipse.xtext.ui.core.builder.ILanguageBuilder">
+      </languageBuilder>
+   </extension>
 
 <!-- adding resource factories -->
 
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/ATestExecutableExtensionFactory.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/ATestExecutableExtensionFactory.java
index d98fbdd..027fc54 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/ATestExecutableExtensionFactory.java
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/ATestExecutableExtensionFactory.java
@@ -5,52 +5,24 @@
  
 package org.eclipse.amp.amf.testing;
 
-import org.apache.log4j.Logger;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.core.runtime.IExecutableExtensionFactory;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.xtext.ui.core.guice.AbstractGuiceAwareExecutableExtensionFactory;
 import org.osgi.framework.Bundle;
 
 import com.google.inject.Injector;
 
 /**
- * generated
+ *@generated
  */
-public class ATestExecutableExtensionFactory implements IExecutableExtensionFactory, IExecutableExtension {
+public class ATestExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
 
-	private Logger log = Logger.getLogger(ATestExecutableExtensionFactory.class);
-	private String clazzName;
-	private IConfigurationElement config;
-
-	public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
-		throws CoreException {
-		if (data instanceof String) {
-			clazzName = (String) data;
-			this.config = config;
-		}
-		else {
-			throw new IllegalArgumentException("couldn't handle passed data : "+data);
-		}
+	@Override
+	protected Bundle getBundle() {
+		return org.eclipse.amp.amf.testing.internal.ATestActivator.getInstance().getBundle();
 	}
 	
-	public Object create() throws CoreException {
-		org.eclipse.amp.amf.testing.internal.ATestActivator instance = org.eclipse.amp.amf.testing.internal.ATestActivator.getInstance();
-		if (instance == null)
-			throw new IllegalStateException("The bundle has not yet been activated. Make sure the Manifest.MF contains 'Bundle-ActivationPolicy: lazy'.");
-		Bundle bundle = instance.getBundle();
-		try {
-			final Class<?> clazz = bundle.loadClass(clazzName);
-			final Injector injector = org.eclipse.amp.amf.testing.internal.ATestActivator.getInstance().getInjector("org.eclipse.amp.amf.testing.ATest");
-			final Object result = injector.getInstance(clazz);
-			if (result instanceof IExecutableExtension)
-				((IExecutableExtension) result).setInitializationData(config, null, null);
-			return result;
-		}
-		catch (Exception e) {
-			log.error(e);
-			throw new CoreException(new Status(Status.ERROR, bundle.getSymbolicName(), e.getMessage(),e));
-		}
+	@Override
+	protected Injector getInjector() {
+		return org.eclipse.amp.amf.testing.internal.ATestActivator.getInstance().getInjector("org.eclipse.amp.amf.testing.ATest");
 	}
+	
 }
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/AbstractATestUiModule.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/AbstractATestUiModule.java
index c54e91d..664ccdf 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/AbstractATestUiModule.java
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/AbstractATestUiModule.java
@@ -108,13 +108,18 @@
 	}
 
 	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
-	public Class<? extends org.eclipse.xtext.ui.core.editor.utils.ValidationJob.Factory> bindValidationJob$Factory() {
-		return org.eclipse.xtext.ui.core.editor.utils.DefaultValidationJobFactory.class;
+	public Class<? extends org.eclipse.xtext.ui.core.editor.validation.IXtextResourceChecker> bindIXtextResourceChecker() {
+		return org.eclipse.xtext.ui.core.editor.validation.DefaultXtextResourceChecker.class;
 	}
 
 	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
-	public Class<? extends org.eclipse.xtext.ui.core.editor.IXtextResourceChecker> bindIXtextResourceChecker() {
-		return org.eclipse.xtext.ui.core.editor.DefaultXtextResourceChecker.class;
+	public Class<? extends com.google.inject.Provider<org.eclipse.xtext.index.IXtextIndex>> provideIXtextIndex() {
+		return org.eclipse.xtext.ui.core.index.IndexProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
+	public Class<? extends org.eclipse.xtext.ui.core.builder.ILanguageBuilder> bindILanguageBuilder() {
+		return org.eclipse.xtext.ui.core.builder.impl.SimpleProjectLanguageBuilder.class;
 	}
 
 	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/internal/ATestActivator.java b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/internal/ATestActivator.java
index cf2af35..569c591 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/internal/ATestActivator.java
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.testing.ui/src-gen/org/eclipse/amp/amf/testing/internal/ATestActivator.java
@@ -4,6 +4,7 @@
  */
 package org.eclipse.amp.amf.testing.internal;
 
+import org.apache.log4j.Logger;
 import org.eclipse.xtext.ui.common.service.UIPluginModule;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -31,12 +32,17 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		INSTANCE = this;
-		
-		injectors.put("org.eclipse.amp.amf.testing.ATest", Guice.createInjector(
-			new org.eclipse.amp.amf.testing.ATestUiModule(),
-			createUIPluginModule()
-		));
-		
+		try {
+			
+			injectors.put("org.eclipse.amp.amf.testing.ATest", Guice.createInjector(
+				new org.eclipse.amp.amf.testing.ATestUiModule(),
+				createUIPluginModule()
+			));
+			
+		} catch (Exception e) {
+			Logger.getLogger(getClass()).error(e.getMessage(), e);
+			throw e;
+		}
 	}
 	
 	public static ATestActivator getInstance() {
