diff --git a/org.eclipse.emf.refactor.comrel.diagram/plugin.xml b/org.eclipse.emf.refactor.comrel.diagram/plugin.xml
index 147f9ca..325f768 100644
--- a/org.eclipse.emf.refactor.comrel.diagram/plugin.xml
+++ b/org.eclipse.emf.refactor.comrel.diagram/plugin.xml
@@ -185,7 +185,7 @@
    <extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor" id="prop-contrib">
       <?gmfgen generated="true"?>
       <propertyContributor
-            contributorId="comrel.diagram"
+            contributorId="org.eclipse.emf.refactor.comrel.diagram"
             labelProvider="comrel.diagram.sheet.ComrelSheetLabelProvider">
          <propertyCategory category="domain"/>
          <propertyCategory category="visual"/>
@@ -195,7 +195,7 @@
 
    <extension point="org.eclipse.ui.views.properties.tabbed.propertyTabs" id="proptabs">
       <?gmfgen generated="true"?>   
-      <propertyTabs contributorId="comrel.diagram">
+      <propertyTabs contributorId="org.eclipse.emf.refactor.comrel.diagram">
          <propertyTab
              category="visual"
              id="property.tab.AppearancePropertySection"
@@ -213,7 +213,7 @@
 
    <extension point="org.eclipse.ui.views.properties.tabbed.propertySections" id="propsections">
       <?gmfgen generated="true"?>   
-      <propertySections contributorId="comrel.diagram">
+      <propertySections contributorId="org.eclipse.emf.refactor.comrel.diagram">
          <propertySection id="property.section.ConnectorAppearancePropertySection" 
             filter="org.eclipse.gmf.runtime.diagram.ui.properties.filters.ConnectionEditPartPropertySectionFilter" 
             class="org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ConnectionAppearancePropertySection" 
diff --git a/org.eclipse.emf.refactor.comrel.generator/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.comrel.generator/META-INF/MANIFEST.MF
index a8c9636..68e531a 100644
--- a/org.eclipse.emf.refactor.comrel.generator/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.comrel.generator/META-INF/MANIFEST.MF
@@ -10,7 +10,10 @@
  org.eclipse.emf.ecore;bundle-version="2.6.1",
  org.eclipse.emf.codegen;bundle-version="2.6.0",
  org.eclipse.jdt.core;bundle-version="3.6.1",
- org.eclipse.emf.refactor.comrel;bundle-version="0.8.0"
+ org.eclipse.emf.refactor.comrel;bundle-version="0.8.0",
+ org.eclipse.emf.refactor.refactoring.generator;bundle-version="0.9.0",
+ org.eclipse.emf.refactor.refactoring;bundle-version="0.9.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Import-Package: org.eclipse.ui.actions
+Export-Package: comrel.generator.helper
diff --git a/org.eclipse.emf.refactor.comrel.generator/plugin.xml b/org.eclipse.emf.refactor.comrel.generator/plugin.xml
index 8af7dd0..bb37a25 100644
--- a/org.eclipse.emf.refactor.comrel.generator/plugin.xml
+++ b/org.eclipse.emf.refactor.comrel.generator/plugin.xml
@@ -38,7 +38,7 @@
       </wizard>
       <wizard
             category="org.eclipse.emf.refactor.newwizards.category/comrel.generator.category"
-            class="comrel.generator.refactoring.wizards.RefactoringWizard"
+            class="comrel.generator.refactoring.wizards.NewRefactoringWizardCoMReL"
             icon="icons/refactoring.jpg"
             id="comrel.generator.wizard.refactoring"
             name="Refactoring (specified in CoMReL)">
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/helper/HelperGenerator.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/helper/HelperGenerator.java
index 1b79811..adb1e60 100644
--- a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/helper/HelperGenerator.java
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/helper/HelperGenerator.java
@@ -38,7 +38,7 @@
 	private final String JETEMITTERS = ".JETEmitters";
 	private final String JAVA = ".java";
 	private final String JAVAJET = ".javajet";
