diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/SyntheticRoleBridgeMethodBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/SyntheticRoleBridgeMethodBinding.java
index d1471cd..9550c3b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/SyntheticRoleBridgeMethodBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/SyntheticRoleBridgeMethodBinding.java
@@ -17,10 +17,12 @@
 package org.eclipse.objectteams.otdt.internal.core.compiler.lookup;
 
 import static org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants.*;
+
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.codegen.CodeStream;
 import org.eclipse.jdt.internal.compiler.codegen.Opcodes;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.Scope;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
@@ -29,6 +31,7 @@
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
 import org.eclipse.objectteams.otdt.internal.core.compiler.model.MethodModel;
+import org.eclipse.objectteams.otdt.internal.core.compiler.util.TSuperHelper;
 import org.eclipse.objectteams.otdt.internal.core.compiler.util.TypeAnalyzer;
 
 public class SyntheticRoleBridgeMethodBinding extends SyntheticOTMethodBinding {
@@ -36,8 +39,9 @@
 	public static final char[] PRIVATE = "$private$".toCharArray(); //$NON-NLS-1$
 
 	public SyntheticRoleBridgeMethodBinding(SourceTypeBinding declaringRole, ReferenceBinding originalRole, MethodBinding targetMethod, int bridgeKind) {
-		super(declaringRole, AccPublic|AccSynthetic, targetMethod.selector, targetMethod.parameters, targetMethod.returnType);
+		super(declaringRole, AccPublic|AccSynthetic, targetMethod.selector, originalParameters(targetMethod), originalReturnType(targetMethod));
 		this.purpose = bridgeKind;
+		System.err.println(originalRole.toString());
 		switch (bridgeKind) {
 			case RoleMethodBridgeOuter:
 				// correction: this method sits in the team not the role:
@@ -53,15 +57,16 @@
 				break;
 			case RoleMethodBridgeInner:
 				// correction: add role as first parameter:
-				len = targetMethod.parameters.length;
+				len = this.parameters.length;
 				int offset = targetMethod.isStatic()?2:0;
-				this.parameters = new TypeBinding[len+1+offset];
-				this.parameters[0] = originalRole.getRealType();
+				TypeBinding[] newParameters = new TypeBinding[len+1+offset];
+				newParameters[0] = originalRole.getRealType();
 				if (offset > 0) {
-					this.parameters[1] = TypeBinding.INT;				// dummy int
-					this.parameters[2] = originalRole.enclosingType(); // team arg
+					newParameters[1] = TypeBinding.INT;				// dummy int
+					newParameters[2] = originalRole.enclosingType(); // team arg
 				}
-				System.arraycopy(targetMethod.parameters, 0, this.parameters, 1+offset, len);
+				System.arraycopy(this.parameters, 0, newParameters, 1+offset, len);
+				this.parameters = newParameters;
 				// correction: this bridge is static:
 				this.modifiers |= AccStatic;
 				// correction: generate the bridge method name:
@@ -76,6 +81,40 @@
 		this.index = methodId;
 	}
 
+	private static TypeBinding[] originalParameters(MethodBinding targetMethod) {
+		if (!TSuperHelper.isTSuper(targetMethod)) {
+			MethodBinding top = findTopMethod(targetMethod);
+			if (top != null)
+				return top.original().parameters;
+		}
+		return targetMethod.original().parameters;
+	}
+
+	private static TypeBinding originalReturnType(MethodBinding targetMethod) {
+		if (!TSuperHelper.isTSuper(targetMethod)) {
+			MethodBinding top = findTopMethod(targetMethod);
+			if (top != null)
+				return top.original().returnType;
+		}
+		return targetMethod.original().returnType;
+	}
+
+	static MethodBinding findTopMethod(MethodBinding targetMethod) {
+		while (targetMethod.copyInheritanceSrc != null)
+			targetMethod = targetMethod.copyInheritanceSrc;
+		tsupers: if (targetMethod.overriddenTSupers != null) {
+			for (int i = 0; i < targetMethod.overriddenTSupers.length; i++) {
+				MethodBinding cand = targetMethod.overriddenTSupers[i];
+				if (!(cand instanceof ParameterizedMethodBinding)) {
+					targetMethod = cand;
+					break tsupers;
+				}
+			}
+			if (targetMethod.overriddenTSupers.length > 0)
+				targetMethod = targetMethod.overriddenTSupers[0];
+		}
+		return targetMethod;
+	}
 	@Override
 	public void generateInstructions(CodeStream codeStream) {
 		TypeBinding[] arguments = this.parameters;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
index 7195ef5..57366a0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
@@ -1124,9 +1124,6 @@
 	    }
     	if (method.isPrivate()) {
     		newMethodDecl.binding.modifiers |= ExtraCompilerModifiers.AccLocallyUsed; // don't warn unused copied method
-    		MethodBinding synthBinding = SyntheticRoleBridgeMethodBinding.findOuterAccessor(targetRoleDecl.scope, targetRoleDecl.binding, newMethodDecl.binding);
-    		if (synthBinding != null)
-    			synthBinding.parameters[0] = srcRole.getRealType(); // manual weakening of bridge to copy-inherited method
     	}
 
 	    newMethodDecl.binding.copiedInContext = tgtTeam.enclosingType();
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/Java5.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/Java5.java
index 9c6df41..2c4664b 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/Java5.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/Java5.java
@@ -1322,22 +1322,22 @@
     public void testA12_genericRoleFeature16a() {
     	runConformTest(
     		new String[] {
-    	"TeamA12grf16_3.java",
-    			"public team class TeamA12grf16_3 extends TeamA12grf16_2<String> {\n" +
+    	"TeamA12grf16a_3.java",
+    			"public team class TeamA12grf16a_3 extends TeamA12grf16a_2<String> {\n" +
 				"   @Override\n" +
-				"	public class R playedBy TA12grf16 {\n" +
+				"	public class R playedBy TA12grf16a {\n" +
 				"		 test <- before test;\n" +
 				"   }\n" +
     			"   public static void main(String... args) {\n" +
-    			"       new TeamA12grf16_3().activate();\n" +
-    			"       System.out.print(new TA12grf16().test(\"K\"));" +
+    			"       new TeamA12grf16a_3().activate();\n" +
+    			"       System.out.print(new TA12grf16a().test(\"K\"));" +
     			"   }\n" +
     			"}\n",
-    	"TeamA12grf16_2.java",
-				"public team class TeamA12grf16_2<U> extends TeamA12grf16_1<U> {\n" +
+    	"TeamA12grf16a_2.java",
+				"public team class TeamA12grf16a_2<U> extends TeamA12grf16a_1<U> {\n" +
 				"}\n",
-    	"TeamA12grf16_1.java",
-    			"public team class TeamA12grf16_1<U> {\n" +
+    	"TeamA12grf16a_1.java",
+    			"public team class TeamA12grf16a_1<U> {\n" +
     			"	public class R {\n" +
 				"        private U test(U u) {\n" +
 				"            System.out.print(\"O\");\n" +
@@ -1345,8 +1345,8 @@
 				"        }\n" +
     			"   }\n" +
     			"}\n",
-    	"TA12grf16.java",
-    			"public class TA12grf16 {\n" +
+    	"TA12grf16a.java",
+    			"public class TA12grf16a {\n" +
     			"   protected String test(String u){ return u;}" +
     			"}\n"
     		},
@@ -1359,40 +1359,40 @@
     public void testA12_genericRoleFeature16f() {
     	runNegativeTest(
     		new String[] {
-    	"TeamA12grf16_3.java",
-    			"public team class TeamA12grf16_3 extends TeamA12grf16_2<String> {\n" +
+    	"TeamA12grf16f_3.java",
+    			"public team class TeamA12grf16f_3 extends TeamA12grf16f_2<String> {\n" +
     			"   public static void main(String... args) {\n" +
-    			"       new TeamA12grf16_3().activate();\n" +
-    			"       System.out.print(new TA12grf16().test(\"K\"));" +
+    			"       new TeamA12grf16f_3().activate();\n" +
+    			"       System.out.print(new TA12grf16f().test(\"K\"));" +
     			"   }\n" +
     			"}\n",
-    	"TeamA12grf16_2.java",
-				"public team class TeamA12grf16_2<U> extends TeamA12grf16_1<U> {\n" +
+    	"TeamA12grf16f_2.java",
+				"public team class TeamA12grf16f_2<U> extends TeamA12grf16f_1<U> {\n" +
 				"   @Override\n" +
-				"	public class R playedBy TA12grf16 {\n" +
+				"	public class R playedBy TA12grf16f {\n" +
 				"		 test <- before test;\n" +
 				"   }\n" +
 				"}\n",
-    	"TeamA12grf16_1.java",
-    			"public team class TeamA12grf16_1<U> {\n" +
+    	"TeamA12grf16f_1.java",
+    			"public team class TeamA12grf16f_1<U> {\n" +
     			"	public class R {\n" +
 				"        private U test(U u) {\n" +
 				"            return u;\n" +
 				"        }\n" +
     			"   }\n" +
     			"}\n",
-    	"TA12grf16.java",
-    			"public class TA12grf16 {\n" +
+    	"TA12grf16f.java",
+    			"public class TA12grf16f {\n" +
     			"   protected String test(String u){ return u;}" +
     			"}\n"
     		},
     		"----------\n" + 
-			"1. ERROR in TeamA12grf16_2.java (at line 4)\n" + 
+			"1. ERROR in TeamA12grf16f_2.java (at line 4)\n" + 
 			"	test <- before test;\n" + 
 			"	^^^^\n" + 
 			(this.weavingScheme == WeavingScheme.OTRE
 			? "Type mismatch: cannot convert from String to U\n"
-			: "The method test(U) in the type TeamA12grf16_2<U>.R is not applicable for the arguments (String)\n"
+			: "The method test(U) in the type TeamA12grf16f_2<U>.R is not applicable for the arguments (String)\n"
 			) +
 			"----------\n");
     }
