diff --git a/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF
index 46b85c8..f853634 100644
--- a/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.refactoring/META-INF/MANIFEST.MF
@@ -5,6 +5,8 @@
 Bundle-Version: 0.7.0.qualifier
 Bundle-Activator: org.eclipse.emf.refactor.refactoring.Activator
 Require-Bundle: org.eclipse.ui,
+ org.eclipse.ui.ide;bundle-version="3.8.0",
+ org.eclipse.jdt.core;bundle-version="3.8.1",
  org.eclipse.core.runtime,
  org.eclipse.core.resources;bundle-version="3.8.0",
  org.eclipse.emf.ecore;bundle-version="2.8.1",
diff --git a/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd b/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd
index a7fd1fc..555e41e 100644
--- a/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd
+++ b/org.eclipse.emf.refactor.refactoring/schema/refactorings.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.emf.refactor.common.groupmanagement" xmlns="http://www.w3.org/2001/XMLSchema">
+<schema targetNamespace="org.eclipse.emf.refactor" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
          <meta.schema plugin="org.eclipse.emf.refactor" id="refactorings" name="org.eclipse.emf.refactor.refactorings"/>
@@ -76,7 +76,7 @@
                   
                </documentation>
                <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.common.core.IController"/>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.refactoring.interfaces.IController"/>
                </appinfo>
             </annotation>
          </attribute>
@@ -86,7 +86,7 @@
                   
                </documentation>
                <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.common.core.ui.IGuiHandler"/>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler"/>
                </appinfo>
             </annotation>
          </attribute>
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java
index af0c761..6590e49 100644
--- a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/Refactoring.java
@@ -10,14 +10,10 @@
  *******************************************************************************/
 package org.eclipse.emf.refactor.refactoring.core;
 
-import java.util.LinkedList;
-import java.util.List;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.emf.refactor.refactoring.interfaces.IController;
 import org.eclipse.emf.refactor.refactoring.interfaces.IGuiHandler;
-import org.eclipse.emf.refactor.refactoring.managers.RefactoringManager;
 
 /**
  * Base class of a specific emf model refactoring.
@@ -204,30 +200,5 @@
 		    return emfRefactoring.getName().compareTo(this.getName());	
 		}
 	}
-	
-	/**
-	 * Returns the emf model refactoring with the specified id.
-	 * @param id Id of the emf model refactoring to be returned.
-	 * @return Emf model refactoring with the specified id.
-	 */
-	public static Refactoring getById(String id){
-		for (Refactoring r : 
-						RefactoringManager.getInstance().getRefactorings()){
-			if(r.getId().equals(id)){
-				return r;
-			}
-		}
-		throw 
-			new IllegalArgumentException("Refactoring id does not exist!");
-	}
-
-	/**
-	 * Return a list of all registered emf model refactorings.
-	 * @return List of all registered emf model refactorings.
-	 */
-	public static List<Refactoring> getRefactorings(){
-		return new LinkedList<Refactoring>
-						(RefactoringManager.getInstance().getRefactorings());
-	}
 
 }
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java
index 237b431..5bd9a1d 100644
--- a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/core/RefactoringLoader.java
@@ -1,7 +1,6 @@
 package org.eclipse.emf.refactor.refactoring.core;
 
-import java.util.SortedSet;
-import java.util.TreeSet;
+import java.util.LinkedList;
 
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
@@ -15,8 +14,8 @@
 	 * the corresponding extension point servings.
 	 * @return Created list of Refactoring objects.
 	 */
-	public static SortedSet<Refactoring> loadRefactorings() {
-		SortedSet<Refactoring> r = new TreeSet<Refactoring>();
+	public static LinkedList<Refactoring> loadRefactorings() {
+		LinkedList<Refactoring> r = new LinkedList<Refactoring>();
 		IConfigurationElement[] rawRefactorings = 
 				Platform.getExtensionRegistry()
 					.getConfigurationElementsFor(ExtensionPointTags.EXTENSION_POINT_NAME);		
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/ProjectManager.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/ProjectManager.java
new file mode 100644
index 0000000..ed716f7
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/ProjectManager.java
@@ -0,0 +1,44 @@
+package org.eclipse.emf.refactor.refactoring.managers;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+public class ProjectManager {
+
+	public static IProject getActualProjectForPropertyPage(PropertyPage page) {
+		IProject project;
+		if (page.getElement() instanceof IJavaProject) {
+			project = ((IJavaProject) page.getElement()).getProject();
+		} else {
+			project = ((IProject) page.getElement());
+		}
+		return project;
+	}
+
+	@SuppressWarnings("finally")
+	public static IProject getActualProject() {
+		IProject actualProject = null;
+		IWorkbenchWindow window = PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow();
+		try {
+			IEditorPart editorPart = window.getActivePage().getActiveEditor();
+			if (editorPart != null) {
+				IEditorInput input = editorPart.getEditorInput();
+				if (input instanceof IFileEditorInput) {
+					IFileEditorInput fileInput = (IFileEditorInput) input;
+					actualProject = fileInput.getFile().getProject();
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			return actualProject;
+		}
+	}
+}
diff --git a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java
index eb133c6..acac46a 100644
--- a/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java
+++ b/org.eclipse.emf.refactor.refactoring/src/org/eclipse/emf/refactor/refactoring/managers/RefactoringManager.java
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package org.eclipse.emf.refactor.refactoring.managers;
 
-import java.util.SortedSet;
-import java.util.TreeSet;
+import java.util.LinkedList;
 
 import org.eclipse.emf.refactor.refactoring.core.Refactoring;
 import org.eclipse.emf.refactor.refactoring.core.RefactoringLoader;
@@ -31,14 +30,13 @@
 	/**
 	 * Set of all registered emf model refactorings. 
 	 */
-	private final SortedSet<Refactoring> refactorings = 
-									new TreeSet<Refactoring>();
+	private static LinkedList<Refactoring> refactorings = null;
 	
 	/**
 	 * Private constructor.
 	 */
 	private RefactoringManager() {	
-		this.refactorings.addAll(RefactoringLoader.loadRefactorings());
+		refactorings = RefactoringLoader.loadRefactorings();
 		System.out.println("RefactoringManager initialized!");
 	}
 	
@@ -57,8 +55,23 @@
 	 * Gets a set of all registered emf model refactorings. 
 	 * @return Set of all registered emf model refactorings. 
 	 */
-	public SortedSet<Refactoring> getRefactorings() {
+	public static LinkedList<Refactoring> getAllRefactorings() {
 		return refactorings;
 	}
 	
+	/**
+	 * Returns the emf model refactoring with the specified id.
+	 * @param id Id of the emf model refactoring to be returned.
+	 * @return Emf model refactoring with the specified id.
+	 */
+	public static Refactoring getById(String id){
+		for (Refactoring r : refactorings){
+			if(r.getId().equals(id)) {
+				return r;
+			}
+		}
+		throw 
+			new IllegalArgumentException("Refactoring id does not exist!");
+	}
+	
 }
