diff --git a/build/pom.xml b/build/pom.xml
new file mode 100644
index 0000000..2eb41ca
--- /dev/null
+++ b/build/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2011 PetalsLink
+ *  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
+ *
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.eclipse.gmf-tooling</groupId>
+    <artifactId>parent</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>Parent project for GMF Tooling</name>
+    <description>Parent project for GMF Tooling</description>
+
+    <prerequisites>
+        <maven>3.0</maven>
+    </prerequisites>
+
+
+    <modules>
+        <module>../</module>
+        <module>../extra</module>
+    </modules>
+
+	<mailingLists>
+        <mailingList>
+            <name>GMF-dev Mailing List</name>
+            <post>gmf-dev@eclipse.org</post>
+            <subscribe>https://dev.eclipse.org/mailman/listinfo/gmf-dev</subscribe>
+            <unsubscribe>https://dev.eclipse.org/mailman/listinfo/gmf-dev</unsubscribe>
+            <archive>http://dev.eclipse.org/mhonarc/lists/gmf-dev</archive>
+        </mailingList>
+    </mailingLists>
+
+    <issueManagement>
+        <url>https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling;query_format=advanced;component=GMF-tooling;product=GMP</url>
+        <system>Bugzilla</system>
+    </issueManagement>
+
+    <licenses>
+        <license>
+            <name>Eclipse Public License v1.0</name>
+            <comments>
+                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.htm
+            </comments>
+        </license>
+    </licenses>
+
+
+</project> 
diff --git a/doc/pom.xml b/doc/pom.xml
index df33ae4..69bd062 100644
--- a/doc/pom.xml
+++ b/doc/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/examples/pom.xml b/examples/pom.xml
index 08f895f..ae1b613 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml b/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml
index 50c52ad..2e64091 100644
--- a/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml
+++ b/extra/org.eclipse.gmf.tooling.codegen.maven/pom.xml
@@ -12,7 +12,7 @@
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
 		<artifactId>extra</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
+		<version>1.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
@@ -21,6 +21,7 @@
 		<plexusVersion>1.5.5</plexusVersion>
 		<maven-version>3.0</maven-version>
 		<plexusUtilsVersion>3.0.7</plexusUtilsVersion>
+		<tycho-version>0.23.1</tycho-version>
 	</properties>
 
 	<build>
diff --git a/extra/pom.xml b/extra/pom.xml
index b4ad4a5..b72b69e 100644
--- a/extra/pom.xml
+++ b/extra/pom.xml
@@ -11,13 +11,14 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>org.eclipse.gmf-tooling</groupId>
 	<artifactId>extra</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
 		<artifactId>parent</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../</relativePath>
+		<version>1.0.0-SNAPSHOT</version>
+		<relativePath>../build</relativePath>
 	</parent>
 
 	<modules>
diff --git a/features/pom.xml b/features/pom.xml
index c1d8d9e..210745e 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/Activator.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/Activator.java
index feec5c5..170ac75 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/Activator.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/Activator.java
@@ -1,6 +1,7 @@
 package org.eclipse.gmf.codegen.xtend.ui;
 
 import org.eclipse.gmf.codegen.util.GMFGeneratorModule;
+import org.eclipse.gmf.codegen.util.GMFGeneratorUIModule;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.xtext.util.Modules2;
 import org.osgi.framework.BundleContext;
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/GMFGeneratorUIModule.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/GMFGeneratorUIModule.java
index 8ac1a26..e1a73c8 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/GMFGeneratorUIModule.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/GMFGeneratorUIModule.java
@@ -1,7 +1,8 @@
 package org.eclipse.gmf.codegen.xtend.ui;
 
