diff --git a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/PhantomTypeAdaptor.java b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/PhantomTypeAdaptor.java
index fe06b31..6c3e2be 100644
--- a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/PhantomTypeAdaptor.java
+++ b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/PhantomTypeAdaptor.java
@@ -15,7 +15,8 @@
  * {@link PhantomType}, that would otherwise throw an
  * <code>UnsupportedOperationException</code>. The methods are used in
  * {@link RenameTypeAdaptor} to search for <code>PhantomType</code> references
- * with the java search. This team should be removed if the necessary methods
+ * with the java search. 
+ * FIXME: This team should be removed if the necessary methods
  * are implemented in the original {@link PhantomType}.
  * 
  * @author Johannes Gebauer
diff --git a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
index dc25779..4ca69ba 100644
--- a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
+++ b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/adaptor/pullup/PullUpAdaptor.java
@@ -65,7 +65,7 @@
 @SuppressWarnings({ "restriction", "decapsulation" }) // private base classes
 public team class PullUpAdaptor {
 
-	public team class PullUpRefactoringProcessorRole playedBy PullUpRefactoringProcessor {
+	public class PullUpRefactoringProcessorRole playedBy PullUpRefactoringProcessor {
 		
 		@SuppressWarnings("rawtypes")
 		void setFCachedSkippedSuperTypes(Set fCachedSkippedSuperTypes) -> set Set fCachedSkippedSuperTypes;
@@ -74,19 +74,7 @@
 		IMember[] getMembersToDelete(IProgressMonitor monitor) -> IMember[] getMembersToDelete(IProgressMonitor monitor);
 		IMethod[] getFDeletedMethods() -> get IMethod[] fDeletedMethods;
 		IMember[] getFMembersToMove() -> get IMember[] fMembersToMove;
-
-		/**
-		 * Pure Gateway.
-		 */
-		public class PullUpAstNodeMapper playedBy PullUpAstNodeMapper{
-			@SuppressWarnings("decapsulation")
-			protected PullUpAstNodeMapper(final CompilationUnitRewrite sourceRewriter, final CompilationUnitRewrite targetRewriter, final ASTRewrite rewrite, final IType type, final TypeVariableMaplet[] mapping, final IMethodBinding enclosing) {
-				base(sourceRewriter, targetRewriter,
-						rewrite, type, mapping,
-						enclosing);
-			}
-		}
-		
+			
 		private ITypeHierarchy _destinationOTTypeHierachy;
 
 		// callouts
diff --git a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/util/RefactoringUtil.java b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/util/RefactoringUtil.java
index e80a869..20832c2 100644
--- a/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/util/RefactoringUtil.java
+++ b/plugins/org.eclipse.objectteams.otdt.refactoring/src/org/eclipse/objectteams/otdt/internal/refactoring/util/RefactoringUtil.java
@@ -148,52 +148,6 @@
 		}
 		return null;
 	}
-
-	/**
-	 * Returns all role types contained in the given project.
-	 * 
-	 * @param thisProject
-	 *            the given project
-	 * @return an array containing all role types of the given project
-	 * @throws JavaModelException
-	 * 
-	 * @deprecated use getAllRoleClasses(IJavaProject, IProgressMonitor) instead
-	 */
-	public static IType[] getAllRoleTypes(IJavaProject thisProject) throws JavaModelException {
-		List<IType> roles = new ArrayList<IType>();
-		IPackageFragment[] packages = thisProject.getPackageFragments();
-
-		for (int idx = 0; idx < packages.length; idx++) {
-			if (packages[idx].getKind() != IPackageFragmentRoot.K_BINARY) {
-				// get all compilation units in this package
-				ICompilationUnit[] compUnits = packages[idx].getCompilationUnits();
-				if (compUnits != null && compUnits.length != 0) {
-					for (int idy = 0; idy < compUnits.length; idy++) {
-						// get all top-level types declared
-						// in this compilation unit
-						IType[] types = compUnits[idy].getTypes();
-						if (types != null && types.length != 0) {
-							for (int idz = 0; idz < types.length; idz++) {
-								// add role files
-								if (TypeHelper.isRole(types[idz].getFlags())) {
-									roles.add(types[idz]);
-								}
-								if (Modifier.isTeam(types[idz].getFlags())) {
-									// get all roles of this team
-									IType[] rolesOfTeam = types[idz].getTypes();
-									for (int roleNr = 0; roleNr < rolesOfTeam.length; roleNr++) {
-										roles.add(rolesOfTeam[roleNr]);
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-		return roles.toArray(new IType[roles.size()]);
-	}
-
 	/**
 	 * Returns all role types contained in the given project and related
 	 * projects.
@@ -914,6 +868,7 @@
 		// get all subtypes of focus type
 		IType[] subTypes = focusTypeHierarchy.getAllSubtypes(focusType);
 		// get all role types in this project
+		// FIXME(SH): should replace gettingAllRoles with s.t. like RefactoringUtil.getAllRolesForBase(focusType);
 		IOTType[] roleTypes = RefactoringUtil.getAllRoleClasses(compUnit.getJavaProject(), pm);
 		// get all base types
 		ArrayList<IType> baseTypes = RefactoringUtil.getAllDeclaredBaseTypes(roleTypes);
@@ -1046,6 +1001,7 @@
 		// get all subtypes of focus type
 		IType[] subTypes = completeHierarchy.getAllSubtypes(focusType);
 		// get all role types in this project
+		// FIXME(SH): should replace gettingAllRoles with s.t. like RefactoringUtil.getAllRolesForBase(focusType);
 		IOTType[] roleTypes = RefactoringUtil.getAllRoleClasses(compUnit.getJavaProject(), pm);
 		// get all base types
 		ArrayList<IType> baseTypes = RefactoringUtil.getAllDeclaredBaseTypes(roleTypes);