-	private final String COMRELMODEL = "comrel";
+	private final String COMRELMODEL = "org.eclipse.emf.refactor.comrel";
 	private final String REQUIREBUNDLE = "Require-Bundle";
 	private final String BUNDLESYMBOLICNAME = "Bundle-SymbolicName";
 	private final String BUNDLEVERSION = "Bundle-Version";
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/CoMReLDependenciesManager.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/CoMReLDependenciesManager.java
new file mode 100644
index 0000000..8a38fe1
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/CoMReLDependenciesManager.java
@@ -0,0 +1,61 @@
+package comrel.generator.refactoring;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.emf.refactor.refactoring.generator.core.RefactoringInfo;
+import org.eclipse.emf.refactor.refactoring.generator.managers.DependenciesManager;
+
+public class CoMReLDependenciesManager extends DependenciesManager {
+	
+	private static final String REFACTORCOMREL = "org.eclipse.emf.refactor.comrel";
+	private static final String COMRELINTERPRETER = "org.eclipse.emf.refactor.comrel.interpreter";
+
+	public static void updateDependencies(RefactoringInfo info) {
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(info.getProjectName());
+		try {			
+			String fileName = project.getLocation().append(MANIFEST_FILE)
+								.toOSString();
+			FileInputStream is = new FileInputStream(fileName);
+			Manifest mf = new Manifest(is);
+			Attributes att = mf.getMainAttributes();
+			String value = att.getValue(REQUIREBUNDLE);
+			if (! value.contains(EXPRESSIONS)) 
+				value = value + "," +  EXPRESSIONS;
+			if (! value.contains(ECORE))
+				value = value + "," +  ECORE;
+			if (! value.contains(ECORECHANGE))
+				value = value + "," +  ECORECHANGE;
+			if (! value.contains(LTKCORE))
+				value = value + "," +  LTKCORE;
+			if (! value.contains(LTKUI))
+				value = value + "," +  LTKUI;
+			if (! value.contains(REFACTORCOMMON)) 
+				value = value + "," +  REFACTORCOMMON;
+			if (! value.contains(REFACTORRUNTIME)) 
+				value = value + "," +  REFACTORRUNTIME;
+			if (! value.contains(REFACTORCOMREL))
+				value = value + "," +  REFACTORCOMREL;
+			if (! value.contains(COMRELINTERPRETER))
+				value = value + "," +  COMRELINTERPRETER;
+			if (! value.contains(JUNIT)) 
+				value = value + "," +  JUNIT + ";bundle-version=\"4.8.1\"";
+			if (! value.contains(info.getJar()))
+				value = value + "," +  info.getJar();
+			att.putValue(REQUIREBUNDLE, value);
+			FileOutputStream out = new FileOutputStream(fileName);  
+			mf.write(out); 
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelConfig.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelConfig.java
new file mode 100644
index 0000000..5f43436
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelConfig.java
@@ -0,0 +1,81 @@
+package comrel.generator.refactoring;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.refactor.refactoring.generator.core.ParameterInfo;
+import org.eclipse.emf.refactor.refactoring.generator.core.RefactoringInfo;
+
+import comrel.CompositeRefactoring;
+import comrel.InputPort;
+
+public class ComrelConfig extends RefactoringInfo {
+	
+	public static final String COMRELDIR = "/comrelmodels/";
+	public static final String COMRELEXT = ".comrel";
+	
+	private static final String SELECTEDEOBJECT = "selectedEObject";
+	private static final String SELECTEDEOBJECTS = "selectedEObjects";
+	
+	private boolean multi = false;
+	private String comrelModel;
+	
+	public ComrelConfig(CompositeRefactoring cr, IProject project, String comrelModel) {
+		super(project.getName(), cr.getRefId(), 
+				cr.getLabel(), cr.getNamespaceUri());
+		this.comrelModel = comrelModel;
+		this.init(cr);
+	}
+
+	public boolean isMulti() {
+		return multi;
+	}
+
+	public String getComrelModel() {
+		return comrelModel;
+	}
+
+	private void init(CompositeRefactoring cr) {
+		List<InputPort> ips = cr.getMainRefactoringUnit().getAllInputPorts();
+		for (InputPort ip : ips) {
+			if (ip.getName().equals(SELECTEDEOBJECTS)) multi = true; 
+			if (ip.getName().equals(SELECTEDEOBJECT) 
+					|| ip.getName().equals(SELECTEDEOBJECTS)) {
+				setSelectedEObjectClass(ip.getType().getName());
+				setSelectedEObjectJar(ip.getType().getPackage().getName());
+			} else {
+				ParameterInfo pi = new ParameterInfo(ip.getName());
+				if (ip.getDescription() != null) {
+					pi.setDescription(ip.getDescription());
+				}
+				this.getParameters().add(pi);
+			}
+		}
+	}
+
+	@Override
+	public String toString() {
+		return "ComrelConfig \n [projectName=" + projectName
+				+ ", \n getParameters()=" + getParameterString()
+				+ ", \n getProjectName()=" + getProjectName()
+				+ ", \n getRefactoringId()=" + getRefactoringId()
+				+ ", \n getMenuLabel()=" + getMenuLabel() + ", \n getNamespaceUri()="
+				+ getNamespaceUri() + ", \n getSelectedEObjectClass()="
+				+ getSelectedEObjectClass() + ", \n getSelectedEObjectJar()="
+				+ getJar() + ", \n getGuiHandler()="
+				+ getGuiHandler() + ", \n getController()=" + getController()
+				+ ", \n getPackageName()=" + getPackageName() + ", \n getClass()="
+				+ getClass() + ", \n hashCode()=" + hashCode() + ", \n toString()="
+				+ super.toString() + "]";
+	}
+	
+	private String getParameterString() {
+		String ret = "";
+		for (ParameterInfo pi : getParameters()) {
+			ret += " " + pi.getName() + ":" + pi.getDescription() + ";";
+		}
+		return ret;
+	}
+
+}
+
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelGenerationManager.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelGenerationManager.java
new file mode 100644
index 0000000..b7307a8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/ComrelGenerationManager.java
@@ -0,0 +1,310 @@
+package comrel.generator.refactoring;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+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.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.emf.codegen.jet.JETEmitter;
+import org.eclipse.emf.codegen.jet.JETException;
+import org.eclipse.emf.codegen.util.CodeGenUtil;
+import org.eclipse.emf.refactor.refactoring.generator.core.RefactoringInfo;
+import org.eclipse.emf.refactor.refactoring.generator.managers.XMLPluginFileManager;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.osgi.framework.Bundle;
+
+import comrel.generator.Activator;
+
+public class ComrelGenerationManager {
+	
+	private final String REFACTORINGGUIHANDLERCOMRELSINGLE =
+								"RefactoringGuiHandlerComrelSingle";
+	private final String REFACTORINGGUIHANDLERCOMRELMULTI =
+								"RefactoringGuiHandlerComrelMulti";
+	private final String REFACTORINGWIZARDCOMREL =
+								"RefactoringWizardComrel";
+	private final String REFACTORINGWIZARDPAGECOMREL =
+								"RefactoringWizardPageComrel";
+	private final String REFACTORINGDATAMANAGEMENTCOMRELSINGLE = 
+								"RefactoringDataManagementComrelSingle";
+	private final String REFACTORINGDATAMANAGEMENTCOMRELMULTI = 
+								"RefactoringDataManagementComrelMulti";
+	private final String REFACTORINGCONTROLLERCOMRELSINGLE = 
+								"RefactoringControllerComrelSingle";
+	private final String REFACTORINGCONTROLLERCOMRELMULTI = 
+								"RefactoringControllerComrelMulti";
+	
+	private final String REFACTORINGWIZARD = "RefactoringWizard";	
+	private final String REFACTORINGWIZARDPAGE = 
+											"RefactoringWizardPage";
+	private final String REFACTORINGGUIHANDLER = 
+											"RefactoringGuiHandler";
+	private final String REFACTORINGCONTROLLER = 
+											"RefactoringController";
+	private final String REFACTORINGDATAMANAGEMENT = 
+											"RefactoringDataManagement";
+	
+	private final String BUNDLEVERSION = "Bundle-Version";
+	private final String BUNDLESYMBOLICNAME = "Bundle-SymbolicName";
+	private final String SINGLETONTRUE = "singleton:=true";
+	private final String PLUGINSPATH = 
+			Platform.getInstallLocation().getURL().getPath() + "plugins/"; 
+	private final String JETEMITTERS = ".JETEmitters";
+	private final String JAVA = ".java";
+	private final String JAVAJET = ".javajet";
+	private final String TEMPLATES = "templates";
+	
+	/**
+	 * Configuration data used for generating model refactoring code.
+	 */
+	private ComrelConfig config;
+	
+	/**
+	 * Full qualified name of the template directory inside the plugin.
+	 */
+	private String templateDirectory;
+	
+	/**
+	 * Classpath entries needed for compiling JET code.
+	 */
+	private List<IClasspathEntry> classpathEntries; 
+	
+	/**
+	 * JETEmitter instance used for code generation.
+	 */
+	private JETEmitter jetEmitter;
+
+	public ComrelGenerationManager(ComrelConfig config) {
+		this.config = config;
+		this.templateDirectory = setNewTemplateDirectory();		
+		classpathEntries = setClassPathEntries();
+		System.out.println("ComrelGenerationManager initialized!");
+	}
+	
+	protected List<IClasspathEntry> setClassPathEntries() {
+		List<IClasspathEntry> cpe = new ArrayList<IClasspathEntry>();
+		Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+	    // add org.eclipse.emf.refactor.comrel.generator to class path
+	    String version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	    		Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
+	    // add org.eclipse.emf.refactor.refactoring.generator to class path
+	 	bundle = Platform.getBundle(org.eclipse.emf.refactor.refactoring.generator.Activator.PLUGIN_ID);
+	 	version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	 	cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH
+	 			+ org.eclipse.emf.refactor.refactoring.generator.Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));
+	 	// add org.eclipse.emf.refactor.refactoring to class path
+	    bundle = Platform.getBundle(org.eclipse.emf.refactor.refactoring.Activator.PLUGIN_ID);
+	    version = (String) bundle.getHeaders().get(BUNDLEVERSION);
+	    cpe.add(JavaCore.newLibraryEntry(new Path(PLUGINSPATH + 
+	   		org.eclipse.emf.refactor.refactoring.Activator.PLUGIN_ID + "_" + version + ".jar"), null, null));	    
+	    return cpe;
+	}
+
+	public void run(IProgressMonitor monitor) {
+		deleteJetEmittersProject(monitor);
+		updatePluginXml();
+		CoMReLDependenciesManager.updateDependencies(config);
+		setSingletonDirective();
+		generateCode(monitor);
+	}
+	
+	private void generateCode(IProgressMonitor monitor) {
+		String generatedCode = "";
+		try {
+			if (config.isMulti()) { 
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGGUIHANDLERCOMRELMULTI);
+				this.save(monitor, generatedCode, REFACTORINGGUIHANDLER);
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGDATAMANAGEMENTCOMRELMULTI);
+				this.save(monitor, generatedCode, REFACTORINGDATAMANAGEMENT);
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGCONTROLLERCOMRELMULTI);
+				this.save(monitor, generatedCode, REFACTORINGCONTROLLER);
+			} else {
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGGUIHANDLERCOMRELSINGLE);
+				this.save(monitor, generatedCode, REFACTORINGGUIHANDLER);
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGDATAMANAGEMENTCOMRELSINGLE);
+				this.save(monitor, generatedCode, REFACTORINGDATAMANAGEMENT);
+				generatedCode = 
+					this.generateCode(monitor, REFACTORINGCONTROLLERCOMRELSINGLE);
+				this.save(monitor, generatedCode, REFACTORINGCONTROLLER);
+			}
+			generatedCode = 
+				this.generateCode(monitor, REFACTORINGWIZARDCOMREL);
+			this.save(monitor, generatedCode, REFACTORINGWIZARD);
+			generatedCode = 
+				this.generateCode(monitor, REFACTORINGWIZARDPAGECOMREL);
+			this.save(monitor, generatedCode, REFACTORINGWIZARDPAGE);
+		} catch (JETException e) {
+			e.printStackTrace();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Saves the given content in a file with the given name.
+	 * @param monitor Object for monitoring the saving activity.
+	 * @param content Content to be saved in a file with the given name.
+	 * @param fileName Name of the file the content has to be saved in.
+	 * @throws CoreException Exception that can be thrown.
+	 * @throws JETException Exception that can be thrown.
+	 */
+	protected void save
+			(IProgressMonitor monitor, String content, String fileName) 
+										throws CoreException, JETException {
+		IContainer container = findOrCreatePackage(monitor);
+		if (container == null) {
+			throw new JETException
+				("Cound not find or create container for package " 
+								+ this.config.getPackageName() + " in " 
+								+ this.config.getProjectName());
+		}
+		IFile file = container.getFile(new Path(fileName + JAVA));
+		InputStream inputStream = 
+							new ByteArrayInputStream(content.getBytes());
+		if (!file.exists()) {
+			file.create(inputStream, false, monitor);
+		} else {
+			container.refreshLocal(1, monitor);
+			file.setContents(inputStream, true, false, monitor);
+		}
+	}
+	
+	/**
+	 * Finds or creates the package the code has to be located to.
+	 * @param progressMonitor Object for monitoring the activity.
+	 * @return Package the code has to be located to.
+	 * @throws CoreException Exception that can be thrown.
+	 */
+	private IContainer findOrCreatePackage(IProgressMonitor progressMonitor) 
+														throws CoreException {
+		IPath outputPath = new Path
+					(this.config.getProjectName() + "/src/" 
+						+ this.config.getPackageName().replace('.', '/'));
+		IProgressMonitor subMonitor = 
+								new SubProgressMonitor(progressMonitor, 1);
+		IPath localLocation = null; 
+		IContainer container = 
+				CodeGenUtil.EclipseUtil.findOrCreateContainer
+								(outputPath, true, localLocation, subMonitor);
+		return container;
+	}
+	
+	private String generateCode(IProgressMonitor monitor, String template) {
+		String templatePath = this.templateDirectory + template + JAVAJET;
+		ClassLoader classLoader = getClass().getClassLoader();
+		this.jetEmitter = new JETEmitter(templatePath, classLoader);
+		this.jetEmitter.getClasspathEntries().addAll(classpathEntries);
+		String result = "";
+		IProgressMonitor sub = new SubProgressMonitor(monitor, 1);
+		try {
+			result = 
+				jetEmitter.generate(sub, new Object[] { this.config });
+		} catch (JETException e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+	
+	/**
+	 * Sets the singleton directive of the plugin to true.
+	 */
+	protected void setSingletonDirective() {
+		IProject project = ResourcesPlugin.getWorkspace().getRoot()
+							.getProject(this.config.getProjectName());
+		try {
+			String fileName = project.getLocation()
+					.append("/META-INF/MANIFEST.MF")
+					.toOSString();
+			FileInputStream is = new FileInputStream(fileName);
+			Manifest mf = new Manifest(is);
+			Attributes att = mf.getMainAttributes();
+			String value = att.getValue(BUNDLESYMBOLICNAME);
+			if (! value.contains(SINGLETONTRUE))
+				value = value + ";" +  SINGLETONTRUE;
+			att.putValue(BUNDLESYMBOLICNAME, value);
+			FileOutputStream out = new FileOutputStream(fileName);  
+			mf.write(out); 
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}  catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Updates the plugin.xml file by adding the generated model refactoring
+	 * to served extension points.
+	 */
+	protected void updatePluginXml() {
+		List<RefactoringInfo> refactoringConfig = 
+						XMLPluginFileManager.getRefactoringConfig
+											(this.config.getProjectName());
+		refactoringConfig.add(this.config);
+		XMLPluginFileManager.saveRefactoringConfig
+						(this.config.getProjectName(), refactoringConfig);		
+	}
+	
+	/**
+	 * Deletes the .JETEmitters project used for model refactoring
+	 * code generation.
+	 * @param monitor Object for monitoring the deleting activity.
+	 */
+	protected void deleteJetEmittersProject(IProgressMonitor monitor) {
+		try {
+			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+			IResource r = root.findMember(JETEMITTERS);
+			System.out.println("IResoure: "+ r.getName());
+			if (r != null){
+				r.delete(IResource.ALWAYS_DELETE_PROJECT_CONTENT, monitor);
+//				r.delete(false, monitor);
+			}
+		} 
+		catch (CoreException e) { } 
+		catch (Exception e) { }
+	}
+	
+	private String setNewTemplateDirectory() {
+		String td = "";
+		final Bundle bundle = Activator.getDefault().getBundle();
+		try {
+			td = FileLocator.toFileURL(bundle.getEntry(TEMPLATES)).getFile();
+		} catch (final IOException e) {
+			e.printStackTrace();
+		}
+		return td;
+	}
+
+	@Override
+	public String toString() {
+		return "ComrelGenerationManager [config=" + config + ", templateDirectory="
+				+ templateDirectory + ", classpathEntries=" + classpathEntries
+				+ "]";
+	}	
+
+}
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/CoMReLRefactoringWizardPage.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/CoMReLRefactoringWizardPage.java
new file mode 100644
index 0000000..e63749c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/CoMReLRefactoringWizardPage.java
@@ -0,0 +1,274 @@
+package comrel.generator.refactoring.wizards;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+import comrel.generator.refactoring.ComrelConfig;
+
+public class CoMReLRefactoringWizardPage extends WizardPage implements Listener, SelectionListener {
+
+	private Combo comboProject;
+	private Combo comboFile;
+	private Button btnImport;
+	
+	private LinkedList<IProject> projects;
+	private final String PLUGINNATURE = "org.eclipse.pde.PluginNature";
+	private String[] projectNames;
+	
+	private File[] comrelFiles;
+	private String[] comrelFileNames;
+	
+	private IProject project;
+	private String comrelFileName;
+
+	/**
+	 * Create the wizard.
+	 */
+	public CoMReLRefactoringWizardPage() {
+		super("CoMReLRefactoringWizardPage");
+		setTitle("CoMReL - project and model selection");
+		setDescription("Please select a plug-in project and an appropriate CoMReL model.");
+		initProjects();
+	}
+	
+	public IProject getProject() {
+		return project;
+	}
+
+	public String getComrelFileName() {
+		return comrelFileName;
+	}
+	
+	private void initProjects() {
+		this.projects = new LinkedList<IProject>();
+		IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+		for (IProject project : allProjects) {
+			if (project.isOpen()) {
+				IProjectNature nature = null;
+				try {
+					nature = project.getNature(PLUGINNATURE);
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+				if (null != nature) 
+					this.projects.add(project);
+			}
+		}
+	}
+
+	/**
+	 * Create contents of the wizard.
+	 * @param parent
+	 */
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+
+		setControl(container);
+		container.setLayout(new GridLayout(3, false));
+		
+		Label lblEclipsePluginProject = new Label(container, SWT.NONE);
+		lblEclipsePluginProject.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblEclipsePluginProject.setText("Eclipse plug-in project:");
+		
+		comboProject = new Combo(container, SWT.NONE);
+		comboProject.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Label lblNewLabel = new Label(container, SWT.NONE);
+		lblNewLabel.setText("");
+		
+		Label lblComrelModelFile = new Label(container, SWT.NONE);
+		lblComrelModelFile.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblComrelModelFile.setText("CoMReL model file:");
+		
+		comboFile = new Combo(container, SWT.NONE);
+		comboFile.setEnabled(false);
+		comboFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		btnImport = new Button(container, SWT.NONE);
+		btnImport.setEnabled(false);
+		btnImport.setText("import");
+		
+		setProjectCombo();
+		comboProject.addListener(SWT.Modify, this);
+		comboFile.addListener(SWT.Modify, this);
+		btnImport.addSelectionListener(this);
+		
+		this.setPageComplete(false);
+	}
+	
+	private void setProjectCombo() {
+		if (projects.isEmpty()) {
+			this.setMessage("There is no open plug-in project in the current workspace!", ERROR);
+			comboProject.setEnabled(false);
+		} else {
+			projectNames = new String[projects.size()];
+			for (int i = 0; i < projectNames.length; i++) {
+				projectNames[i] = projects.get(i).getName();
+			}
+			comboProject.setItems(projectNames);
+		}
+	}
+
+	@Override
+	public void handleEvent(Event event) {
+		if (event.widget == comboProject) {
+			setProject(comboProject.getSelectionIndex());
+		}
+		if (event.widget == comboFile) {
+			setComrelFile(comboFile.getSelectionIndex());
+		}
+	}
+	
+	private void setComrelFile(int index) {
+		if (index == -1) {
+			comrelFileName = null;
+			this.setPageComplete(false);
+			this.setMessage("Please select or import the corresponding CoMReL model.");
+		} else {
+			comrelFileName = comrelFileNames[index];
+			this.setPageComplete(true);
+			this.setMessage("Please select a plug-in project and an appropriate CoMReL model.");
+		}
+	}
+
+	private void setProject(int index) {
+		if (index == -1) {
+			project = null;
+		} else {
+			project = projects.get(index);
+			comboProject.setEnabled(false);
+			loadComrelFiles();
+			setComrelCombo();
+		}
+	}
+
+	private void setComrelCombo() {
+		if (comrelFiles != null) {
+			comrelFileNames = new String[comrelFiles.length];
+			for (int i = 0; i < comrelFiles.length; i++) {
+				comrelFileNames[i] = comrelFiles[i].getName();
+			}
+			comboFile.setItems(comrelFileNames);
+			comboFile.setEnabled(true);
+			btnImport.setEnabled(true);
+			this.setMessage("Please select or import the corresponding CoMReL model.");
+		}
+	}
+
+	private void loadComrelFiles() {
+		String path = project.getLocationURI().getPath() + ComrelConfig.COMRELDIR;
+		File file = new File(path);
+		if (! file.exists()) {
+			file.mkdirs();
+		}
+		FileFilter ff = new FileFilter() {
+			@Override
+			public boolean accept(File pathname) {
+				if (pathname.getName().endsWith(ComrelConfig.COMRELEXT)) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+		};
+		comrelFiles = file.listFiles(ff);
+	}
+
+	@Override
+	public void widgetSelected(SelectionEvent e) {
+		FileDialog fd = new FileDialog(this.getShell(), SWT.OPEN);
+		fd.setText("Select CoMReL model");
+		fd.setFilterPath(project.getLocation().toString());
+		String[] filterExt = { "*" + ComrelConfig.COMRELEXT };
+		fd.setFilterExtensions(filterExt);
+		String selected = fd.open();
+		if (selected != null)
+			if (!selected.isEmpty()) {
+				selected = selected.replace('\\', '/');
+				int i = selected.lastIndexOf("/");
+				String name = selected.substring(i + 1);
+				String destination = project.getLocationURI().getPath() + ComrelConfig.COMRELDIR;
+				copyFile(selected, destination, name);
+				File f = new File(selected);
+				if (comrelFiles == null) {
+					comrelFiles = new File[] {f};
+					comrelFileNames = new String[] {name};
+				} else {
+					File[] fileTemp = new File[comrelFiles.length + 1];
+					String[] nameTemp = new String[comrelFiles.length + 1];
+					for (int j = 0; j < comrelFiles.length; j++) {
+						fileTemp[j] = comrelFiles[j]; 
+						nameTemp[j] = comrelFileNames[j];
+					}
+					fileTemp[comrelFiles.length] = f;
+					nameTemp[comrelFiles.length] = name;
+					comrelFiles = fileTemp;
+					comrelFileNames = nameTemp;
+				}
+				comboFile.setItems(comrelFileNames);
+			}
+	}
+	
+	public static void copyFile(String target, String destination, String name) {
+		File file = new File(destination);
+		if (! file.exists()) {
+			file.mkdirs();
+		}
+		File newFile = new File(destination + name);
+		try {
+			newFile.createNewFile();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		copy(target, destination + name);
+	}
+
+	public static void copy(String filePath, String newFilePath) {
+		try {
+			BufferedInputStream is = new BufferedInputStream(
+					new FileInputStream(filePath));
+			new File(newFilePath).createNewFile();
+			BufferedOutputStream os = new BufferedOutputStream(
+					new FileOutputStream(newFilePath));
+			int b;
+			while ((b = is.read()) != -1) {
+				os.write(b);
+			}
+			is.close();
+			os.close();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public void widgetDefaultSelected(SelectionEvent e) { }
+
+}
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/NewRefactoringWizardCoMReL.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/NewRefactoringWizardCoMReL.java
new file mode 100644
index 0000000..ac2485b
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/NewRefactoringWizardCoMReL.java
@@ -0,0 +1,110 @@
+package comrel.generator.refactoring.wizards;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardContainer;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import comrel.CompositeRefactoring;
+import comrel.generator.refactoring.ComrelConfig;
+import comrel.generator.refactoring.ComrelGenerationManager;
+
+public class NewRefactoringWizardCoMReL extends Wizard 
+				implements INewWizard {
+	
+	private final String WINDOW_TITLE = "New Composite EMF Model Refactoring";
+	
+	/**
+	 * Wizard page for specifying the CoMReL file to 
+	 * be used for executing the EMF model refactoring.
+	 */
+	private CoMReLRefactoringWizardPage comrelWizardPage;
+
+	public NewRefactoringWizardCoMReL() {  }
+
+	@Override
+	public void init(IWorkbench workbench, IStructuredSelection selection) {  }
+	
+	@Override
+	public void addPages() {
+		setWindowTitle(WINDOW_TITLE);
+		this.comrelWizardPage = new CoMReLRefactoringWizardPage();
+		this.addPage(comrelWizardPage);
+	}
+
+	@Override
+	public boolean performFinish() {
+		
+		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+			protected void execute(IProgressMonitor monitor)
+					throws CoreException, InvocationTargetException,
+					InterruptedException {
+				try {
+					createComrelRefactoring(monitor);
+				} finally {
+					monitor.done();
+				}
+			}
+		};
+		try {
+			IWizardContainer container = getContainer();
+			if (container != null) {
+				container.run(false, false, op);
+			}
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		return true;
+		
+	}
+	
+	protected void createComrelRefactoring(IProgressMonitor monitor) {
+		System.out.println("Generate EMF Model Refactoring");
+		System.out.println("Project: " + comrelWizardPage.getProject());
+		System.out.println("CoMReL: " + comrelWizardPage.getComrelFileName());
+		CompositeRefactoring cr = loadComrelModel();
+		// TODO test cr
+		ComrelConfig config = new ComrelConfig(
+				cr, 
+				comrelWizardPage.getProject(), 
+				comrelWizardPage.getComrelFileName());
+		System.out.println(config.toString());
+		ComrelGenerationManager generationManager = new ComrelGenerationManager(config);
+		System.out.println(generationManager.toString());
+		generationManager.run(monitor);
+	}
+	
+	private CompositeRefactoring loadComrelModel() {
+		String path = comrelWizardPage.getProject().getLocationURI().getPath() 
+						+ ComrelConfig.COMRELDIR + comrelWizardPage.getComrelFileName();
+		URI uri = URI.createFileURI(new File(path).getAbsolutePath());
+		ResourceSet resourceSet = new ResourceSetImpl();
+		Resource resource = resourceSet.createResource(uri);
+		try {
+			resource.load(Collections.EMPTY_MAP);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return (CompositeRefactoring) resource.getContents().get(0);
+	}
+	
+	@Override
+	public boolean canFinish() {
+		return comrelWizardPage.isPageComplete();
+	}
+}
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizard.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizard.java
deleted file mode 100644
index 55db048..0000000
--- a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizard.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package comrel.generator.refactoring.wizards;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbench;
-
-public class RefactoringWizard extends Wizard implements INewWizard {
-
-	public RefactoringWizard() {
-		// TODO Auto-generated constructor stub
-	}
-
-	@Override
-	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean performFinish() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-}
diff --git a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizardPage.java b/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizardPage.java
deleted file mode 100644
index 9bdb9ea..0000000
--- a/org.eclipse.emf.refactor.comrel.generator/src/comrel/generator/refactoring/wizards/RefactoringWizardPage.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package comrel.generator.refactoring.wizards;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-
-public class RefactoringWizardPage extends WizardPage {
-
-	/**
-	 * Create the wizard.
-	 */
-	public RefactoringWizardPage() {
-		super("wizardPage");
-		setTitle("Wizard Page title");
-		setDescription("Wizard Page description");
-	}
-
-	/**
-	 * Create contents of the wizard.
-	 * @param parent
-	 */
-	public void createControl(Composite parent) {
-		Composite container = new Composite(parent, SWT.NULL);
-
-		setControl(container);
-		container.setLayout(new GridLayout(3, false));
-		
-		Label lblEclipsePluginProject = new Label(container, SWT.NONE);
-		lblEclipsePluginProject.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
-		lblEclipsePluginProject.setText("Eclipse plug-in project:");
-		
-		Combo comboProject = new Combo(container, SWT.NONE);
-		comboProject.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblNewLabel = new Label(container, SWT.NONE);
-		
-		Label lblComrelModelFile = new Label(container, SWT.NONE);
-		lblComrelModelFile.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
-		lblComrelModelFile.setText("CoMReL model file:");
-		
-		Combo comboFile = new Combo(container, SWT.NONE);
-		comboFile.setEnabled(false);
-		comboFile.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Button btnImport = new Button(container, SWT.NONE);
-		btnImport.setEnabled(false);
-		btnImport.setText("import");
-	}
-
-}
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelMulti.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelMulti.javajet
new file mode 100644
index 0000000..09b6496
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelMulti.javajet
@@ -0,0 +1,223 @@
+<%@ jet package="comrel.refactoring" class="RefactoringController"
+imports="org.eclipse.emf.refactor.refactoring.generator.core.* comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import <%=refactoringConfig.getPackageName()%>.RefactoringDataManagement.ContextList;
+
+import comrel.InputPort;
+import comrel.MultiInputPort;
+import comrel.RefactoringUnit;
+import comrel.SingleInputPort;
+import comrel.interpreter.ComrelInterpreter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.interfaces.IController;
+import org.eclipse.emf.refactor.refactoring.interfaces.IDataManagement;
+import org.eclipse.emf.refactor.refactoring.runtime.ltk.LtkEmfRefactoringProcessorAdapter;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+
+public final class RefactoringController implements IController {
+
+	/**
+	 * Refactoring supported by the controller.
+	 * @generated
+	 */
+	private Refactoring parent;
+	
+	/**
+	 * DataManagement object of the model refactoring.
+	 * @generated
+	 */
+	private RefactoringDataManagement dataManagement = 
+									new RefactoringDataManagement();
+	
+	/**
+	 * Invocation context of the model refactoring.
+	 * @generated
+	 */	
+	private List<EObject> selection = new ArrayList<EObject>();
+	
+	/**
+	 * Ltk RefactoringProcessor of the model refactoring.
+	 * @generated
+	 */
+	private InternalRefactoringProcessor refactoringProcessor = null;
+	
+	/**
+	 * Gets the Refactoring supported by the controller.
+	 * @return Refactoring supported by the controller.
+	 * @see org.eclipse.emf.refactor.common.core.IController#getParent()
+	 * @generated
+	 */
+	@Override
+	public Refactoring getParent() {
+		return this.parent;
+	}
+	
+	/**
+	 * Sets the Refactoring supported by the controller.
+	 * @param emfRefactoring Refactoring supported by the controller.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)
+	 * @generated
+	 */
+	@Override
+	public void setParent(Refactoring emfRefactoring) {
+		this.parent = emfRefactoring;
+	}
+	
+	/**
+	 * Returns the DataManagement object of the model refactoring.
+	 * @return DataManagement object of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * getDataManagementObject()
+	 * @generated
+	 */
+	@Override
+	public IDataManagement getDataManagementObject() {
+		return this.dataManagement;
+	}
+
+	/**
+	 * Returns the ltk RefactoringProcessor of the model refactoring.
+	 * @return Ltk RefactoringProcessor of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * getLtkRefactoringProcessor()
+	 * @generated
+	 */
+	@Override
+	public RefactoringProcessor getLtkRefactoringProcessor() {
+		return this.refactoringProcessor;
+	}
+	
+	/**
+	 * Sets the selected EObject (invocation context of the model refactoring).
+	 * @param selection Invocation context of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * setSelection(java.util.List)
+	 * @generated
+	 */
+	@Override
+	public void setSelection(List<EObject> selection) {
+		this.selection = selection;
+		this.refactoringProcessor = 
+				new InternalRefactoringProcessor(this.selection);
+	}	
+	
+	/**
+	 * Returns a Runnable object that executes the model refactoring.
+	 * @return Runnable object that executes the model refactoring.
+	 * @generated
+	 */
+	private Runnable applyRefactoring() {
+		return new Runnable() {				
+			/**
+			 * @see java.lang.Runnable#run()
+			 * @generated
+			 */
+			@Override
+			public void run() {
+				try {
+					ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> selectedEObjects = 
+						((ContextList) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();<%/*
+					*/%><%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>
+					String <%=pC.getName()%> =
+						(String) dataManagement.getInPortByName("<%=pC.getName()%>").getValue();<%}%>
+					// begin prepare and execute comrel interpreter
+					ComrelInterpreter interpreter = new ComrelInterpreter(selectedEObjects.get(0));
+					interpreter.loadComrelModel(dataManagement.getComrelFilePath());
+					setRootPortValues(interpreter, selectedEObjects<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>,
+										<%=pC.getName()%><%}%>);
+					interpreter.execute();
+					// end prepare and execute comrel interpreter
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			private void setRootPortValues(
+					ComrelInterpreter interpreter,
+					ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> selectedEObjects<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>, 
+					String <%=pC.getName()%><%}%>) {
+				RefactoringUnit rootRefactoringUnit = interpreter.getRootRefactoringUnit();
+				for (InputPort ip : rootRefactoringUnit.getAllInputPorts()) {
+					System.out.println(ip.getName());
+					if (ip.getName().equals("selectedEObjects")) {
+						((MultiInputPort) ip).getValue().addAll(selectedEObjects);
+					}<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>
+					if (ip.getName().equals("<%=pC.getName()%>")) {
+						((SingleInputPort) ip).setValue(<%=pC.getName()%>);
+					}<%}%>
+				}
+			}
+		};
+	}
+
+	/**
+	 * Internal class for providing an instance of a LTK RefactoringProcessor 
+	 * used for EMF model refactorings.	 
+	 * @generated
+	 */
+	public final class InternalRefactoringProcessor extends 
+									LtkEmfRefactoringProcessorAdapter {
+
+		/**
+		 * Constructor using the invocation context of the model refactoring.
+		 * @param selection Invocation context of the model refactoring.
+		 * @generated
+		 */
+		private InternalRefactoringProcessor(List<EObject> selection){
+				super(getParent(), selection, applyRefactoring());				
+		}
+			
+		/**
+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#
+	 	 * checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+		 * @generated
+		 */	
+		@Override
+		public RefactoringStatus checkInitialConditions(){
+				RefactoringStatus result = new RefactoringStatus();
+				ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> selectedEObjects = 
+						((ContextList) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();
+				// TODO: implement initial check
+				return result;
+		}
+		
+		/**
+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#
+	     * checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, 
+	     * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+		 * @generated
+		 */	
+		@Override
+		public RefactoringStatus checkFinalConditions(){
+				RefactoringStatus result = new RefactoringStatus();
+				ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> selectedEObjects = 
+						((ContextList) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue()).getElements();<%/*
+				*/%><%for (ParameterInfo pC : refactoringConfig.getParameters()) {%>
+				String <%=pC.getName()%> =
+					(String) dataManagement.getInPortByName("<%=pC.getName()%>").getValue();<%}%>
+				// TODO: implement final check
+				return result;
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelSingle.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelSingle.javajet
new file mode 100644
index 0000000..d30fa07
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringControllerComrelSingle.javajet
@@ -0,0 +1,220 @@
+<%@ jet package="comrel.refactoring" class="RefactoringController"
+imports="org.eclipse.emf.refactor.refactoring.generator.core.* comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import comrel.InputPort;
+import comrel.RefactoringUnit;
+import comrel.SingleInputPort;
+import comrel.interpreter.ComrelInterpreter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.interfaces.IController;
+import org.eclipse.emf.refactor.refactoring.interfaces.IDataManagement;
+import org.eclipse.emf.refactor.refactoring.runtime.ltk.LtkEmfRefactoringProcessorAdapter;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+
+public final class RefactoringController implements IController {
+
+	/**
+	 * Refactoring supported by the controller.
+	 * @generated
+	 */
+	private Refactoring parent;
+	
+	/**
+	 * DataManagement object of the model refactoring.
+	 * @generated
+	 */
+	private RefactoringDataManagement dataManagement = 
+									new RefactoringDataManagement();
+	
+	/**
+	 * Invocation context of the model refactoring.
+	 * @generated
+	 */	
+	private List<EObject> selection = new ArrayList<EObject>();
+	
+	/**
+	 * Ltk RefactoringProcessor of the model refactoring.
+	 * @generated
+	 */
+	private InternalRefactoringProcessor refactoringProcessor = null;
+	
+	/**
+	 * Gets the Refactoring supported by the controller.
+	 * @return Refactoring supported by the controller.
+	 * @see org.eclipse.emf.refactor.common.core.IController#getParent()
+	 * @generated
+	 */
+	@Override
+	public Refactoring getParent() {
+		return this.parent;
+	}
+	
+	/**
+	 * Sets the Refactoring supported by the controller.
+	 * @param Refactoring refactoring supported by the controller.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)
+	 * @generated
+	 */
+	@Override
+	public void setParent(Refactoring refactoring) {
+		this.parent = refactoring;
+	}
+	
+	/**
+	 * Returns the DataManagement object of the model refactoring.
+	 * @return DataManagement object of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * getDataManagementObject()
+	 * @generated
+	 */
+	@Override
+	public IDataManagement getDataManagementObject() {
+		return this.dataManagement;
+	}
+
+	/**
+	 * Returns the ltk RefactoringProcessor of the model refactoring.
+	 * @return Ltk RefactoringProcessor of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * getLtkRefactoringProcessor()
+	 * @generated
+	 */
+	@Override
+	public RefactoringProcessor getLtkRefactoringProcessor() {
+		return this.refactoringProcessor;
+	}
+	
+	/**
+	 * Sets the selected EObject (invocation context of the model refactoring).
+	 * @param selection Invocation context of the model refactoring.
+	 * @see org.eclipse.emf.refactor.common.core.IController#
+	 * setSelection(java.util.List)
+	 * @generated
+	 */
+	@Override
+	public void setSelection(List<EObject> selection) {
+		this.selection = selection;
+		this.refactoringProcessor = 
+				new InternalRefactoringProcessor(this.selection);
+	}	
+	
+	/**
+	 * Returns a Runnable object that executes the model refactoring.
+	 * @return Runnable object that executes the model refactoring.
+	 * @generated
+	 */
+	private Runnable applyRefactoring() {
+		return new Runnable() {				
+			/**
+			 * @see java.lang.Runnable#run()
+			 * @generated
+			 */
+			@Override
+			public void run() {
+				try {
+					<%=refactoringConfig.getSelectedEObjectClass()%> selectedEObject = 
+						(<%=refactoringConfig.getSelectedEObjectClass()%>) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();<%/*
+					*/%><%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>
+					String <%=pC.getName()%> =
+						(String) dataManagement.getInPortByName("<%=pC.getName()%>").getValue();<%}%>
+					// begin prepare and execute comrel interpreter
+					ComrelInterpreter interpreter = new ComrelInterpreter(selectedEObject);
+					interpreter.loadComrelModel(dataManagement.getComrelFilePath());
+					setRootPortValues(interpreter, selectedEObject<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>,
+										<%=pC.getName()%><%}%>);
+					interpreter.execute();
+					// end prepare and execute comrel interpreter
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			private void setRootPortValues(
+					ComrelInterpreter interpreter,
+					<%=refactoringConfig.getSelectedEObjectClass()%> selectedEObject<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>, 
+					String <%=pC.getName()%><%}%>) {
+				RefactoringUnit rootRefactoringUnit = interpreter.getRootRefactoringUnit();
+				for (InputPort ip : rootRefactoringUnit.getAllInputPorts()) {
+					System.out.println(ip.getName());
+					if (ip.getName().equals("selectedEObject")) {
+						((SingleInputPort) ip).setValue(selectedEObject);
+					}<%for (ParameterInfo pC : refactoringConfig.getParameters()) { %>
+					if (ip.getName().equals("<%=pC.getName()%>")) {
+						((SingleInputPort) ip).setValue(<%=pC.getName()%>);
+					}<%}%>
+				}
+			}
+		};
+	}
+
+	/**
+	 * Internal class for providing an instance of a LTK RefactoringProcessor 
+	 * used for EMF model refactorings.	 
+	 * @generated
+	 */
+	public final class InternalRefactoringProcessor extends 
+									LtkEmfRefactoringProcessorAdapter {
+
+		/**
+		 * Constructor using the invocation context of the model refactoring.
+		 * @param selection Invocation context of the model refactoring.
+		 * @generated
+		 */
+		private InternalRefactoringProcessor(List<EObject> selection){
+				super(getParent(), selection, applyRefactoring());				
+		}
+			
+		/**
+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#
+	 	 * checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
+		 * @generated
+		 */	
+		@Override
+		public RefactoringStatus checkInitialConditions(){
+				RefactoringStatus result = new RefactoringStatus();
+				<%=refactoringConfig.getSelectedEObjectClass()%> selectedEObject = 
+					(<%=refactoringConfig.getSelectedEObjectClass()%>) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();
+				// TODO: implement initial check
+				return result;
+		}
+		
+		/**
+		 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#
+	     * checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, 
+	     * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+		 * @generated
+		 */	
+		@Override
+		public RefactoringStatus checkFinalConditions(){
+				RefactoringStatus result = new RefactoringStatus();
+				<%=refactoringConfig.getSelectedEObjectClass()%> selectedEObject = 
+					(<%=refactoringConfig.getSelectedEObjectClass()%>) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();<%/*
+				*/%><%for (ParameterInfo pC : refactoringConfig.getParameters()) {%>
+				String <%=pC.getName()%> =
+					(String) dataManagement.getInPortByName("<%=pC.getName()%>").getValue();<%}%>
+				// TODO: implement final check
+				return result;
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelMulti.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelMulti.javajet
new file mode 100644
index 0000000..cfa35e8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelMulti.javajet
@@ -0,0 +1,113 @@
+ <%@ jet package="comrel.refactoring" class="RefactoringDataManagement"
+imports="org.eclipse.emf.refactor.refactoring.generator.core.* comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import <%=refactoringConfig.getProjectName().toLowerCase()%>.Activator;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import comrel.interpreter.IEObjectGetter;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Port;
+import org.eclipse.emf.refactor.refactoring.runtime.DataManagementAdapter;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * Class for specific data concerning a model refactoring.
+ * @generated
+ */
+public class RefactoringDataManagement extends DataManagementAdapter {
+
+	protected final String SELECTEDEOBJECT = "selectedEObject";
+	protected final String COMRELMODELS = "comrelmodels";
+	protected final String COMRELMODELSSLASH = "\\comrelmodels\\";
+	
+	private String comrelFileName = "<%=refactoringConfig.getComrelModel()%>";
+
+	/**
+	 * Default constructor.
+	 * @generated
+	 */
+	public RefactoringDataManagement() {
+		this.addPorts();
+	}
+	
+	/**
+	 * Adds the ports to the data management used for parameter passing.
+	 * @generated
+	 */
+	private void addPorts(){
+		this.inPorts.add
+			(new Port<ContextList>(SELECTEDEOBJECT, ContextList.class));
+<% for (ParameterInfo pc : refactoringConfig.getParameters()) { %>
+		this.inPorts.add
+			(new Port<String>
+				("<%=pc.getName()%>", String.class, "unspecified"));
+<% } %>		
+	}
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.IDataManagement#
+	 * preselect(java.util.List)
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void preselect(List<EObject> selection) {
+		getInPortByName(SELECTEDEOBJECT).setValue(new ContextList(selection));
+	}
+	
+	public String getComrelFilePath() {
+		String path = "";
+		final Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+		try {
+			if (bundle != null) {
+				path = FileLocator.toFileURL(bundle.getEntry(COMRELMODELS)).getFile();
+				path += this.comrelFileName;
+			} else {
+				path = new File(".").getCanonicalPath() 
+						+  COMRELMODELSSLASH + this.comrelFileName;
+			}
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		return path;
+	}
+	
+	public class ContextList implements IEObjectGetter {
+		
+		private ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> elements = 
+								new ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>>();
+		
+		public ContextList(List<EObject> selection) {
+			super();
+			for (EObject eObject : selection) {
+				this.elements.add((<%=refactoringConfig.getSelectedEObjectClass()%>) eObject);
+			}
+		}
+		
+		public ArrayList<<%=refactoringConfig.getSelectedEObjectClass()%>> getElements() {
+			return elements;
+		}
+	
+		@Override
+		public EObject getEObject() {
+			return elements.get(0);
+		}
+	}
+
+}
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelSingle.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelSingle.javajet
new file mode 100644
index 0000000..51efbfd
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringDataManagementComrelSingle.javajet
@@ -0,0 +1,90 @@
+ <%@ jet package="comrel.refactoring" class="RefactoringDataManagement"
+imports="org.eclipse.emf.refactor.refactoring.generator.core.* comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import <%=refactoringConfig.getProjectName().toLowerCase()%>.Activator;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Port;
+import org.eclipse.emf.refactor.refactoring.runtime.DataManagementAdapter;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * Class for specific data concerning a model refactoring.
+ * @generated
+ */
+public class RefactoringDataManagement extends DataManagementAdapter {
+
+	protected final String SELECTEDEOBJECT = "selectedEObject";
+	protected final String COMRELMODELS = "comrelmodels";
+	protected final String COMRELMODELSSLASH = "\\comrelmodels\\";
+	
+	private String comrelFileName = "<%=refactoringConfig.getComrelModel()%>";
+
+	/**
+	 * Default constructor.
+	 * @generated
+	 */
+	public RefactoringDataManagement() {
+		this.addPorts();
+	}
+	
+	/**
+	 * Adds the ports to the data management used for parameter passing.
+	 * @generated
+	 */
+	private void addPorts(){
+		this.inPorts.add
+			(new Port<<%=refactoringConfig.getSelectedEObjectClass()%>>
+				(SELECTEDEOBJECT, <%=refactoringConfig.getSelectedEObjectClass()%>.class));
+<% for (ParameterInfo pc : refactoringConfig.getParameters()) { %>
+		this.inPorts.add
+			(new Port<String>
+				("<%=pc.getName()%>", String.class, "unspecified"));
+<% } %>		
+	}
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.IDataManagement#
+	 * preselect(java.util.List)
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void preselect(List<EObject> selection) {
+		getInPortByName(SELECTEDEOBJECT).
+				setValue((<%=refactoringConfig.getSelectedEObjectClass()%>) selection.get(0));
+	}
+	
+	public String getComrelFilePath() {
+		String path = "";
+		final Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+		try {
+			if (bundle != null) {
+				path = FileLocator.toFileURL(bundle.getEntry(COMRELMODELS)).getFile();
+				path += this.comrelFileName;
+			} else {
+				path = new File(".").getCanonicalPath() 
+						+  COMRELMODELSSLASH + this.comrelFileName;
+			}
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		return path;
+	}
+
+}
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelMulti.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelMulti.javajet
new file mode 100644
index 0000000..2b2bace
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelMulti.javajet
@@ -0,0 +1,82 @@
+<%@ jet package="comrel.refactoring" class="RefactoringGuiHandler"
+imports="comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+ package <%=refactoringConfig.getPackageName()%>;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;
+
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+
+/**
+ * Class used for specifying gui topics of a specific model refactoring.
+ * @generated
+ */
+public class RefactoringGuiHandler implements IGuiHandler {
+
+	/**
+	 * Refactoring supported by the GuiHandler.
+	 * @generated
+	 */
+	Refactoring parent;
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#getParent()
+	 * @generated
+	 */
+	@Override
+	public Refactoring getParent() {
+		return parent;
+	}
+
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#
+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)
+	 * @generated
+	 */
+	@Override
+	public void setParent(Refactoring refactoring) {
+		this.parent = refactoring;
+	}
+		
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#show()
+	 * @generated
+	 */
+	@Override
+	public RefactoringWizard show() {
+		return new <%=refactoringConfig.getPackageName()%>.RefactoringWizard
+		((RefactoringController) this.parent.getController());
+	}
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#
+	 * showInMenu(java.util.List)
+	 * @generated
+	 */
+	@Override
+	public boolean showInMenu(List<EObject> selection) {
+		if (selection.size() <= 1) return false;
+		boolean onlyOneType = true;
+		for (EObject o : selection) {
+			if (null != o) {
+				if (! (o instanceof <%=refactoringConfig.getSelectedEObjectClass()%>)) {
+					onlyOneType = false;
+					break;
+				}
+			} 
+		}
+		return onlyOneType;
+	}
+
+}	
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelSingle.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelSingle.javajet
new file mode 100644
index 0000000..24ce161
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringGuiHandlerComrelSingle.javajet
@@ -0,0 +1,80 @@
+<%@ jet package="comrel.refactoring" class="RefactoringGuiHandler"
+imports="comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+ package <%=refactoringConfig.getPackageName()%>;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;
+
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+
+/**
+ * Class used for specifying gui topics of a specific model refactoring.
+ * @generated
+ */
+public class RefactoringGuiHandler implements IGuiHandler {
+
+	/**
+	 * Refactoring supported by the GuiHandler.
+	 * @generated
+	 */
+	Refactoring parent;
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#getParent()
+	 * @generated
+	 */
+	@Override
+	public Refactoring getParent() {
+		return parent;
+	}
+
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#
+	 * setParent(org.eclipse.emf.refactor.common.core.Refactoring)
+	 * @generated
+	 */
+	@Override
+	public void setParent(Refactoring refactoring) {
+		this.parent = refactoring;
+	}
+		
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#show()
+	 * @generated
+	 */
+	@Override
+	public RefactoringWizard show() {
+		return new <%=refactoringConfig.getPackageName()%>.RefactoringWizard
+		((RefactoringController) this.parent.getController());
+	}
+	
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#
+	 * showInMenu(java.util.List)
+	 * @generated
+	 */
+	@Override
+	public boolean showInMenu(List<EObject> selection) {
+		if (selection.size() != 1) return false;
+		for (EObject o : selection) {
+			if (null != o) {
+				if (o instanceof <%=refactoringConfig.getSelectedEObjectClass()%>) {
+					return true;
+				}
+			} 
+		}
+		return false;
+	}
+
+}	
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardComrel.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardComrel.javajet
new file mode 100644
index 0000000..e7de0fe
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardComrel.javajet
@@ -0,0 +1,43 @@
+<%@ jet package="comrel.refactoring" class="RefactoringWizard"
+imports="comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringWizard.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import org.eclipse.emf.refactor.refactoring.interfaces.IController;
+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;
+
+/**
+ * Class used for providing an implementation of an LTK
+ * RefactoringWizard in EMF Refactor.
+ * @generated
+ */
+public class RefactoringWizard 
+    extends AbstractRefactoringWizard {
+		
+	/**
+	 * Default constructor implementation.
+	 * @param controller Controller of the EMF model refactoring.
+	 * @generated
+	 */					
+	public RefactoringWizard(IController controller) {
+		super(controller);
+	}
+
+	/**
+	 * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#
+	 * addUserInputPages()
+	 * @generated
+	 */
+	@Override
+	protected void addUserInputPages() {
+		addPage(new RefactoringWizardPage
+			(controller.getParent().getName(), (RefactoringController)controller));
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardPageComrel.javajet b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardPageComrel.javajet
new file mode 100644
index 0000000..c540992
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.generator/templates/RefactoringWizardPageComrel.javajet
@@ -0,0 +1,135 @@
+<%@ jet package="comrel.refactoring" class="RefactoringWizardPage"
+imports="org.eclipse.emf.refactor.refactoring.generator.core.* comrel.generator.refactoring.*"%>
+<%ComrelConfig refactoringConfig = (ComrelConfig) argument; %>
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringWizardPage.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+package <%=refactoringConfig.getPackageName()%>;
+
+import java.util.List;
+
+import org.eclipse.emf.refactor.refactoring.runtime.ltk.ui.AbstractRefactoringWizard;
+import org.eclipse.emf.refactor.refactoring.runtime.ui.IInputPageButtonCreator;
+import org.eclipse.emf.refactor.refactoring.runtime.ui.InputPageButtonLoader;
+
+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Class for setting model refactoring specific parameters
+ * by the user.
+ * @generated
+ */
+public class RefactoringWizardPage extends 
+				UserInputWizardPage implements Listener {
+	
+	/**
+	 * Controller of the EMF model refactoring.
+	 * @generated
+	 */			
+	private final RefactoringController controller;
+	
+<% for (ParameterInfo pc : refactoringConfig.getParameters()) { %>
+	/**
+	 * Label for each parameter.
+	 * @generated
+	 */	
+	private Label <%=pc.getName()%>Label;
+	
+	/**
+	 * TextField for each parameter.
+	 * @generated
+	 */
+	private Text <%=pc.getName()%>Widget;
+<% } %>
+
+	/**
+	 * Default constructor using a name and the controller of the 
+	 * EMF model refactoring.
+	 * @param name Name of the WizardPage.
+	 * @param controller Controller of the EMF model refactoring.
+	 * @generated
+	 */
+	public RefactoringWizardPage
+		(String name, RefactoringController controller) {
+		super(name);
+		this.controller = controller;
+	}
+
+	/**
+	 * @see org.eclipse.swt.widgets.Listener#
+	 * handleEvent(org.eclipse.swt.widgets.Event)
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void handleEvent(Event event) {		
+		getWizard().getContainer().updateButtons();
+
+<% for (ParameterInfo pc : refactoringConfig.getParameters()) { %>				
+		if (<%=pc.getName()%>Widget != null) {
+			String <%=pc.getName()%> = <%=pc.getName()%>Widget.getText();
+			if (!<%=pc.getName()%>.isEmpty()){
+				((RefactoringDataManagement) 
+						this.controller.getDataManagementObject()).
+						getInPortByName("<%=pc.getName()%>").
+						setValue(<%=pc.getName()%>);
+			} else {
+				((RefactoringDataManagement) 
+						this.controller.getDataManagementObject()).
+						getInPortByName("<%=pc.getName()%>").
+						setValue("unspecified");
+			}
+		}
+<% } %>
+
+	}
+	
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#
+	 * createControl(org.eclipse.swt.widgets.Composite)
+	 * @generated
+	 */
+	@Override
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gl = new GridLayout();
+		gl.numColumns = 2;
+		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+		composite.setLayout(gl);
+		
+<% for (ParameterInfo pc : refactoringConfig.getParameters()) { %>	
+		
+		<%=pc.getName()%>Label = new Label(composite, SWT.NONE);
+		<%=pc.getName()%>Label.setText("<% if (pc.getDescription() != null) {%> <%=pc.getDescription()%> <% } else { %> value of variable '<%=pc.getName()%>'<% } %>: ");		
+		<%=pc.getName()%>Label.setEnabled(true);
+		
+		<%=pc.getName()%>Widget = new Text(composite, SWT.BORDER);
+		<%=pc.getName()%>Widget.setToolTipText
+				("value of variable '<%=pc.getName()%>'");
+		<%=pc.getName()%>Widget.setEnabled(true);
+		<%=pc.getName()%>Widget.setLayoutData(gd);
+		<%=pc.getName()%>Widget.addListener(SWT.Modify, this);
+		
+<% } %>
+
+		List<IInputPageButtonCreator> buttonCreators = InputPageButtonLoader.iNSTANCE.getInputPageButtonCreatorClasses();
+		for(IInputPageButtonCreator creator : buttonCreators){
+			creator.createButton(composite, controller, (AbstractRefactoringWizard)this.getWizard());
+		}
+		
+		setControl(composite);
+	}
+	
+}
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.comrel/bin/.gitignore b/org.eclipse.emf.refactor.comrel/bin/.gitignore
deleted file mode 100644
index 508dbce..0000000
--- a/org.eclipse.emf.refactor.comrel/bin/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/comrel
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/AtomicUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/AtomicUnit.class
new file mode 100644
index 0000000..7d93f15
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/AtomicUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/CartesianQueuedUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/CartesianQueuedUnit.class
new file mode 100644
index 0000000..02019cf
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/CartesianQueuedUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeRefactoring.class b/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeRefactoring.class
new file mode 100644
index 0000000..bcaac55
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeRefactoring.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeUnit.class
new file mode 100644
index 0000000..d45d523
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/CompositeUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelFactory.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelFactory.class
new file mode 100644
index 0000000..b0bc9dc
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelFactory.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage$Literals.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage$Literals.class
new file mode 100644
index 0000000..1e80c4c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage$Literals.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage.class
new file mode 100644
index 0000000..3caa493
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ComrelPackage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionCheck.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionCheck.class
new file mode 100644
index 0000000..7aea63c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionCheck.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionalUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionalUnit.class
new file mode 100644
index 0000000..a142856
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ConditionalUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/DescribedElement.class b/org.eclipse.emf.refactor.comrel/bin/comrel/DescribedElement.class
new file mode 100644
index 0000000..7cfa185
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/DescribedElement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureHelper.class
new file mode 100644
index 0000000..b8369e0
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureUnit.class
new file mode 100644
index 0000000..8776e0c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/FeatureUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/FilterHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/FilterHelper.class
new file mode 100644
index 0000000..b92abb3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/FilterHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/FilterUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/FilterUnit.class
new file mode 100644
index 0000000..edc0ca8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/FilterUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/Helper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/Helper.class
new file mode 100644
index 0000000..50b00a7
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/Helper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/HelperUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/HelperUnit.class
new file mode 100644
index 0000000..485dee2
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/HelperUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/InputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/InputPort.class
new file mode 100644
index 0000000..ca181b6
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/InputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MappingVisualization.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MappingVisualization.class
new file mode 100644
index 0000000..f1304e9
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MappingVisualization.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ModelRefactoring.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ModelRefactoring.class
new file mode 100644
index 0000000..e53b18a
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ModelRefactoring.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureHelper.class
new file mode 100644
index 0000000..88b588a
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureUnit.class
new file mode 100644
index 0000000..8063219
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFeatureUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterHelper.class
new file mode 100644
index 0000000..39a0406
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterUnit.class
new file mode 100644
index 0000000..9cd4013
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiFilterUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiInputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiInputPort.class
new file mode 100644
index 0000000..2aaccf8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiInputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiOutputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiOutputPort.class
new file mode 100644
index 0000000..9c657c3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiOutputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPort.class
new file mode 100644
index 0000000..0038853
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPortMapping.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPortMapping.class
new file mode 100644
index 0000000..e63e50b
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiPortMapping.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/MultiSinglePortMapping.class b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiSinglePortMapping.class
new file mode 100644
index 0000000..ee4fec4
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/MultiSinglePortMapping.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/NamedElement.class b/org.eclipse.emf.refactor.comrel/bin/comrel/NamedElement.class
new file mode 100644
index 0000000..b2678b0
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/NamedElement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/OutputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/OutputPort.class
new file mode 100644
index 0000000..f628809
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/OutputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/ParallelQueuedUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/ParallelQueuedUnit.class
new file mode 100644
index 0000000..5d1d3d8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/ParallelQueuedUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/Port.class b/org.eclipse.emf.refactor.comrel/bin/comrel/Port.class
new file mode 100644
index 0000000..2369a23
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/Port.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/PortMapping.class b/org.eclipse.emf.refactor.comrel/bin/comrel/PortMapping.class
new file mode 100644
index 0000000..88cf147
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/PortMapping.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/QueuedUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/QueuedUnit.class
new file mode 100644
index 0000000..79e58d3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/QueuedUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/RefactoringUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/RefactoringUnit.class
new file mode 100644
index 0000000..67ed7c8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/RefactoringUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SequentialUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SequentialUnit.class
new file mode 100644
index 0000000..17b6fd0
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SequentialUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureHelper.class
new file mode 100644
index 0000000..f154f78
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureUnit.class
new file mode 100644
index 0000000..a02bde2
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFeatureUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterHelper.class
new file mode 100644
index 0000000..193c16e
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterUnit.class
new file mode 100644
index 0000000..e43ab60
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleFilterUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleInputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleInputPort.class
new file mode 100644
index 0000000..d42da43
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleInputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleOutputPort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleOutputPort.class
new file mode 100644
index 0000000..9bc2057
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleOutputPort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePort.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePort.class
new file mode 100644
index 0000000..30822a2
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePort.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePortMapping.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePortMapping.class
new file mode 100644
index 0000000..83831dc
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SinglePortMapping.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/SingleQueuedUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleQueuedUnit.class
new file mode 100644
index 0000000..c697e48
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/SingleQueuedUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/TwicedQueuedUnit.class b/org.eclipse.emf.refactor.comrel/bin/comrel/TwicedQueuedUnit.class
new file mode 100644
index 0000000..2b3ead7
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/TwicedQueuedUnit.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFeatureHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFeatureHelper.class
new file mode 100644
index 0000000..8dc4bb3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFeatureHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFilterHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFilterHelper.class
new file mode 100644
index 0000000..19d6f20
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/IMultiFilterHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFeatureHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFeatureHelper.class
new file mode 100644
index 0000000..be5b427
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFeatureHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFilterHelper.class b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFilterHelper.class
new file mode 100644
index 0000000..150b206
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/extensions/ISingleFilterHelper.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/figures/InputPortFigure.class b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/InputPortFigure.class
new file mode 100644
index 0000000..83b6d94
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/InputPortFigure.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/figures/OutputPortFigure.class b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/OutputPortFigure.class
new file mode 100644
index 0000000..4b61820
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/OutputPortFigure.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/figures/PortMappingFigure.class b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/PortMappingFigure.class
new file mode 100644
index 0000000..174e981
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/figures/PortMappingFigure.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/AtomicUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/AtomicUnitImpl.class
new file mode 100644
index 0000000..8ee0e53
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/AtomicUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CartesianQueuedUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CartesianQueuedUnitImpl.class
new file mode 100644
index 0000000..a6c6bdc
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CartesianQueuedUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeRefactoringImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeRefactoringImpl.class
new file mode 100644
index 0000000..2d6699a
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeRefactoringImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeUnitImpl.class
new file mode 100644
index 0000000..d8a08f3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/CompositeUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelFactoryImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelFactoryImpl.class
new file mode 100644
index 0000000..19b3c72
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelFactoryImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelPackageImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelPackageImpl.class
new file mode 100644
index 0000000..7cc3fe3
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ComrelPackageImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionCheckImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionCheckImpl.class
new file mode 100644
index 0000000..57e6d3c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionCheckImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionalUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionalUnitImpl.class
new file mode 100644
index 0000000..51d89d8
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ConditionalUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureHelperImpl.class
new file mode 100644
index 0000000..0365689
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureUnitImpl.class
new file mode 100644
index 0000000..9fb2ffb
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FeatureUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterHelperImpl.class
new file mode 100644
index 0000000..79f0b06
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterUnitImpl.class
new file mode 100644
index 0000000..d52ee8d
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/FilterUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperImpl.class
new file mode 100644
index 0000000..303ef78
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperUnitImpl.class
new file mode 100644
index 0000000..6833123
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/HelperUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/InputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/InputPortImpl.class
new file mode 100644
index 0000000..8f7d075
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/InputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ModelRefactoringImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ModelRefactoringImpl.class
new file mode 100644
index 0000000..bd3cf67
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ModelRefactoringImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureHelperImpl.class
new file mode 100644
index 0000000..f9fe3aa
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureUnitImpl.class
new file mode 100644
index 0000000..3e9c813
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFeatureUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterHelperImpl.class
new file mode 100644
index 0000000..464273c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterUnitImpl.class
new file mode 100644
index 0000000..8bc699c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiFilterUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiInputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiInputPortImpl.class
new file mode 100644
index 0000000..a1b3f1b
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiInputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiOutputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiOutputPortImpl.class
new file mode 100644
index 0000000..c28b2cc
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiOutputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortImpl.class
new file mode 100644
index 0000000..4479a77
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortMappingImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortMappingImpl.class
new file mode 100644
index 0000000..0f9a7cf
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiPortMappingImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiSinglePortMappingImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiSinglePortMappingImpl.class
new file mode 100644
index 0000000..733c076
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/MultiSinglePortMappingImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/OutputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/OutputPortImpl.class
new file mode 100644
index 0000000..146be68
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/OutputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ParallelQueuedUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ParallelQueuedUnitImpl.class
new file mode 100644
index 0000000..04d7b50
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/ParallelQueuedUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortImpl.class
new file mode 100644
index 0000000..fe2eaca
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortMappingImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortMappingImpl.class
new file mode 100644
index 0000000..6bd4bc6
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/PortMappingImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/QueuedUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/QueuedUnitImpl.class
new file mode 100644
index 0000000..ad2da47
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/QueuedUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/RefactoringUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/RefactoringUnitImpl.class
new file mode 100644
index 0000000..e39c819
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/RefactoringUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SequentialUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SequentialUnitImpl.class
new file mode 100644
index 0000000..c75d838
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SequentialUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureHelperImpl.class
new file mode 100644
index 0000000..5bb449e
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureUnitImpl.class
new file mode 100644
index 0000000..090466f
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFeatureUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterHelperImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterHelperImpl.class
new file mode 100644
index 0000000..b854167
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterHelperImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterUnitImpl.class
new file mode 100644
index 0000000..54cd76c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleFilterUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleInputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleInputPortImpl.class
new file mode 100644
index 0000000..0077357
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleInputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleOutputPortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleOutputPortImpl.class
new file mode 100644
index 0000000..c3cfd39
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleOutputPortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortImpl.class
new file mode 100644
index 0000000..ebe1550
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortMappingImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortMappingImpl.class
new file mode 100644
index 0000000..dbad9fe
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SinglePortMappingImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleQueuedUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleQueuedUnitImpl.class
new file mode 100644
index 0000000..60bcb97
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/SingleQueuedUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/impl/TwicedQueuedUnitImpl.class b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/TwicedQueuedUnitImpl.class
new file mode 100644
index 0000000..856a2e5
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/impl/TwicedQueuedUnitImpl.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors$AttributedTextPane.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors$AttributedTextPane.class
new file mode 100644
index 0000000..cb5104a
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors$AttributedTextPane.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors.class
new file mode 100644
index 0000000..e369492
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/Colors.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory$1.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory$1.class
new file mode 100644
index 0000000..3a69d55
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory.class
new file mode 100644
index 0000000..99e50bb
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelAdapterFactory.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelSwitch.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelSwitch.class
new file mode 100644
index 0000000..8d72dd5
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelSwitch.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil$ModelRefactoringComparator.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil$ModelRefactoringComparator.class
new file mode 100644
index 0000000..f94d8e9
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil$ModelRefactoringComparator.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil.class
new file mode 100644
index 0000000..a2f423f
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ComrelUtil.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/ExtensionPointInfo.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ExtensionPointInfo.class
new file mode 100644
index 0000000..3cec393
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/ExtensionPointInfo.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.comrel/bin/comrel/util/RegistryUtil.class b/org.eclipse.emf.refactor.comrel/bin/comrel/util/RegistryUtil.class
new file mode 100644
index 0000000..bf7357e
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel/bin/comrel/util/RegistryUtil.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/bin/.gitignore b/org.eclipse.emf.refactor.refactoring.ocl/bin/.gitignore
similarity index 100%
rename from org.eclipse.emf.refactor.refactoring.papyrus/bin/.gitignore
rename to org.eclipse.emf.refactor.refactoring.ocl/bin/.gitignore