-import org.eclipse.xtext.service.AbstractGenericModule;
-
-public class GMFGeneratorUIModule extends AbstractGenericModule {
+/**
+ * Use {@link org.eclipse.gmf.codegen.util.GMFGeneratorUIModule}
+ */
+public class GMFGeneratorUIModule extends org.eclipse.gmf.codegen.util.GMFGeneratorUIModule {
 
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/CodegenEmittersWithXtend2.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/CodegenEmittersWithXtend2.java
index e30cb2b..cbf7ce2 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/CodegenEmittersWithXtend2.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/CodegenEmittersWithXtend2.java
@@ -1,23 +1,12 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
-import java.util.List;
-
 import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
-import org.eclipse.gmf.codegen.util.CodegenEmitters;
-import org.eclipse.gmf.codegen.util.ExtensionTemplatesProviderImpl;
-import org.eclipse.gmf.codegen.util.GMFGeneratorModule;
-import org.eclipse.gmf.codegen.util.IExtensionTemplatesProvider;
-import org.eclipse.gmf.common.UnexpectedBehaviourException;
-import org.eclipse.gmf.internal.common.codegen.JavaClassEmitter;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-public class CodegenEmittersWithXtend2 extends CodegenEmitters {
-
-	private final Injector myInjector;
-
-	private IExtensionTemplatesProvider myExtensionTemplateProvider = null;
+/**
+ * Use {@link org.eclipse.gmf.codegen.util.CodegenEmittersWithXtend2}
+ */
+@Deprecated
+public class CodegenEmittersWithXtend2 extends org.eclipse.gmf.codegen.util.CodegenEmittersWithXtend2 {
 
 	public CodegenEmittersWithXtend2(GenEditorGenerator genModel) {
 		this(!genModel.isDynamicTemplates(), genModel.getTemplateDirectory(), genModel.getModelAccess() != null);
@@ -25,76 +14,5 @@
 
 	public CodegenEmittersWithXtend2(boolean useBaseTemplatesOnly, String templateDirectory, boolean includeDynamicModelTemplates) {
 		super(useBaseTemplatesOnly, templateDirectory, includeDynamicModelTemplates);
-		if (templateDirectory != null && !templateDirectory.isEmpty()) {
-			myExtensionTemplateProvider = new ExtensionTemplatesProviderImpl(templateDirectory,!useBaseTemplatesOnly);
-		}
-		myInjector = Guice.createInjector(new GMFGeneratorModule(myExtensionTemplateProvider));
-	}
-
-	//-----------------------------------------------------------------------------------------
-
-	/**
-	 * FIXME: [MG] make separate xtend templates calling shared code, not vise versa
-	 */
-	@Override
-	public JavaClassEmitter getTextNonResizableEditPolicyEmitter() throws UnexpectedBehaviourException {
-		return getXtendEmitter("xpt::diagram::editpolicies::TextNonResizableEditPolicy", "TextNonResizableEditPolicy"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/**
-	 * FIXME: [MG] make separate xtend templates calling shared code, not vise versa
-	 */
-	@Override
-	public JavaClassEmitter getTextSelectionEditPolicyEmitter() throws UnexpectedBehaviourException {
-		return getXtendEmitter("xpt::diagram::editpolicies::TextSelectionEditPolicy", "TextSelectionEditPolicy"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	@Override
-	public JavaClassEmitter getPropertySheetLabelProviderEmitter() throws UnexpectedBehaviourException {
-		return getXtendEmitter("xpt::propsheet::LabelProvider", "LabelProvider"); //$NON-NLS-1$
-	}
-	
-	@Override
-	public JavaClassEmitter getPropertySectionEmitter() throws UnexpectedBehaviourException {
-		return  getXtendEmitter("xpt::propsheet::PropertySection", "PropertySection"); //$NON-NLS-1$
-	}
-	
-	@Override
-	public JavaClassEmitter getModelAccessFacilityEmitter() {
-		return getXtendEmitter("metamodel::Facility", "Main");
-	}
-	
-	private JavaClassEmitter getXtendEmitter(String templateFqn, String mainMethod) {
-		String classFqn = templateFqn.replace("::", ".");
-		Class<?> clazz = null;
-		try {
-			clazz = Class.forName(classFqn);
-		} catch (ClassNotFoundException e) {
-			if (myExtensionTemplateProvider != null) {
-				List<Class<?>> customClasses = myExtensionTemplateProvider.getCustomTemplateClasses();
-				for (Class<?> _class : customClasses) {
-					String name = _class.getName();
-					if (name.equals(classFqn)) {
-						clazz = _class;
-						break;
-					}
-				}
-			}
-			if (clazz == null) {
-				throw new IllegalStateException("Can't load: " + classFqn, e);
-			}
-		}
-		return new Xtend2ClassEmitter(myInjector, clazz, mainMethod);
-	}
-
-	public void disposeEmitters() {
-		if (myExtensionTemplateProvider != null) {
-			myExtensionTemplateProvider.dispose();
-		}
-	}
-	
-	@Override
-	protected JavaClassEmitter createJavaClassEmitter(String templateName, String mainMethod) {
-		return getXtendEmitter(templateName, mainMethod);
 	}
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/ExecuteTemplatesOperationWithXtend2.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/ExecuteTemplatesOperationWithXtend2.java
index 934490f..5327867 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/ExecuteTemplatesOperationWithXtend2.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/ExecuteTemplatesOperationWithXtend2.java
@@ -1,5 +1,6 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
+import org.eclipse.gmf.codegen.util.GeneratorWithXtend2;
 import org.eclipse.gmf.internal.codegen.popup.actions.ExecuteTemplatesOperation;
 import org.eclipse.gmf.internal.common.codegen.GeneratorBase;
 
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorTextEmitter.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorTextEmitter.java
index 601db49..677e480 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorTextEmitter.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorTextEmitter.java
@@ -1,11 +1,9 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
-import org.eclipse.gmf.internal.common.codegen.TextEmitter;
-
 /**
- * FIXME: [MG] Merging artifact, allows to merge {@link CodegenEmittersWithXtend2} without introducing breaking changes 
- * to gmf.common
+ * Use {@link org.eclipse.gmf.codegen.util.GeneratorTextEmitter}
  */
-public interface GeneratorTextEmitter extends TextEmitter {
+@Deprecated
+public interface GeneratorTextEmitter extends org.eclipse.gmf.codegen.util.GeneratorTextEmitter {
 
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorWithXtend2.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorWithXtend2.java
index de4877a..60ee9a5 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorWithXtend2.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/GeneratorWithXtend2.java
@@ -1,41 +1,24 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
 import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
-import org.eclipse.gmf.codegen.util.Generator;
-import org.eclipse.gmf.common.UnexpectedBehaviourException;
 import org.eclipse.gmf.internal.common.codegen.CodeFormatterFactory;
 
-public class GeneratorWithXtend2 extends Generator {
-
-	private CodegenEmittersWithXtend2 myEmitters;
+/**
+ * Use {@link org.eclipse.gmf.codegen.util.GeneratorWithXtend2}
+ */
+@Deprecated
+public class GeneratorWithXtend2 extends org.eclipse.gmf.codegen.util.GeneratorWithXtend2 {
 
 	public GeneratorWithXtend2(GenEditorGenerator genModel) {
-		this(genModel, new CodegenEmittersWithXtend2(genModel));
+		super(genModel, new CodegenEmittersWithXtend2(genModel));
 	}
 
 	public GeneratorWithXtend2(GenEditorGenerator genModel, CodegenEmittersWithXtend2 codegenEmitters) {
-		this(genModel, codegenEmitters, CodeFormatterFactory.DEFAULT);
+		super(genModel, codegenEmitters, CodeFormatterFactory.DEFAULT);
 	}
 
 	public GeneratorWithXtend2(GenEditorGenerator genModel, CodegenEmittersWithXtend2 codegenEmitters, CodeFormatterFactory codeFormatterFactory) {
 		super(genModel, codegenEmitters, codeFormatterFactory);
-		myEmitters = codegenEmitters;
-	}
-
-	protected void customRun() throws InterruptedException, UnexpectedBehaviourException {
-		try {
-			super.customRun();
-		} finally {
-			hookGenerationCompleted();
-		}
-	}
-
-	protected CodegenEmittersWithXtend2 getEmitters() {
-		return myEmitters;
-	}
-
-	protected void hookGenerationCompleted() {
-		myEmitters.disposeEmitters();
 	}
 
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2ClassEmitter.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2ClassEmitter.java
index dc4bcb5..334ff67 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2ClassEmitter.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2ClassEmitter.java
@@ -1,37 +1,13 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.gmf.common.UnexpectedBehaviourException;
-import org.eclipse.gmf.internal.common.codegen.JavaClassEmitter;
-
 import com.google.inject.Injector;
 
-
-public class Xtend2ClassEmitter extends Xtend2Emitter implements JavaClassEmitter {
+/**
+ * Use {@link org.eclipse.gmf.codegen.util.Xtend2ClassEmitter}
+ */
+public class Xtend2ClassEmitter extends org.eclipse.gmf.codegen.util.Xtend2ClassEmitter {
 
 	public Xtend2ClassEmitter(Injector injector, Class<?> clazz, String methodName) {
 		super(injector, clazz, methodName);
 	}
-
-	@Override
-	public String getQualifiedClassName(Object... input) throws UnexpectedBehaviourException {
-		return getQualifiedClassName("qualifiedClassName", input);
-	}
-
-	@Override
-	public String getQualifiedClassName(String FQNMethodName, Object... input) throws UnexpectedBehaviourException {
-		return getText(FQNMethodName, input);
-	}
-
-	private String getText(String method, Object... input) throws UnexpectedBehaviourException {
-		try {
-			return this.generate(new NullProgressMonitor(), method, input);
-		} catch (InvocationTargetException e) {
-			throw new UnexpectedBehaviourException("Invocation method exception "+ method + " on class " + getTemplateClass().getName(), e);
-		} catch (InterruptedException e) {
-			throw new UnexpectedBehaviourException("Execute method exception "+ method + " on class " + getTemplateClass().getName(), e);
-		}
-	}
 }
diff --git a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2Emitter.java b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2Emitter.java
index 48e8dd8..19841b5 100644
--- a/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2Emitter.java
+++ b/plugins/org.eclipse.gmf.codegen.xtend.ui/src/org/eclipse/gmf/codegen/xtend/ui/handlers/Xtend2Emitter.java
@@ -1,110 +1,10 @@
 package org.eclipse.gmf.codegen.xtend.ui.handlers;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.gmf.common.UnexpectedBehaviourException;
-import org.eclipse.gmf.internal.common.codegen.TextEmitter;
-
 import com.google.inject.Injector;
 
-public class Xtend2Emitter implements TextEmitter {
-
-	private final Class<?> myXtendGenerator;
-
-	private final String myMethodName;
-
-	private final Injector myInjector;
+public class Xtend2Emitter extends org.eclipse.gmf.codegen.util.Xtend2Emitter {
 
 	public Xtend2Emitter(Injector injector, Class<?> clazz, String methodName) {
-		myInjector = injector;
-		myXtendGenerator = clazz;
-		myMethodName = methodName;
+		super(injector, clazz, methodName);
 	}
-
-	@Override
-	public String generate(IProgressMonitor monitor, Object[] arguments) throws InterruptedException, InvocationTargetException, UnexpectedBehaviourException {
-		return generate(monitor, myMethodName, arguments);
-	}
-	
-	protected String generate(IProgressMonitor monitor, String methodName, Object[] arguments) throws InterruptedException, InvocationTargetException, UnexpectedBehaviourException {
-		if (monitor != null && monitor.isCanceled()) {
-			throw new InterruptedException();
-		}
-		if (arguments.length > 1) {
-			List<Object> fixedArgs = new LinkedList<Object>();
-			fixedArgs.add(arguments[0]);
-			for (int i = 1; i < arguments.length; i++) {
-				fixedArgs.add(arguments[i]);
-			}
-			arguments = fixedArgs.toArray();
-		}
-		Object generator = instantiateGenerator();
-		Method method = getGeneratorMethod(arguments.length, methodName);
-		Object result;
-		try {
-			result = method.invoke(generator, arguments);
-		} catch (IllegalArgumentException e) {
-			throw new UnexpectedBehaviourException("Invocation failed for: " + this, e);
-		} catch (IllegalAccessException e) {
-			throw new UnexpectedBehaviourException("Invocation failed for: " + this, e);
-		}
-
-		if (result == null) {
-			throw new UnexpectedBehaviourException("Xtend generator returned null for " + this);
-		}
-		return String.valueOf(result);
-	}
-
-	private Object instantiateGenerator() throws UnexpectedBehaviourException {
-		Object instance = myInjector.getInstance(myXtendGenerator);
-		if (instance == null) {
-			throw new UnexpectedBehaviourException("Can't instantiate Xtend generator object " + this);
-		}
-		return instance;
-	}
-
-	private Method getGeneratorMethod(int paramsCount, String methodName) throws UnexpectedBehaviourException {
-		Method[] allMethods;
-		try {
-			allMethods = myXtendGenerator.getDeclaredMethods();
-		} catch (SecurityException e) {
-			throw new UnexpectedBehaviourException("For : " + this, e);
-		}
-		Method candidate = null;
-		for (Method next : allMethods) {
-			if (methodName.equals(next.getName()) && next.getParameterTypes().length == paramsCount) {
-				if (candidate != null) {
-					throw new UnexpectedBehaviourException("More than 1 method found for " + this + ", " + candidate + " vs " + next);
-				}
-				candidate = next;
-			}
-		}
-		if (candidate == null) {
-			throw new UnexpectedBehaviourException("No such method (with params count = " + paramsCount + ") for : " + this);
-		}
-		return candidate;
-	}
-
-	@Override
-	public String toString() {
-		return "xtend2:[" + myXtendGenerator.getSimpleName() + "#" + myMethodName + "]";
-	}
-
-	protected Object extractTarget(Object[] arguments) {
-		assert arguments != null && arguments.length > 0;
-		return arguments[0];
-	}
-	
-	protected Injector getInjector() {
-		return myInjector;
-	}
-	
-	protected Class<?> getTemplateClass() {
-		return myXtendGenerator;
-	}
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/CodegenEmittersWithXtend2.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/CodegenEmittersWithXtend2.java
new file mode 100644
index 0000000..dd643d8
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/CodegenEmittersWithXtend2.java
@@ -0,0 +1,97 @@
+package org.eclipse.gmf.codegen.util;
+
+import java.util.List;
+
+import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
+import org.eclipse.gmf.codegen.util.CodegenEmitters;
+import org.eclipse.gmf.common.UnexpectedBehaviourException;
+import org.eclipse.gmf.internal.common.codegen.JavaClassEmitter;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+public class CodegenEmittersWithXtend2 extends CodegenEmitters {
+
+	private final Injector myInjector;
+
+	private IExtensionTemplatesProvider myExtensionTemplateProvider = null;
+
+	public CodegenEmittersWithXtend2(GenEditorGenerator genModel) {
+		this(!genModel.isDynamicTemplates(), genModel.getTemplateDirectory(), genModel.getModelAccess() != null);
+	}
+
+	public CodegenEmittersWithXtend2(boolean useBaseTemplatesOnly, String templateDirectory, boolean includeDynamicModelTemplates) {
+		super(useBaseTemplatesOnly, templateDirectory, includeDynamicModelTemplates);
+		if (templateDirectory != null && !templateDirectory.isEmpty()) {
+			myExtensionTemplateProvider = new ExtensionTemplatesProviderImpl(templateDirectory,!useBaseTemplatesOnly);
+		}
+		myInjector = Guice.createInjector(new GMFGeneratorModule(myExtensionTemplateProvider));
+	}
+
+	//-----------------------------------------------------------------------------------------
+
+	/**
+	 * FIXME: [MG] make separate xtend templates calling shared code, not vise versa
+	 */
+	@Override
+	public JavaClassEmitter getTextNonResizableEditPolicyEmitter() throws UnexpectedBehaviourException {
+		return getXtendEmitter("xpt::diagram::editpolicies::TextNonResizableEditPolicy", "TextNonResizableEditPolicy"); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * FIXME: [MG] make separate xtend templates calling shared code, not vise versa
+	 */
+	@Override
+	public JavaClassEmitter getTextSelectionEditPolicyEmitter() throws UnexpectedBehaviourException {
+		return getXtendEmitter("xpt::diagram::editpolicies::TextSelectionEditPolicy", "TextSelectionEditPolicy"); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	@Override
+	public JavaClassEmitter getPropertySheetLabelProviderEmitter() throws UnexpectedBehaviourException {
+		return getXtendEmitter("xpt::propsheet::LabelProvider", "LabelProvider"); //$NON-NLS-1$
+	}
+	
+	@Override
+	public JavaClassEmitter getPropertySectionEmitter() throws UnexpectedBehaviourException {
+		return  getXtendEmitter("xpt::propsheet::PropertySection", "PropertySection"); //$NON-NLS-1$
+	}
+	
+	@Override
+	public JavaClassEmitter getModelAccessFacilityEmitter() {
+		return getXtendEmitter("metamodel::Facility", "Main");
+	}
+	
+	private JavaClassEmitter getXtendEmitter(String templateFqn, String mainMethod) {
+		String classFqn = templateFqn.replace("::", ".");
+		Class<?> clazz = null;
+		try {
+			clazz = Class.forName(classFqn);
+		} catch (ClassNotFoundException e) {
+			if (myExtensionTemplateProvider != null) {
+				List<Class<?>> customClasses = myExtensionTemplateProvider.getCustomTemplateClasses();
+				for (Class<?> _class : customClasses) {
+					String name = _class.getName();
+					if (name.equals(classFqn)) {
+						clazz = _class;
+						break;
+					}
+				}
+			}
+			if (clazz == null) {
+				throw new IllegalStateException("Can't load: " + classFqn, e);
+			}
+		}
+		return new Xtend2ClassEmitter(myInjector, clazz, mainMethod);
+	}
+
+	public void disposeEmitters() {
+		if (myExtensionTemplateProvider != null) {
+			myExtensionTemplateProvider.dispose();
+		}
+	}
+	
+	@Override
+	protected JavaClassEmitter createJavaClassEmitter(String templateName, String mainMethod) {
+		return getXtendEmitter(templateName, mainMethod);
+	}
+}
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GMFGeneratorUIModule.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GMFGeneratorUIModule.java
new file mode 100644
index 0000000..8d3c2c2
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GMFGeneratorUIModule.java
@@ -0,0 +1,7 @@
+package org.eclipse.gmf.codegen.util;
+
+import org.eclipse.xtext.service.AbstractGenericModule;
+
+public class GMFGeneratorUIModule extends AbstractGenericModule {
+
+}
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorTextEmitter.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorTextEmitter.java
new file mode 100644
index 0000000..92100b0
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorTextEmitter.java
@@ -0,0 +1,11 @@
+package org.eclipse.gmf.codegen.util;
+
+import org.eclipse.gmf.internal.common.codegen.TextEmitter;
+
+/**
+ * FIXME: [MG] Merging artifact, allows to merge {@link CodegenEmittersWithXtend2} without introducing breaking changes 
+ * to gmf.common
+ */
+public interface GeneratorTextEmitter extends TextEmitter {
+
+}
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorWithXtend2.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorWithXtend2.java
new file mode 100644
index 0000000..ac49ab3
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/GeneratorWithXtend2.java
@@ -0,0 +1,41 @@
+package org.eclipse.gmf.codegen.util;
+
+import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
+import org.eclipse.gmf.codegen.util.Generator;
+import org.eclipse.gmf.common.UnexpectedBehaviourException;
+import org.eclipse.gmf.internal.common.codegen.CodeFormatterFactory;
+
+public class GeneratorWithXtend2 extends Generator {
+
+	private CodegenEmittersWithXtend2 myEmitters;
+
+	public GeneratorWithXtend2(GenEditorGenerator genModel) {
+		this(genModel, new CodegenEmittersWithXtend2(genModel));
+	}
+
+	public GeneratorWithXtend2(GenEditorGenerator genModel, CodegenEmittersWithXtend2 codegenEmitters) {
+		this(genModel, codegenEmitters, CodeFormatterFactory.DEFAULT);
+	}
+
+	public GeneratorWithXtend2(GenEditorGenerator genModel, CodegenEmittersWithXtend2 codegenEmitters, CodeFormatterFactory codeFormatterFactory) {
+		super(genModel, codegenEmitters, codeFormatterFactory);
+		myEmitters = codegenEmitters;
+	}
+
+	protected void customRun() throws InterruptedException, UnexpectedBehaviourException {
+		try {
+			super.customRun();
+		} finally {
+			hookGenerationCompleted();
+		}
+	}
+
+	protected CodegenEmittersWithXtend2 getEmitters() {
+		return myEmitters;
+	}
+
+	protected void hookGenerationCompleted() {
+		myEmitters.disposeEmitters();
+	}
+
+}
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2ClassEmitter.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2ClassEmitter.java
new file mode 100644
index 0000000..1ecbd3d
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2ClassEmitter.java
@@ -0,0 +1,37 @@
+package org.eclipse.gmf.codegen.util;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.gmf.common.UnexpectedBehaviourException;
+import org.eclipse.gmf.internal.common.codegen.JavaClassEmitter;
+
+import com.google.inject.Injector;
+
+
+public class Xtend2ClassEmitter extends Xtend2Emitter implements JavaClassEmitter {
+
+	public Xtend2ClassEmitter(Injector injector, Class<?> clazz, String methodName) {
+		super(injector, clazz, methodName);
+	}
+
+	@Override
+	public String getQualifiedClassName(Object... input) throws UnexpectedBehaviourException {
+		return getQualifiedClassName("qualifiedClassName", input);
+	}
+
+	@Override
+	public String getQualifiedClassName(String FQNMethodName, Object... input) throws UnexpectedBehaviourException {
+		return getText(FQNMethodName, input);
+	}
+
+	private String getText(String method, Object... input) throws UnexpectedBehaviourException {
+		try {
+			return this.generate(new NullProgressMonitor(), method, input);
+		} catch (InvocationTargetException e) {
+			throw new UnexpectedBehaviourException("Invocation method exception "+ method + " on class " + getTemplateClass().getName(), e);
+		} catch (InterruptedException e) {
+			throw new UnexpectedBehaviourException("Execute method exception "+ method + " on class " + getTemplateClass().getName(), e);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2Emitter.java b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2Emitter.java
new file mode 100644
index 0000000..fca3b7d
--- /dev/null
+++ b/plugins/org.eclipse.gmf.codegen.xtend/src/org/eclipse/gmf/codegen/util/Xtend2Emitter.java
@@ -0,0 +1,110 @@
+package org.eclipse.gmf.codegen.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.gmf.common.UnexpectedBehaviourException;
+import org.eclipse.gmf.internal.common.codegen.TextEmitter;
+
+import com.google.inject.Injector;
+
+public class Xtend2Emitter implements TextEmitter {
+
+	private final Class<?> myXtendGenerator;
+
+	private final String myMethodName;
+
+	private final Injector myInjector;
+
+	public Xtend2Emitter(Injector injector, Class<?> clazz, String methodName) {
+		myInjector = injector;
+		myXtendGenerator = clazz;
+		myMethodName = methodName;
+	}
+
+	@Override
+	public String generate(IProgressMonitor monitor, Object[] arguments) throws InterruptedException, InvocationTargetException, UnexpectedBehaviourException {
+		return generate(monitor, myMethodName, arguments);
+	}
+	
+	protected String generate(IProgressMonitor monitor, String methodName, Object[] arguments) throws InterruptedException, InvocationTargetException, UnexpectedBehaviourException {
+		if (monitor != null && monitor.isCanceled()) {
+			throw new InterruptedException();
+		}
+		if (arguments.length > 1) {
+			List<Object> fixedArgs = new LinkedList<Object>();
+			fixedArgs.add(arguments[0]);
+			for (int i = 1; i < arguments.length; i++) {
+				fixedArgs.add(arguments[i]);
+			}
+			arguments = fixedArgs.toArray();
+		}
+		Object generator = instantiateGenerator();
+		Method method = getGeneratorMethod(arguments.length, methodName);
+		Object result;
+		try {
+			result = method.invoke(generator, arguments);
+		} catch (IllegalArgumentException e) {
+			throw new UnexpectedBehaviourException("Invocation failed for: " + this, e);
+		} catch (IllegalAccessException e) {
+			throw new UnexpectedBehaviourException("Invocation failed for: " + this, e);
+		}
+
+		if (result == null) {
+			throw new UnexpectedBehaviourException("Xtend generator returned null for " + this);
+		}
+		return String.valueOf(result);
+	}
+
+	private Object instantiateGenerator() throws UnexpectedBehaviourException {
+		Object instance = myInjector.getInstance(myXtendGenerator);
+		if (instance == null) {
+			throw new UnexpectedBehaviourException("Can't instantiate Xtend generator object " + this);
+		}
+		return instance;
+	}
+
+	private Method getGeneratorMethod(int paramsCount, String methodName) throws UnexpectedBehaviourException {
+		Method[] allMethods;
+		try {
+			allMethods = myXtendGenerator.getDeclaredMethods();
+		} catch (SecurityException e) {
+			throw new UnexpectedBehaviourException("For : " + this, e);
+		}
+		Method candidate = null;
+		for (Method next : allMethods) {
+			if (methodName.equals(next.getName()) && next.getParameterTypes().length == paramsCount) {
+				if (candidate != null) {
+					throw new UnexpectedBehaviourException("More than 1 method found for " + this + ", " + candidate + " vs " + next);
+				}
+				candidate = next;
+			}
+		}
+		if (candidate == null) {
+			throw new UnexpectedBehaviourException("No such method (with params count = " + paramsCount + ") for : " + this);
+		}
+		return candidate;
+	}
+
+	@Override
+	public String toString() {
+		return "xtend2:[" + myXtendGenerator.getSimpleName() + "#" + myMethodName + "]";
+	}
+
+	protected Object extractTarget(Object[] arguments) {
+		assert arguments != null && arguments.length > 0;
+		return arguments[0];
+	}
+	
+	protected Injector getInjector() {
+		return myInjector;
+	}
+	
+	protected Class<?> getTemplateClass() {
+		return myXtendGenerator;
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.gmf.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.gmf.common/META-INF/MANIFEST.MF
index ce72d7c..63fef64 100644
--- a/plugins/org.eclipse.gmf.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.gmf.common/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
  org.eclipse.gmf.common.codegen,
  org.eclipse.gmf.internal.codegen.dispatch;x-friends:="org.eclipse.gmf.codegen,org.eclipse.gmf.graphdef.codegen,org.eclipse.gmf.codegen.lite",
  org.eclipse.gmf.internal.common;x-friends:="org.eclipse.gmf.codegen.edit,org.eclipse.gmf.graphdef.edit,org.eclipse.gmf.map.edit,org.eclipse.gmf.tooldef.edit,org.eclipse.gmf.bridge.trace,org.eclipse.gmf.bridge.ui,org.eclipse.gmf.bridge,org.eclipse.gmf.tests,org.eclipse.gmf.bridge.ui.dashboard,org.eclipse.gmf.codegen.ui,org.eclipse.gmf.codegen.lite.ui,org.eclipse.gmf.codegen,org.eclipse.gmf.map,org.eclipse.gmf.graphdef,org.eclipse.gmf.tooldef",
- org.eclipse.gmf.internal.common.codegen;x-friends:="org.eclipse.gmf.codegen,org.eclipse.gmf.graphdef.codegen,org.eclipse.gmf.bridge,org.eclipse.gmf.codegen.lite,org.eclipse.gmf.tests,org.eclipse.gmf.codegen.ui,org.eclipse.gmf.codegen.lite.ui,org.eclipse.gmf.tests.lite,org.eclipse.gmf.graphdef.codegen.ui,org.eclipse.gmf.codegen.xtend.ui, org.eclipse.gmf.tooling.codegen.launcher",
+ org.eclipse.gmf.internal.common.codegen;x-friends:="org.eclipse.gmf.codegen,org.eclipse.gmf.graphdef.codegen,org.eclipse.gmf.bridge,org.eclipse.gmf.codegen.lite,org.eclipse.gmf.tests,org.eclipse.gmf.codegen.ui,org.eclipse.gmf.codegen.lite.ui,org.eclipse.gmf.tests.lite,org.eclipse.gmf.graphdef.codegen.ui,org.eclipse.gmf.codegen.xtend.ui, org.eclipse.gmf.codegen.xtend, org.eclipse.gmf.tooling.codegen.launcher",
  org.eclipse.gmf.internal.common.migrate;x-friends:="org.eclipse.gmf.codegen.ui,org.eclipse.gmf.tests,org.eclipse.gmf.codegen,org.eclipse.gmf.map,org.eclipse.gmf.bridge.ui,org.eclipse.gmf.graphdef",
  org.eclipse.gmf.internal.common.reconcile;x-friends:="org.eclipse.gmf.tests,org.eclipse.gmf.codegen,org.eclipse.gmf.bridge.ui",
  org.eclipse.gmf.internal.common.ui
@@ -24,7 +24,6 @@
  org.eclipse.jdt.core;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.jface.text;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.jface;bundle-version="[3.3.0,4.0.0)",
- org.eclipse.jdt.ui;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.gmf.xpand;bundle-version="[2.1.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Activator: org.eclipse.gmf.internal.common.Activator
diff --git a/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/codegen/OrganizeImportsPostprocessor.java b/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/codegen/OrganizeImportsPostprocessor.java
index 8277118..6b28bdd 100644
--- a/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/codegen/OrganizeImportsPostprocessor.java
+++ b/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/codegen/OrganizeImportsPostprocessor.java
@@ -20,11 +20,14 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.gmf.internal.common.Activator;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
@@ -38,7 +41,6 @@
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
@@ -387,4 +389,32 @@
 		return result;
 	}
 
+	/**
+	 * org.eclipse.gmf.common should not depend on org.eclipse.jdt.ui
+	 */
+	private static class PreferenceConstants {
+
+		public static final String JDT_UI = "org.eclipse.jdt.ui"; //$NON-NLS-1$
+
+		public static final String ORGIMPORTS_IMPORTORDER= "org.eclipse.jdt.ui.importorder"; //$NON-NLS-1$
+
+		public static final String ORGIMPORTS_ONDEMANDTHRESHOLD= "org.eclipse.jdt.ui.ondemandthreshold"; //$NON-NLS-1$
+
+		public static final String ORGIMPORTS_STATIC_ONDEMANDTHRESHOLD= "org.eclipse.jdt.ui.staticondemandthreshold"; //$NON-NLS-1$
+
+		public static String getPreference(String key, IJavaProject project) {
+			String val;
+			if (project != null) {
+				val= new ProjectScope(project.getProject()).getNode(JDT_UI).get(key, null);
+				if (val != null) {
+					return val;
+				}
+			}
+			val= InstanceScope.INSTANCE.getNode(JDT_UI).get(key, null);
+			if (val != null) {
+				return val;
+			}
+			return DefaultScope.INSTANCE.getNode(JDT_UI).get(key, null);
+		}
+	}
 }
diff --git a/plugins/org.eclipse.gmf.tooling.codegen.launcher/META-INF/MANIFEST.MF b/plugins/org.eclipse.gmf.tooling.codegen.launcher/META-INF/MANIFEST.MF
index f740d99..e8da148 100644
--- a/plugins/org.eclipse.gmf.tooling.codegen.launcher/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.gmf.tooling.codegen.launcher/META-INF/MANIFEST.MF
@@ -6,13 +6,12 @@
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.gmf.tooling.codegen.launcher.Activator
 Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.ui.workbench,
  org.eclipse.pde.launching,
  org.eclipse.debug.core,
  org.eclipse.gmf.common,
  org.eclipse.gmf.codegen,
  org.eclipse.jdt.core,
- org.eclipse.gmf.codegen.xtend.ui
+ org.eclipse.gmf.codegen.xtend
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/Activator.java b/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/Activator.java
index 9ea6b65..0506d8d 100644
--- a/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/Activator.java
+++ b/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/Activator.java
@@ -1,14 +1,14 @@
 package org.eclipse.gmf.tooling.codegen.launcher;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
 /**
  * The activator class controls the plug-in life cycle
  */
-public class Activator extends AbstractUIPlugin {
+public class Activator extends Plugin {
 
 	// The plug-in ID
 	public static final String PLUGIN_ID = "org.eclipse.gmf.tooling.launcher"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/GMFGenerateApplication.java b/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/GMFGenerateApplication.java
index 793a4d2..887d461 100644
--- a/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/GMFGenerateApplication.java
+++ b/plugins/org.eclipse.gmf.tooling.codegen.launcher/src/org/eclipse/gmf/tooling/codegen/launcher/GMFGenerateApplication.java
@@ -12,8 +12,8 @@
 import org.eclipse.equinox.app.IApplication;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
-import org.eclipse.gmf.codegen.xtend.ui.handlers.CodegenEmittersWithXtend2;
-import org.eclipse.gmf.codegen.xtend.ui.handlers.GeneratorWithXtend2;
+import org.eclipse.gmf.codegen.util.CodegenEmittersWithXtend2;
+import org.eclipse.gmf.codegen.util.GeneratorWithXtend2;
 import org.eclipse.gmf.internal.common.codegen.CodeFormatterFactory;
 import org.eclipse.gmf.internal.common.codegen.GeneratorBase;
 import org.eclipse.gmf.tooling.codegen.launcher.utils.GMFGeneratorUtil;
diff --git a/plugins/pom.xml b/plugins/pom.xml
index a55680f..6f0d682 100644
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/pom.xml b/pom.xml
index f32fb7c..68675af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,12 +13,19 @@
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.eclipse.gmf-tooling</groupId>
-    <artifactId>parent</artifactId>
+    <artifactId>eclipse</artifactId>
     <version>3.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>Parent project for GMF Tooling build</name>
     <description>Parent project for GMF Tooling build</description>
 
+	<parent>
+	    <groupId>org.eclipse.gmf-tooling</groupId>
+		<artifactId>parent</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+		<relativePath>build</relativePath>
+	</parent>
+
     <prerequisites>
         <maven>3.0</maven>
     </prerequisites>
@@ -36,7 +43,6 @@
         <module>plugins</module>
         <!-- <module>gwt-plugins</module> -->
         <module>examples</module>
-        <module>extra</module>
         <module>doc</module>
         <module>features</module>
         <module>tests</module>
@@ -44,35 +50,6 @@
         <module>test-examples</module>
     </modules>
 
-    <mailingLists>
-        <mailingList>
-            <name>GMF-dev Mailing List</name>
-            <post>gmf-dev@eclipse.org</post>
-            <subscribe>https://dev.eclipse.org/mailman/listinfo/gmf-dev</subscribe>
-            <unsubscribe>https://dev.eclipse.org/mailman/listinfo/gmf-dev</unsubscribe>
-            <archive>http://dev.eclipse.org/mhonarc/lists/gmf-dev</archive>
-        </mailingList>
-    </mailingLists>
-
-    <issueManagement>
-        <url>https://bugs.eclipse.org/bugs/buglist.cgi?classification=Modeling;query_format=advanced;component=GMF-tooling;product=GMP</url>
-        <system>Bugzilla</system>
-    </issueManagement>
-
-    <licenses>
-        <license>
-            <name>Eclipse Public License v1.0</name>
-            <comments>
-                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.htm
-            </comments>
-        </license>
-    </licenses>
-
     <build>
         <plugins>
             <plugin>
diff --git a/repository/pom.xml b/repository/pom.xml
index 744413c..639c04d 100644
--- a/repository/pom.xml
+++ b/repository/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/test-examples/pom.xml b/test-examples/pom.xml
index aa1711a..a00818c 100644
--- a/test-examples/pom.xml
+++ b/test-examples/pom.xml
@@ -16,7 +16,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
diff --git a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/rt/EditHelpersTestXtend.java b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/rt/EditHelpersTestXtend.java
index ef057ec..ac4a7c8 100644
--- a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/rt/EditHelpersTestXtend.java
+++ b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/rt/EditHelpersTestXtend.java
@@ -40,7 +40,7 @@
 import org.eclipse.gmf.codegen.gmfgen.MetamodelType;
 import org.eclipse.gmf.codegen.gmfgen.SpecializationType;
 import org.eclipse.gmf.codegen.util.GMFGeneratorModule;
-import org.eclipse.gmf.codegen.xtend.ui.handlers.Xtend2Emitter;
+import org.eclipse.gmf.codegen.util.Xtend2Emitter;
 import org.eclipse.gmf.common.UnexpectedBehaviourException;
 import org.eclipse.gmf.internal.common.codegen.TextEmitter;
 import org.eclipse.gmf.mappings.Constraint;
diff --git a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/setup/RuntimeBasedGeneratorConfigurationXtend.java b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/setup/RuntimeBasedGeneratorConfigurationXtend.java
index 4cd9cfa..ce2b76e 100644
--- a/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/setup/RuntimeBasedGeneratorConfigurationXtend.java
+++ b/tests/org.eclipse.gmf.tooling.tests.xtend/src/org/eclipse/gmf/tooling/tests/xtend/setup/RuntimeBasedGeneratorConfigurationXtend.java
@@ -13,8 +13,8 @@
 
 import org.eclipse.gmf.codegen.gmfgen.GenDiagram;
 import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
-import org.eclipse.gmf.codegen.xtend.ui.handlers.CodegenEmittersWithXtend2;
-import org.eclipse.gmf.codegen.xtend.ui.handlers.GeneratorWithXtend2;
+import org.eclipse.gmf.codegen.util.CodegenEmittersWithXtend2;
+import org.eclipse.gmf.codegen.util.GeneratorWithXtend2;
 import org.eclipse.gmf.internal.common.codegen.GeneratorBase;
 
 public class RuntimeBasedGeneratorConfigurationXtend extends org.eclipse.gmf.tests.setup.RuntimeBasedGeneratorConfiguration {
diff --git a/tests/pom.xml b/tests/pom.xml
index fe08bfd..3d436b9 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -17,7 +17,7 @@
 
 	<parent>
 		<groupId>org.eclipse.gmf-tooling</groupId>
-		<artifactId>parent</artifactId>
+		<artifactId>eclipse</artifactId>
 		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
