diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$1.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$1.class
new file mode 100644
index 0000000..26b6dc1
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$InternalRefactoringProcessor.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$InternalRefactoringProcessor.class
new file mode 100644
index 0000000..73fde75
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController$InternalRefactoringProcessor.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.class
new file mode 100644
index 0000000..a83d062
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.class
new file mode 100644
index 0000000..df578c1
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.class
new file mode 100644
index 0000000..eb98ed4
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest$1.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest$1.class
new file mode 100644
index 0000000..90be564
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.class
new file mode 100644
index 0000000..bed9b40
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.class
new file mode 100644
index 0000000..63316cd
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.class b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.class
new file mode 100644
index 0000000..8571b89
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/bin/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml b/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
index b920677..9bbbfda 100644
--- a/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
+++ b/org.eclipse.emf.refactor.refactorings.uml24/plugin.xml
@@ -44,6 +44,12 @@
       menulabel="Remove Empty Subclass" 
       namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML"/>
 <refactoring 
+      controller="org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass.RefactoringController" 
+      gui="org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass.RefactoringGuiHandler" 
+      id="org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass" 
+      menulabel="Remove Empty Superclass" 
+      namespaceUri="http://www.eclipse.org/uml2/4.0.0/UML"/>
+<refactoring 
       controller="org.eclipse.emf.refactor.refactorings.uml24.renameclass.RefactoringController" 
       gui="org.eclipse.emf.refactor.refactorings.uml24.renameclass.RefactoringGuiHandler" 
       id="org.eclipse.emf.refactor.refactorings.uml24.renameclass" 
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.java
new file mode 100644
index 0000000..77ef829
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringController.java
@@ -0,0 +1,226 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringController.javajet,v 1.3 2011/01/21 13:08:06 tarendt Exp $
+ */
+package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+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.emf.refactor.refactorings.uml24.UmlUtils;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Generalization;
+import org.eclipse.uml2.uml.Package;
+
+
+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() {
+				org.eclipse.uml2.uml.Class selectedEObject = 
+					(org.eclipse.uml2.uml.Class) dataManagement.
+							getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();
+				// execute: delete generalizations to selected class
+				List<Class> allClasses = UmlUtils.getAllClasses(selectedEObject.getModel());
+				for (Class cl : allClasses) {
+					if (cl.getSuperClasses().contains(selectedEObject)){
+						Generalization gen = cl.getGeneralization(selectedEObject);
+						cl.getGeneralizations().remove(gen);
+					}
+				}
+				// execute: delete selected class from owning package
+				Package p = selectedEObject.getPackage();
+				p.getPackagedElements().remove(selectedEObject);
+			}
+		};
+	}
+
+	/**
+	 * 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();
+			Class selectedEObject = 
+				(Class) dataManagement.getInPortByName(dataManagement.SELECTEDEOBJECT).getValue();
+			// test: the selected class must be owned by a package
+			String msg = "This refactoring can only be applied" +
+							" on classes which are owned by a package!";
+			if (selectedEObject.getPackage() == null) result.addFatalError(msg);
+			// test: the selected class must have at least one subclass
+			msg = "Class '" + selectedEObject.getName() + "' does not have any subclasses!";
+			if (! UmlUtils.hasSubclasses(selectedEObject)) result.addFatalError(msg);
+			// test: the selected class  must not own any attributes
+			msg = "Class '" + selectedEObject.getName() + "' owns at least one attribute!";
+			if (UmlUtils.hasAttributes(selectedEObject)) result.addFatalError(msg);
+			// test: the selected class  must not own any operations
+			msg = "Class '" + selectedEObject.getName() + "' owns at least one operation!";
+			if (UmlUtils.hasOperations(selectedEObject)) result.addFatalError(msg);
+			// test: the selected class must not have any superclasses
+			msg = "Class '" + selectedEObject.getName() + "' has at least one superclass!";
+			if (UmlUtils.hasSuperclasses(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not have any inner classes
+			msg = "Class '" + selectedEObject.getName() + "' has at least one inner class!";
+			if (UmlUtils.hasInnerClasses(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not have any outgoing associations
+			msg = "Class '" + selectedEObject.getName() + "' has at least one outgoing association!";
+			if (UmlUtils.hasOutgoingAssociations(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not have any incoming associations
+			msg = "Class '" + selectedEObject.getName() + "' has at least one incoming association!";
+			if (UmlUtils.hasIncomingAssociations(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not implement any interfaces
+			msg = "Class '" + selectedEObject.getName() + "' implements at least one interface!";
+			if (UmlUtils.implementsInterfaces(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not use any interfaces
+			msg = "Class '" + selectedEObject.getName() + "' uses at least one interface!";
+			if (UmlUtils.usesInterfaces(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not be used as attribute type
+			msg = "Class '" + selectedEObject.getName() +  "' is used as attribute type!";
+			if (UmlUtils.isUsedAsAttributeType(selectedEObject)) result.addFatalError(msg);
+			// test: the class must not be used as operation/parameter type
+			msg = "Class '" + selectedEObject.getName() + "' is used as operation/parameter type!";
+			if (UmlUtils.isUsedAsParameterType(selectedEObject)) result.addFatalError(msg);
+			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();
+				// no final checks
+				return result;
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.java
new file mode 100644
index 0000000..f4b2451
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringDataManagement.java
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringDataManagement.javajet,v 1.2 2011/01/21 13:08:06 tarendt Exp $
+ */
+ package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.core.Port;
+import org.eclipse.emf.refactor.refactoring.runtime.DataManagementAdapter;
+
+/**
+ * Class for specific data concerning a model refactoring.
+ * @generated
+ */
+public class RefactoringDataManagement extends DataManagementAdapter {
+
+	protected final String SELECTEDEOBJECT = "selectedEObject";
+
+	/**
+	 * 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<org.eclipse.uml2.uml.Class>
+				(SELECTEDEOBJECT, org.eclipse.uml2.uml.Class.class));		
+	}
+	
+	/**
+	 * @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((org.eclipse.uml2.uml.Class) selection.get(0));
+	}
+
+}
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.java
new file mode 100644
index 0000000..abae9a2
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringGuiHandler.java
@@ -0,0 +1,76 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringGuiHandler.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+ package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+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 emfRefactoring) {
+		this.parent = emfRefactoring;
+	}
+		
+	/**
+	 * @see org.eclipse.emf.refactor.common.core.ui.IGuiHandler#show()
+	 * @generated
+	 */
+	@Override
+	public RefactoringWizard show() {
+		return new org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass.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 org.eclipse.uml2.uml.Class) {
+					return true;
+				}
+			} 
+		}
+		return false;
+	}
+
+}	
+	
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.java
new file mode 100644
index 0000000..792ad15
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringTest.java
@@ -0,0 +1,97 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringTest.javajet,v 1.2 2011/03/16 16:14:21 tarendt Exp $
+ */
+ 
+package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.runtime.test.JUnitTestCaseAdapter;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+/**
+ * Class used for running individual JUnit test cases
+ * of the specific model refactoring.
+ * @generated
+ */
+@RunWith(value = Parameterized.class)
+public class RefactoringTest extends JUnitTestCaseAdapter {
+
+	/**
+	 * Number of test cases.
+	 * @generated
+	 */
+	private String number;
+
+	/**
+	 * Constructor implementation.
+	 * @param number Number of test cases.
+	 * @generated
+	 */
+	public RefactoringTest(String number) throws IOException {
+		super("de.unimarburg.swt.refactorings.uml.removeemptysuperclass",
+			"uml",
+			new File(".").getCanonicalPath(),
+			new Refactoring(null, "", "http://www.eclipse.org/uml2/3.0.0/UML", new RefactoringGuiHandler(), new RefactoringController()));
+		register(UMLPackage.eINSTANCE);
+		this.number = number;
+	}
+	
+	@Parameters
+	public static Collection<Object[]> data() {
+		List<String> testNumbers = getTestNumbers();
+		Object[][] data = new Object[testNumbers.size()][1];
+		for (int i = 0; i < testNumbers.size(); i++) {
+			data[i][0] = testNumbers.get(i);
+		}
+		return Arrays.asList(data);
+	}
+	
+	private static List<String> getTestNumbers() {
+		List<String> numbers = new ArrayList<String>();
+		try {
+			String pathPrefix = new File(".").getCanonicalPath() + "/tests/" + "de.unimarburg.swt.refactorings.uml.removeemptysuperclass";
+			File testCaseDir = new File(pathPrefix,"/");
+			FilenameFilter filter = new FilenameFilter() {
+				public boolean accept(File dir, String name) {
+					return name.startsWith("test_");
+				}
+			};
+			String[] children = testCaseDir.list(filter);
+			if (children != null) {
+				for (String child : children) {
+					numbers.add(
+							child.substring(
+									child.indexOf('_') + 1));
+					}
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		return numbers;
+	}
+
+	/**
+	 * Runs the test.
+	 */	
+	@Test
+	public void test() {
+		System.out.println("running test test_" + number);
+		executeTestCase(number);
+	}	
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.java
new file mode 100644
index 0000000..20df562
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizard.java
@@ -0,0 +1,40 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringWizard.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+ package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+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.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.java b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.java
new file mode 100644
index 0000000..db5f5d5
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactorings.uml24/src/org/eclipse/emf/refactor/refactorings/uml24/removeemptysuperclass/RefactoringWizardPage.java
@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id: RefactoringWizardPage.javajet,v 1.1 2010/07/15 13:08:44 tarendt Exp $
+ */
+ package org.eclipse.emf.refactor.refactorings.uml24.removeemptysuperclass;
+
+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.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * 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;
+	
+
+	/**
+	 * 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
+	 */
+	@Override
+	public void handleEvent(Event event) {		
+		getWizard().getContainer().updateButtons();	
+	}
+	
+	/**
+	 * @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;
+		composite.setLayout(gl);	
+		
+		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
