diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/.classpath
new file mode 100644
index 0000000..3889ea2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/OTRE"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/.project
new file mode 100644
index 0000000..ac8a149
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.objectteams.otdt.test.builder</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f8a917f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Builder Plug-in
+Bundle-SymbolicName: org.eclipse.objectteams.otdt.test.builder;singleton:=true
+Bundle-Version: 1.3.0
+Bundle-ClassPath: otdt-buildertests.jar
+Bundle-Activator: org.eclipse.objectteams.otdt.test.builder.BuilderTestPlugin
+Bundle-Vendor: objectteams.org
+Export-Package: org.eclipse.objectteams.otdt.test.builder
+Require-Bundle: org.junit,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.jdt.core.tests.builder,
+ org.eclipse.objectteams.otdt,
+ org.eclipse.objectteams.otdt.compiler.adaptor,
+ org.eclipse.jdt.core.tests.compiler,
+ org.eclipse.jdt.core,
+ org.eclipse.test.performance,
+ org.eclipse.objectteams.otdt.tests
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/build.properties
new file mode 100644
index 0000000..244c7b9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/build.properties
@@ -0,0 +1,8 @@
+source.otdt-buildertests.jar = src/
+output.otdt-buildertests.jar = bin/
+bin.includes = plugin.xml,\
+               otdt-buildertests.jar,\
+               test.xml,\
+               JCL/,\
+               workspace/,\
+               META-INF/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/plugin.xml
new file mode 100644
index 0000000..dbc928d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+    
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/AllTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/AllTests.java
new file mode 100644
index 0000000..d1a6577
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/AllTests.java
@@ -0,0 +1,39 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for org.eclipse.objectteams.otdt.test.builder"); //$NON-NLS-1$
+		//$JUnit-BEGIN$
+		suite.addTest(IncrementalTests.suite());
+		suite.addTest(CompilationOrderTests.suite());
+		suite.addTest(OTEquinoxBuilderTests.suite());
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/BuilderTestPlugin.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/BuilderTestPlugin.java
new file mode 100644
index 0000000..4421945
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/BuilderTestPlugin.java
@@ -0,0 +1,70 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class BuilderTestPlugin extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.objectteams.otdt.test.builder"; //$NON-NLS-1$
+
+	// The shared instance
+	private static BuilderTestPlugin plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public BuilderTestPlugin() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static BuilderTestPlugin getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/CompilationOrderTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/CompilationOrderTests.java
new file mode 100644
index 0000000..ab4d1e5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/CompilationOrderTests.java
@@ -0,0 +1,112 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import junit.framework.Test;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.eclipse.jdt.core.tests.builder.Problem;
+import org.eclipse.jdt.core.tests.util.Util;
+
+
+public class CompilationOrderTests extends OTBuilderTests {
+
+	public static Test suite() {
+		return buildTestSuite(CompilationOrderTests.class);
+	}
+
+	public CompilationOrderTests(String name) {
+		super(name);
+	}
+	
+	/* In batch-mode this causes a problem, 
+	 * compilation order is different in workbench mode, though
+     * (depends on class names?!).
+	 * Original jacks test is removed.
+	 */
+	@SuppressWarnings("nls")
+	public void test177otjd5f()  throws JavaModelException {
+		System.out.println("***** test177otjd5f() *****");
+		IPath projectPath = env.addProject("Project", "1.5"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "ATeam",
+				"package p;	\n"+ 
+		"public team class ATeam {	protected class R implements IConfined {} public IConfined getR() { return new R(); } }");
+
+		env.addClass(root, "p", "M", 
+			"package p;	\n"+ 
+			"public class M {\n"+
+			"   @SuppressWarnings(\"unused\")\n"+
+			"   void foo() {\n"+
+			"       final ATeam t = new ATeam();\n"+
+			"       IConfined<@t> ic = t.getR();\n"+
+			"   }\n"+
+			"}");
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+	}
+
+	/* (TODO(SH): test doesn't really fit into this class).
+	 * Witness for an NPE in ExplicitConstructorCall.resolve():
+	 * If o.o.Team cannot be found, receiverType could be null!
+	 */
+	public void testMissingOTRE() throws JavaModelException {
+		System.out.println("***** testMissingOTRE() *****");
+		IPath projectPath = env.addProject("Project", "1.5"); 
+		// don't abort when detecting the build path error
+		// (otherwise other errors would be expunged).
+		env.getJavaProject(projectPath).setOption(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH, JavaCore.ERROR);
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		// don't: env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		IPath ateam = env.addClass(root, "p", "ATeam",
+				"package p;	\n"+ 
+		"public team class ATeam {	ATeam() { super(); } }");
+
+		fullBuild(projectPath);
+		
+		expectingProblemsFor(ateam);
+		expectingOnlySpecificProblemsFor(ateam, 
+				new Problem[] {
+					new Problem("", "The type org.objectteams.Team cannot be resolved. It is indirectly referenced from required .class files", ateam, 30, 35, CategorizedProblem.CAT_BUILDPATH, IMarker.SEVERITY_ERROR),
+					new Problem("", "The constructor Team() is undefined", ateam, 48,56, CategorizedProblem.CAT_MEMBER, IMarker.SEVERITY_ERROR)
+				});
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/IncrementalTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/IncrementalTests.java
new file mode 100644
index 0000000..db547ae
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/IncrementalTests.java
@@ -0,0 +1,872 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import junit.framework.Test;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.eclipse.jdt.core.tests.builder.Problem;
+import org.eclipse.jdt.core.tests.util.Util;
+
+/**
+ * This test class tests incremental compilation of teams and roles.
+ */
+@SuppressWarnings("nls")  
+public class IncrementalTests extends OTBuilderTests {
+    	
+    
+	public IncrementalTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return buildTestSuite(IncrementalTests.class);
+	}
+	
+	/*
+	 */
+	public void testRemoveTeamType() throws JavaModelException {
+		System.out.println("***** testRemoveTeamType() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+ 
+			"public team class AA {	}");
+			
+
+		IPath pathToAB = env.addClass(root, "p.AA", "R", 
+			"team package p.AA;	\n"+ 
+			"   protected class R {}");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Remove team AA */
+		env.removeClass(env.getPackagePath(root, "p"), "AA");
+
+		/* build must detect, that R - although unchanged - becomes invalid. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToAB);
+		expectingSpecificProblemFor(pathToAB, new Problem("", "Enclosing team p.AA not found for role file R (OTJLD 1.2.5(c)).", pathToAB, 13, 17, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); 
+		
+		/* Restore team AA */
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+ 
+				"public team class AA {}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	/*
+	 */
+	public void testRemoveRoleType() throws JavaModelException {
+		System.out.println("***** testRemoveRoleType() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   protected class RA {}}");
+
+		IPath pathToAB = env.addClass(root, "p", "AB",
+			"package p;	\n"+
+			"public team class AB extends AA {"+
+			"   protected class RB extends RA {} }");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Remove role AA.RA */
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {}");
+
+		/* build must detect, that AB - although unchanged - becomes invalid. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToAB);
+		expectingSpecificProblemFor(pathToAB, new Problem("", "RA cannot be resolved to a type", pathToAB, 75, 77, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); 
+		
+		/* Restore role AA.RA */
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   public class RA {}}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	public void testRemoveRoleFile() throws JavaModelException {
+		System.out.println("***** testRemoveRoleFile() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "Outer",
+			"package p;	\n"+
+			"public team class Outer {}");
+		IPath pathToNested= env.addClass(root, "p/Outer", "Nested",
+			"team package p.Outer;\n"+
+			"protected team class Nested {}");
+
+		IPath pathToOuterSub = env.addClass(root, "p", "OuterSub",
+			"package p;	\n"+
+			"public team class OuterSub extends Outer {\n"+
+			"   Nested aRole;\n"+
+			"}");
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Remove role Outer.Nested */
+		env.removeFile(pathToNested);
+
+		/* build must detect, that AB - although unchanged - becomes invalid -- but no further errors/exceptions */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToOuterSub);
+		expectingSpecificProblemFor(pathToOuterSub, new Problem("", "Nested cannot be resolved to a type", pathToOuterSub, 58, 64, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); 
+		
+	}
+	/*
+	 */
+	public void testRemoveRoleMethod() throws JavaModelException {
+		System.out.println("***** testRemoveRoleMethod() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   public class RA { \n"+
+			"       public void foo() {}\n"+
+			"}}");
+
+		env.addClass(root, "p", "AB",
+			"package p;	\n"+
+			"public team class AB extends AA {"+
+			"   protected class RB extends RA {} }");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Remove role method AA.RA.foo */
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   public class RA {}}");
+
+		/* add a class referencing AB.RA */
+		IPath pathToM = env.addClass(root, "p", "M",
+				"package p;	\n"+
+				"public class M {	\n"+
+				"   void test() {\n"+
+				"   new AB().new RA().foo();\n"+
+				"}}");
+
+		/* build must detect, that the use of AB - although AB is unchanged - becomes invalid. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToM);
+		expectingSpecificProblemFor(pathToM, new Problem("", "The method foo() is undefined for the type RA<@tthis[AB]>", pathToM, 68, 71, CategorizedProblem.CAT_MEMBER, IMarker.SEVERITY_ERROR)); 
+
+		/* Restore method AA.RA.foo */
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+ 
+				"public team class AA {	\n"+
+				"   public class RA { \n"+
+				"       public void foo() {}\n"+
+				"}}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	
+	/*
+	 */
+	public void testModifyTSuperRole1() throws JavaModelException {
+		System.out.println("***** testModifyTSuperRole1() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, ""); 
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src"); 
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   protected class R {\n" +
+			"       void bar() { }\n"+
+			"}}");
+
+		IPath pathToAB = env.addClass(root, "p", "AB",
+			"package p;	\n"+
+			"public team class AB extends AA {\n"+
+			"   protected class R {\n"+
+			"       void foo() { this.bar(); }\n"+
+			"} }");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Remove method AA.R.bar() */
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {\n" +
+			"   protected class R {}\n" +
+			"}");
+
+		/* build must detect, that AB - although unchanged - becomes invalid through a self-call. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToAB);
+		expectingSpecificProblemFor(pathToAB, new Problem("", "The method bar() is undefined for the type AB.R", pathToAB, 94, 97, CategorizedProblem.CAT_MEMBER, IMarker.SEVERITY_ERROR)); 
+
+		/* Restore method AA.R.bar */
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   protected class R {\n" +
+				"       void bar() { }\n"+
+				"}}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	
+	/*
+	 * The body of a tsuper role is modified.
+	 */
+	public void testModifyTSuperRole2() throws Exception {
+		System.out.println("***** testModifyTSuperRole2() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, ""); 
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src"); 
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA", 
+			"package p;	\n"+ 
+			"public team class AA {	\n"+ 
+			"   protected class R {\n" +
+			"       String bar() { return \"NOK\"; }\n"+
+			"}}");
+
+		env.addClass(root, "p", "AB",
+			"package p;	\n"+ 
+			"public team class AB extends AA {\n"+
+			"   protected class R {\n"+
+			"       protected String foo() { return this.bar(); }\n"+ 
+			"   }\n"+ 
+			"   public static String test() {\n"+ 
+			"      return new AB().new R().foo();\n"+
+			"   }\n"+
+			"}");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Change method R.bar() */
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+ 
+			"public team class AA {\n" + 
+			"   protected class R {\n" + 
+			"       String bar() { return \"OK\"; }\n"+
+			"}}");
+
+		/* build must achieve that AB - although unchanged - behaves differently. */
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+		
+		IJavaProject project = JavaCore.create(env.getProject("Project"));
+		OTLaunchEnvironment launcher = new OTLaunchEnvironment(
+				env.getWorkspaceRootPath(),
+				project.getOutputLocation());
+		Object result = launcher.launch("p.AB", "test");
+		assertEquals("OK", result);
+		// cleanup:
+		launcher = null;
+		result = null;
+		System.gc();
+	}
+	
+	/*
+	 * The body of a tsuper role is modified -- three levels.
+	 */
+	public void testModifyTSuperRole3() throws Exception {
+		System.out.println("***** testModifyTSuperRole3() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   protected class R {\n" +
+			"       String bar() { \n" +
+			"          return \"NOK\";\n"+
+			"       }\n"+
+			"}}");
+
+		env.addClass(root, "p", "AB", 
+				"package p;	\n"+
+				"public team class AB extends AA {}");
+		
+		env.addClass(root, "p", "AC",
+			"package p;	\n"+
+			"public team class AC extends AB {\n"+
+			"   protected class R {\n"+
+			"       protected String foo() { return this.bar(); }\n"+
+			"   }\n"+
+			"   public static String test() {\n"+
+			"      return new AC().new R().foo();\n"+
+			"   }\n"+
+			"}");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* Change method R.bar() */
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {\n" +
+			"   protected class R {\n" +
+			"       String bar() { return \"OK\"; }\n"+
+			"}}");
+
+		/* build must achieve that AB - although unchanged - behaves differently. */
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+		
+		IJavaProject project = JavaCore.create(env.getProject("Project"));
+		OTLaunchEnvironment launcher = new OTLaunchEnvironment(
+				env.getWorkspaceRootPath(),
+				project.getOutputLocation());
+		Object result = launcher.launch("p.AC", "test");
+		assertEquals("OK", result);
+// cleanup:
+		launcher = null;
+		result = null;
+		System.gc();
+	}
+
+	/** A playedBy declaration is added to a super role file.
+	 *  Witness for NPE in RoleModel.getBaseclassAttributename. 
+	 */
+	public void testModifySuperRole1() throws JavaModelException {
+		System.out.println("***** testModifySuperRole1() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, ""); 
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src"); 
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"}");
+
+		env.addClass(root, "p/AA", "R1",
+			"team package p.AA;\n"+
+			"protected class R1 {\n"+
+			"       void foo() { }\n"+
+			"}");
+
+		env.addClass(root, "p/AA", "R2",
+			"team package p.AA;\n"+
+			"protected class R2 extends R1 {\n"+
+			"       void bar() { this.foo(); }\n"+
+			"}");
+
+		env.addClass(root, "p", "B",
+			"package p;\n"+
+			"public class B {\n"+
+			"       void snafu() {}\n"+
+			"}");
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* add a playedBy declaration */
+		env.addClass(root, "p/AA", "R1",
+			"team package p.AA;\n"+
+			"protected class R1 playedBy B {\n"+
+			"       void foo() { }\n"+
+			"}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	
+	/** 
+	 * A sibling role is modified causing a binary role to fail generating callins. 
+	 */
+	public void testModifySiblingRole1() throws JavaModelException {
+		System.out.println("***** testModifySiblingRole1() *****");
+		IPath projectPath = env.addProject("Project"); 
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, ""); 
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src"); 
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "B",
+			"package p;\n"+
+			"public class B {\n"+
+			"       void snafu() {}\n"+
+		"}");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"}");
+
+		env.addClass(root, "p/AA", "R1",
+			"team package p.AA;\n"+
+			"protected class R1 playedBy B {\n"+
+			"       protected void foo() { }\n"+
+			"       foo <- after snafu;\n"+
+			"}");
+
+		env.addClass(root, "p/AA", "R2",
+			"team package p.AA;\n"+
+			"protected class R2 {\n"+
+			"       void bar() { new R1(new B()).foo(); }\n"+
+			"}");
+
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* change the method */
+		env.addClass(root, "p/AA", "R2",
+			"team package p.AA;\n"+
+			"protected class R2 {\n"+
+			"       void bar() {  }\n"+
+			"}");
+
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	
+	/*
+	 * The team with a role file is modified
+	 */
+	public void testModifyTeam1() throws Exception {
+		System.out.println("***** testModifyTeam1() *****");
+		IPath projectPath = env.addProject("Project", "1.5");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide
+		env.removePackageFragmentRoot(projectPath, ""); 
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "B", 
+				"package p;	\n"+   
+				"public class B {	\n"+  
+				"    String bar() { return \"NOK\"; }\n"+
+				"}");
+
+		env.addClass(root, "p", "AA", 
+			"package p;	\n"+   
+			"public team class AA {	\n"+  
+			"   public static String test() {\n"+
+			"        new AA();\n"+
+			"        return new B().bar();\n"+
+			"   }\n"+
+			"}");
+
+		env.addClass(root, "p.AA", "R",
+			"team package p.AA;	\n"+
+			"protected class R playedBy B {\n"+
+			"   @SuppressWarnings(\"basecall\")\n"+
+			"   callin String foo() { return \"OK\"; }\n"+
+			"   foo <- replace bar;\n"+  
+			"}"); 
+
+
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		/* add constructor */
+
+		env.addClass(root, "p", "AA", 
+			"package p;	\n"+   
+			"public team class AA {	\n"+  
+			"   public AA() { this.activate(); }\n"+
+			"   public static String test() {\n"+
+			"        new AA();\n"+
+			"        return new B().bar();\n"+
+			"   }\n"+
+			"}");
+
+		/* build must achieve that R - although unchanged - is compiled into AA. */
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+		
+		IJavaProject project = JavaCore.create(env.getProject("Project"));
+		OTLaunchEnvironment launcher = new OTLaunchEnvironment(
+				env.getWorkspaceRootPath(),
+				project.getOutputLocation(),
+				true /* useTransformer */);
+		Object result = launcher.launch("p.AA", "test");
+		assertEquals("OK", result);
+		// cleanup:
+		launcher = null;
+		result = null;
+		System.gc();
+	}
+	
+	public void testAddRoFiToCompiledTeam()
+		throws JavaModelException
+	{
+		System.out.println("***** testAddRoFiToCompiledTeam() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   protected class R {\n" +
+			"       String bar() { \n" +
+			"          return \"NOK\";\n"+
+			"       }\n"+
+			"}}");
+		
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		env.addClass(root, "p/AA", "ExtRole",
+				"team package p.AA;	\n"+
+				"public class ExtRole {	\n"+
+				"    public String ok() { \n" +
+				"       return \"NOK\";\n"+
+				"    }\n"+
+				"}");
+		
+		/* build must achieve that AA - although unchanged - is recompiled. */
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+
+		// same as above, just modify the contents:
+		IPath packagePath = root.append("p/AA");
+		env.addClass(packagePath, "ExtRole",
+				"team package p.AA;	\n"+
+				"public class ExtRole {	\n"+
+				"    public String ok() { \n" +
+				"       return \"OK\";\n"+
+				"    }\n"+
+				"}");
+		
+		/* build must(?) achieve that AA - although unchanged - is recompiled. */
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	
+	public void testAddRoFiToBrokenTeam()
+		throws JavaModelException
+	{
+		System.out.println("***** testAddRoFiToBrokenTeam() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+	
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+	
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+	
+		// a broken team:
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   int abstract foo;// syntax error\n"+
+			"}");
+		
+		fullBuild(projectPath);
+		expectingProblemsFor(root);
+	
+		// add a role file:
+		env.addClass(root, "p/AA", "ExtRole",
+				"team package p.AA;	\n"+
+				"public class ExtRole {	\n"+
+				"    public String ok() { \n" +
+				"       return \"NOK\";\n"+
+				"    }\n"+
+				"}");
+		
+		/* build must achieve that errors in AA are detected again. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(root);
+		
+		/* also break role file: */
+		IPath rofi = env.addClass(root, "p/AA", "ExtRole",
+				"team package p.AA;	\n"+
+				"public class ExtRole {	\n"+
+				"    public String ok { // error \n" +
+				"       return \"NOK\";\n"+
+				"    }\n"+
+				"}");
+
+		/* now everything is broken. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(root);
+	
+		// correct the syntax error:
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   int foo() { return 0; }\n"+
+				"}");
+
+		/* build must detect that ExtRole still has an error. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(rofi);
+	}
+	
+	public void testBreakTeamWithRoFi()
+		throws JavaModelException
+	{
+		System.out.println("***** testBreakTeamWithRoFi() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+	
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+	
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+	
+		// team and role w/o errors:
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"    public void nop() { } \n" +
+			"}");
+
+		env.addClass(root, "p/AA", "ExtRole",
+				"team package p.AA;	\n"+
+				"public class ExtRole {	\n"+
+				"    public String ok() { \n" +
+				"       return \"OK\";\n"+
+				"    }\n"+
+				"}");
+		
+		fullBuild(projectPath);
+		expectingNoProblems();
+	
+		// introduce an error to the team:
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   int abstract nop();\n"+
+				"}");
+
+		/* build must achieve that AA - although unchanged - is recompiled. */
+		incrementalBuild(projectPath);
+		expectingProblemsFor(root);
+	
+	}
+
+	public void testRoFiExtendsInline()
+		throws JavaModelException
+	{
+		System.out.println("***** testRoFiExtendsInline() *****");
+		IPath projectPath = env.addProject("Project");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p", "AA",
+			"package p;	\n"+
+			"public team class AA {	\n"+
+			"   protected team class R {\n" +
+			"       String bar() { \n" +
+			"          return \"NOK\";\n"+
+			"       }\n"+
+			"}}");
+		// Note: declaring R as a nested team requires to process the predifined roles,
+		//       which caused a StackOverflowError previously.
+		
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		env.addClass(root, "p/AA", "ExtRole",
+				"team package p.AA;	\n"+
+				"public team class ExtRole extends R {\n"+
+				"    public String ok() { \n" +
+				"       return bar();\n"+
+				"    }\n"+
+				"}");
+		
+		// still OK.
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+
+		// same as above, just modify the contents:
+		env.addClass(root, "p", "AA",
+				"package p;	\n"+
+				"public team class AA {	\n"+
+				"   protected team class R {\n" +
+				"       String bar() { \n" +
+				"          return \"OK\";\n"+
+				"       }\n"+
+				"}}");
+		
+		// no reason why this should find problems.
+		incrementalBuild(projectPath);
+		expectingNoProblems();
+	}
+	// see http://trac.objectteams.org/ot/ticket/89
+	public void testRemoveBoundBaseMethod() 	
+			throws JavaModelException
+	{
+		System.out.println("***** testRemoveBoundBaseMethod() *****");
+		IPath projectPath = env.addProject("Project", "1.5");
+		env.addExternalJars(projectPath, Util.getJavaClassLibs());
+		env.addExternalJar(projectPath, OTRE_JAR_PATH);
+
+		// remove old package fragment root so that names don't collide 
+		env.removePackageFragmentRoot(projectPath, "");
+
+		IPath root = env.addPackageFragmentRoot(projectPath, "src");
+		env.setOutputFolder(projectPath, "bin");
+
+		env.addClass(root, "p0", "Base",
+			"package p0;	\n"+
+			"public class Base {	\n"+
+			"   public void foo() {}\n"+
+			"}");
+		IPath pathToT1= env.addClass(root, "p", "T1",
+				"package p;	\n"+
+				"import base p0.Base;\n"+
+				"public team class T1 {	\n"+
+				"   protected class R playedBy Base {\n" +
+				"       void bar() { } \n" +
+				"       bar <- after foo;\n"+
+				"   }\n"+
+				"}");
+		
+		fullBuild(projectPath);
+		expectingNoProblems();
+
+		// remove foo():
+		env.addClass(root, "p0", "Base",
+				"package p0;	\n"+
+				"public class Base {	\n"+
+				"}");
+
+		env.addClass(root, "p", "T2",
+				"package p;	\n"+
+				"public team class T2 extends T1 {}");
+		
+		// must detect, that callin binding in T1 is now invalid
+		incrementalBuild(projectPath);
+		expectingProblemsFor(pathToT1);
+		expectingSpecificProblemFor(pathToT1, new Problem("", "No method foo found in type p0.Base to resolve method designator (OTJLD 4.1(c)).", pathToT1, 137, 140, CategorizedProblem.CAT_MEMBER, IMarker.SEVERITY_ERROR)); 
+
+		// restore:
+		env.addClass(root, "p0", "Base",
+				"package p0;	\n"+
+				"public class Base {	\n"+
+				"   public void foo() {}\n"+
+				"}");
+		fullBuild(projectPath);
+		expectingNoProblems();
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTBuilderTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTBuilderTests.java
new file mode 100644
index 0000000..f1bb882
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTBuilderTests.java
@@ -0,0 +1,74 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.tests.builder.BuilderTests;
+import org.eclipse.jdt.core.tests.builder.Problem;
+import org.eclipse.objectteams.otdt.internal.compiler.adaptor.BuildManager;
+import org.eclipse.objectteams.otdt.core.ext.OTDTPlugin;
+
+public class OTBuilderTests extends BuilderTests {
+
+	public static final String OT_RUNTIME_PATH;
+	public static final String OTRE_JAR_PATH;
+	static {
+		OT_RUNTIME_PATH = JavaCore.getClasspathVariable(OTDTPlugin.OTDT_INSTALLDIR).toOSString();
+		OTRE_JAR_PATH = OT_RUNTIME_PATH 
+						+ File.separator
+						+ "lib" //$NON-NLS-1$
+						+ File.separator
+						+ "otre.jar"; //$NON-NLS-1$
+	}
+
+	public OTBuilderTests(String name) {
+		super(name);
+	}
+
+	/** Sets up this test.
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		env = new OTTestingEnvironment();
+		env.openEmptyWorkspace();
+		env.resetWorkspace();
+	
+		BuildManager.DEBUG = 2;
+	}
+
+	/** Verifies that the given element has problems.
+	 * Old implementation from BuilderTests
+	 */
+	protected void expectingProblemsFor(IPath expected) {
+		if (DEBUG)
+			printProblemsFor(expected);
+	
+		/* get the leaf problems for this type */
+		Problem[] problems = env.getProblemsFor(expected);
+		assertTrue("missing expected problem with " + expected.toString(), problems.length > 0); //$NON-NLS-1$
+	}
+
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java
new file mode 100644
index 0000000..6d8f3b9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java
@@ -0,0 +1,380 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import junit.framework.Test;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.eclipse.jdt.core.tests.builder.Problem;
+import org.eclipse.jdt.internal.core.JavaCorePreferenceInitializer;
+import org.eclipse.jdt.internal.core.JavaModelManager;
+import org.eclipse.objectteams.otdt.tests.FileBasedTest;
+
+@SuppressWarnings({ "nls", "restriction" })
+public class OTEquinoxBuilderTests extends OTBuilderTests {
+
+	MyFileBasedTest fileManager= new MyFileBasedTest("delegate");
+	class MyFileBasedTest extends FileBasedTest {
+		public MyFileBasedTest(String name) {
+			super(name);
+		}
+		@Override
+		protected String getPluginID() {
+			return "org.eclipse.objectteams.otdt.test.builder"; 
+		}
+		@Override // make available locally:
+		protected IJavaProject setUpJavaProject(String projectName) throws CoreException, IOException 
+		{
+			return super.setUpJavaProject(projectName);
+		}
+		protected void replaceWorkspaceFile(String src, IJavaProject project, String dest)
+			throws IOException, CoreException 
+		{
+			File srcFile = new File(getPluginDirectoryPath()+File.separator+"workspace"+File.separator+src);
+			IFile destFile= project.getProject().getFile(dest);
+			destFile.setContents(new FileInputStream(srcFile), true, false, null);
+		}
+	};
+	
+//	static {
+//		TESTS_NAMES = new String[] { "testBaseImportTrac304"};
+//	}
+	public OTEquinoxBuilderTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		if (true) {
+			return buildTestSuite(OTEquinoxBuilderTests.class);
+		}
+		return new OTEquinoxBuilderTests("testBaseImportTwoAspectBindings");
+	}
+	
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		env.setAutoBuilding(false);
+		
+		DEBUG = true;
+
+	}
+	
+	IProject reopenProject(String projectName) throws CoreException {
+		final IProject project = fileManager.getWorkspaceRoot().getProject(projectName);
+		IWorkspaceRunnable populate = new IWorkspaceRunnable() {
+			public void run(IProgressMonitor monitor) throws CoreException {
+				//project.create(null);
+				project.open(null);
+			}
+		};
+		fileManager.getWorkspace().run(populate, null);
+		env.addProject(project);
+		return project;
+	}
+
+	public void testForcedExports() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject trac18a= fileManager.setUpJavaProject("Trac18a"); 
+		env.addProject(trac18a.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(trac18a.getPath(), new Problem[] {
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 42, 70),   // import
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 199, 211), // playedBy
+		});
+		// after success now break it:
+		fileManager.replaceWorkspaceFile("Trac18a2/plugin.xml", trac18a, "plugin.xml");
+		incrementalBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectAccessRestriction(trac18a, "src/trac18a/Team18.java", 42, 70);
+	}
+
+	public void testForcedExportsMissing() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject trac18a= fileManager.setUpJavaProject("Trac18a2"); 
+		env.addProject(trac18a.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectAccessRestriction(trac18a, "src/trac18a/Team18.java", 42, 70);
+		// fix the error
+		fileManager.replaceWorkspaceFile("Trac18a/plugin.xml", trac18a, "plugin.xml");
+		incrementalBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(trac18a.getPath(), new Problem[] {
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 42, 70),
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 163, 175),
+		});
+	}
+	
+	/* project Trac18a3 contains a base-ctor call and a callout binding,
+	 * both referring to the force-exported base class.*/
+	public void testForcedExportsGeneratedMethodRefs() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject trac18a= fileManager.setUpJavaProject("Trac18a3"); 
+		env.addProject(trac18a.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(trac18a.getPath(), new Problem[] {
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 42, 70),
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 163, 175),
+			getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 201, 205) // location of the base-ctor call.
+		});
+	}
+	/* trying to produce a broken and bogus error message a la Trac #154 (no success yet). */
+	public void testForcedExportTrac154() throws CoreException, IOException {
+		IJavaProject trac154b1= fileManager.setUpJavaProject("Trac154b1"); 
+		env.addProject(trac154b1.getProject());
+		IJavaProject trac154b2= fileManager.setUpJavaProject("Trac154b2"); 
+		env.addProject(trac154b2.getProject());
+		IJavaProject trac154a= fileManager.setUpJavaProject("Trac154a"); 
+		env.addProject(trac154a.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac154b1.getPath());
+		expectingNoProblemsFor(trac154b2.getPath());
+		expectingOnlySpecificProblemsFor(trac154a.getPath(), new Problem[] {
+			getDecapsulationProblem(trac154a, "trac154b1.actions.SampleAction", "aspect/MyTeam.java", 29, 59),
+			getDecapsulationProblem(trac154a, "trac154b1.actions.SampleAction", "aspect/MyTeam.java", 118, 130)
+		});
+	}
+
+	public void testBaseImportNoAspectBinding () throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject aspectPlugin= fileManager.setUpJavaProject("MissingAspectBinding"); 
+		aspectPlugin.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(aspectPlugin.getPath(), new Problem[] {
+			new Problem("", "Illegal base import: no aspect binding declared for team MissingAspectBindingTeam (OT/Equinox).",
+						aspectPlugin.getPath().append(new Path("src/MissingAspectBindingTeam.java")),
+						12, 34,
+						CategorizedProblem.CAT_CODE_STYLE, IMarker.SEVERITY_ERROR)
+		});
+		// now fix it:
+		fileManager.replaceWorkspaceFile("MissingAspectBinding/plugin-corrected.xml", aspectPlugin, "plugin.xml");
+		incrementalBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingNoProblemsFor(aspectPlugin.getPath());
+	}
+	
+	/* Two aspect bindings refer to the same team, which has base imports referring to two different base bundles. */
+	public void testBaseImportTwoAspectBindings () throws CoreException, IOException {
+		IJavaProject trac213b1= fileManager.setUpJavaProject("Trac213b1"); 
+		env.addProject(trac213b1.getProject());
+		IJavaProject trac213b2= fileManager.setUpJavaProject("Trac213b2"); 
+		env.addProject(trac213b2.getProject());
+		fullBuild();
+		
+		// initially only an empty team
+		IJavaProject aspectPlugin= fileManager.setUpJavaProject("Trac213a"); 
+		aspectPlugin.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin.getProject());
+		fullBuild();
+		
+		// now add content to the team, binding to Trac213b1:
+		fileManager.replaceWorkspaceFile("Trac213a/aux/TheTeam_step1.java", aspectPlugin, "src/trac213a/TheTeam.java");
+		
+		incrementalBuild();
+		expectingNoProblemsFor(trac213b1.getPath());
+		expectingNoProblemsFor(trac213b2.getPath());
+		expectingNoProblemsFor(aspectPlugin.getPath());
+
+		// now add content to the team, binding to Trac213b2:
+		fileManager.replaceWorkspaceFile("Trac213a/aux/plugin_step2.xml", aspectPlugin, "plugin.xml");
+		fileManager.replaceWorkspaceFile("Trac213a/aux/TheTeam_step2.java", aspectPlugin, "src/trac213a/TheTeam.java");
+		
+		incrementalBuild();
+		expectingNoProblemsFor(trac213b1.getPath());
+		expectingNoProblemsFor(trac213b2.getPath());
+		expectingNoProblemsFor(aspectPlugin.getPath());
+	}
+	
+	public void testWrongBaseImport1() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject aspectPlugin= fileManager.setUpJavaProject("WrongBaseImport1"); 
+		aspectPlugin.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(aspectPlugin.getPath(), new Problem[] {
+			new Problem("", "Illegal base import: this package is not provided by the declared base plug-in(s) Trac18b (OT/Equinox).",
+						aspectPlugin.getPath().append(new Path("src/WrongBaseImportTeam1.java")),
+						12, 55,
+						CategorizedProblem.CAT_CODE_STYLE, IMarker.SEVERITY_ERROR)
+		});		
+	}
+
+	public void testWrongBaseImport2() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject aspectPlugin= fileManager.setUpJavaProject("WrongBaseImport2"); 
+		aspectPlugin.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(aspectPlugin.getPath(), new Problem[] {
+			new Problem("", "Illegal base import: this package is not provided by the declared base plug-in org.eclipse.objectteams.otequinox but by plug-in Trac18b (OT/Equinox).",
+						aspectPlugin.getPath().append(new Path("src/WrongBaseImportTeam2.java")),
+						12, 34,
+						CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)
+		});		
+	}
+
+	public void testBaseImportTrac132 () throws CoreException, IOException {
+		IJavaProject trac132b= fileManager.setUpJavaProject("Trac132b"); 
+		env.addProject(trac132b.getProject());
+		IJavaProject aspectPlugin1= fileManager.setUpJavaProject("Trac132a1"); 
+		aspectPlugin1.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin1.getProject());
+		IJavaProject aspectPlugin2= fileManager.setUpJavaProject("Trac132a2"); 
+		aspectPlugin2.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin2.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac132b.getPath());
+		expectingNoProblemsFor(aspectPlugin1.getPath());
+		expectingNoProblemsFor(aspectPlugin2.getPath());
+	}
+
+	public void testBaseImportTrac304 () throws CoreException, IOException {
+		IJavaProject trac304b= fileManager.setUpJavaProject("Trac304b"); 
+		env.addProject(trac304b.getProject());
+		// the fragment:
+		IJavaProject trac304f= fileManager.setUpJavaProject("Trac304f"); 
+		env.addProject(trac304f.getProject());
+		IJavaProject trac304ot= fileManager.setUpJavaProject("Trac304ot"); 
+		trac304ot.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(trac304ot.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac304b.getPath());
+		expectingNoProblemsFor(trac304ot.getPath());
+	}
+
+	public void testIllegalUseOfForcedExport() throws CoreException, IOException {
+		IJavaProject trac18b= fileManager.setUpJavaProject("Trac18b"); 
+		env.addProject(trac18b.getProject());
+		IJavaProject aspectPlugin= fileManager.setUpJavaProject("IllegalUseOfForcedExport"); 
+		aspectPlugin.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac18b.getPath());
+		expectingOnlySpecificProblemsFor(aspectPlugin.getPath(), 
+				new Problem[] {
+					getIllegalUseOfForcedExportProblem(aspectPlugin, "trac18b.actions.SampleAction", 88, 100),
+					getIllegalUseOfForcedExportProblem(aspectPlugin, "trac18b.actions.SampleAction", 7, 35)});
+	}
+
+	public void testAccumulatedBases1() throws CoreException, IOException {
+		IJavaProject project= fileManager.setUpJavaProject("AccumulatedBases"); 
+		project.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(project.getProject());
+		fullBuild();
+		expectingNoProblemsFor(project.getPath());
+		fileManager.replaceWorkspaceFile("AccumulatedBases/versions/Team1.java.1", project, "src/accumulatedbases/Team1.java");
+		incrementalBuild();
+		expectingNoProblemsFor(project.getPath());
+	}
+	
+	// NOTE: run this as the last test here, because I haven't figured out how to
+	//       clean up after the simulated workbench restart.
+	public void testBaseImportTrac132_2 () throws CoreException, IOException {
+		IJavaProject trac132b= fileManager.setUpJavaProject("Trac132b"); 
+		env.addProject(trac132b.getProject());
+		IJavaProject aspectPlugin1= fileManager.setUpJavaProject("Trac132a1"); 
+		aspectPlugin1.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin1.getProject());
+		IJavaProject aspectPlugin2= fileManager.setUpJavaProject("Trac132a2"); 
+		aspectPlugin2.setOption("org.eclipse.objectteams.otdt.compiler.problem.binding_conventions", "error");
+		env.addProject(aspectPlugin2.getProject());
+		fullBuild();
+		expectingNoProblemsFor(trac132b.getPath());
+		expectingNoProblemsFor(aspectPlugin1.getPath());
+		expectingNoProblemsFor(aspectPlugin2.getPath());
+		
+		// not needed.
+//		JavaModelManager.getJavaModelManager().removePerProjectInfo((JavaProject) trac132b);
+//		JavaModelManager.getJavaModelManager().removePerProjectInfo((JavaProject) aspectPlugin1);
+//		JavaModelManager.getJavaModelManager().removePerProjectInfo((JavaProject) aspectPlugin2);
+
+		// doesn't work see :
+		//ResourcesPlugin.getPlugin().getBundle().stop();
+		//ResourcesPlugin.getPlugin().getBundle().start();
+		
+		// simulate shutdown (from AbstractJavaModelTests.simulateExitRestart:
+		env.getWorkspace().save(true, null);
+		JavaModelManager.getJavaModelManager().shutdown();
+		JavaModelManager.doNotUse(); // reset the MANAGER singleton
+		JavaModelManager.getJavaModelManager().startup();
+		new JavaCorePreferenceInitializer().initializeDefaultPreferences();
+		
+
+		env.openEmptyWorkspace();
+		env.setAutoBuilding(true);
+		
+		trac132b= JavaCore.create(reopenProject("Trac132b"));
+		aspectPlugin1= JavaCore.create(reopenProject("Trac132a1"));
+		aspectPlugin2= JavaCore.create(reopenProject("Trac132a2"));
+		env.addClass(new Path("/Trac132a2/src"), "Dummy", "public class Dummy {}"); // trigger minimal build
+		incrementalBuild();
+		expectingNoProblemsFor(trac132b.getPath());
+		expectingNoProblemsFor(aspectPlugin1.getPath());
+		expectingNoProblemsFor(aspectPlugin2.getPath());
+	}
+
+	// ---------------- HELPERS: ---------------------------
+	private Problem getDecapsulationProblem(IJavaProject project, String baseclassName, String teamPath, int start, int end) {
+		return new Problem("", "Decapsulating base class "+baseclassName+" by means of a forced export. Note, that additionally a corresponing declaration is needed in config.ini (OTJLD 2.1.2(c) + OT/Equinox).",
+				project.getPath().append(new Path("src/"+teamPath)), 
+				start, end,
+				CategorizedProblem.CAT_RESTRICTION, IMarker.SEVERITY_WARNING);
+	}
+	private Problem getIllegalUseOfForcedExportProblem(IJavaProject project, String className, int start, int end) {
+		return new Problem("", "The forced-exported type "+className+" cannot be accessed other than as a role's base class (OT/Equinox).",
+				project.getPath().append(new Path("src/IllegalUseOfForcedExportTeam.java")), 
+				start, end,
+				CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR);
+	}
+	private void expectAccessRestriction(IJavaProject project, String fileName, int start, int end) {
+		expectingSpecificProblemFor(project.getPath(), 
+			new Problem("", "Access restriction: The type SampleAction is not accessible due to restriction on required project Trac18b",
+						project.getPath().append(new Path(fileName)), 
+						start, end, 
+						CategorizedProblem.CAT_RESTRICTION, IMarker.SEVERITY_ERROR)
+		);
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTLaunchEnvironment.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTLaunchEnvironment.java
new file mode 100644
index 0000000..ad2861a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTLaunchEnvironment.java
@@ -0,0 +1,118 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.objectteams.otdt.core.ext.OTREContainer;
+import org.eclipse.objectteams.otre.jplis.ObjectTeamsTransformer;
+
+/**
+ * Utility class for launching a program in a controlled environment.
+ * Disposing the application's object and the OTLaunchEnvironment
+ * should enable the JVM to also dispose all classes loaded in the process.
+ * 
+ * @author stephan
+ * @version $Id: OTLaunchEnvironment.java 14220 2006-09-04 22:13:40Z stephan $
+ */
+public class OTLaunchEnvironment extends URLClassLoader 
+{
+	ObjectTeamsTransformer transformer = null;
+	/** Where to look for class files. */
+	IPath bindir;
+	/**
+	 * Setup a launch environment for the given paths. 
+	 * @param workspaceRoot path to the workspace root
+	 * @param bindir        absolute workspace path to the output location holding class files.
+	 * @throws MalformedURLException if the OTRE_JAR_PATH is not a valid path.
+	 */
+	OTLaunchEnvironment(IPath workspaceRoot, IPath bindir) throws MalformedURLException {
+		super(new URL[]{getOTREURL()});
+		this.bindir = workspaceRoot.append(bindir);
+	}
+	/**
+	 * Same as above but supports the use of OTRE transformers, if `useTransformer == true'  
+	 */
+	OTLaunchEnvironment(IPath workspaceRoot, IPath bindir, boolean useTransformer) 
+			throws MalformedURLException 
+	{
+		this(workspaceRoot, bindir);
+		if (useTransformer)
+			this.transformer = new ObjectTeamsTransformer();
+	}
+	
+	static URL getOTREURL() throws MalformedURLException {
+		IClasspathEntry[] entries = new OTREContainer().getClasspathEntries();
+		return new URL("file:"+entries[0].getPath()); //$NON-NLS-1$
+	}
+	@Override
+	protected Class<?> findClass(String name) throws ClassNotFoundException {
+		String fileName = name.replace('.', File.separatorChar)+".class"; //$NON-NLS-1$
+		File file = new File(bindir.append(fileName).toOSString());
+		if (file.exists()) {
+			try {
+				return defineClassFromFile(name, file);
+			} catch (Exception e) {
+				// we have a file but it was invalid, don't continue
+				throw new ClassNotFoundException(name);
+			}
+		}
+		// this will use the URL pointing to the OTRE:
+		return super.findClass(name);
+	}
+	
+	/* We found an existing file, load its bytes and define the class. */
+	private Class<?> defineClassFromFile(String name, File file) 
+		throws Exception 
+	{
+		FileInputStream fis = new FileInputStream(file);
+		byte[] bytes = new byte[(int) file.length()];
+		fis.read(bytes);
+		if (transformer != null) 
+			bytes = transformer.transform(this, name, null, null, bytes);
+		return defineClass(name, bytes, 0, bytes.length);
+	}
+	
+	/**
+	 * Load class `className' and invoke its method `methodName'.
+	 * The method must be static and without arguments.
+	 *  
+	 * @param className
+	 * @param methodName
+	 * @return the methods return (possibly boxed).
+	 * 
+	 * @throws Exception too many to list explicitly ;-)
+	 */
+	public Object launch(String className, String methodName) 
+			throws Exception 
+	{
+		Class clazz = this.loadClass(className);
+		Method method = clazz.getMethod(methodName, new Class[0]);		
+		return method.invoke(null, new Object[0]);
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTTestingEnvironment.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTTestingEnvironment.java
new file mode 100644
index 0000000..fdb86e4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTTestingEnvironment.java
@@ -0,0 +1,42 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id$
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.otdt.test.builder;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.tests.builder.TestingEnvironment;
+
+public class OTTestingEnvironment extends TestingEnvironment {
+
+	@Override // in order to set OT nature: // FIXME: request jdt.method to become protected or use a role for overriding
+	protected void addBuilderSpecs(String projectName) {
+		try {
+			IProject project = getProject(projectName);
+			IProjectDescription description = project.getDescription();
+			description.setNatureIds(new String[] { JavaCore.NATURE_ID, JavaCore.OTJ_NATURE_ID });
+			project.setDescription(description, null);
+		} catch (CoreException e) {
+			handleCoreException(e);
+		}
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/test.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/test.xml
new file mode 100644
index 0000000..ce5ba19
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/test.xml
@@ -0,0 +1,65 @@
+<project name="testsuite" default="run" basedir=".">
+
+	<property name="otdt-tests-workspace" value="${test.eclipseDir}/otdt-tests-workspace"/>
+
+	<!-- library.xml need these properties-->
+	<property name="eclipse-home" value="${test.eclipseDir}"/>
+	<property name="test.target" value="performance"/>	
+	
+	<!-- sets the properties eclipseTest-home, and library-file -->
+	<property name="plugin-name" value="org.eclipse.objectteams.otdt.test.builder"/>
+
+	<property name="library-file" value="${test.eclipseDir}/plugins/${org.eclipse.test}/library.xml"/>
+
+	<!-- This target holds all initialization code that needs to be done for -->
+	<!-- all tests that are to be run. Initialization for individual tests -->
+	<!-- should be done within the body of the suite target. -->
+	<target name="init">
+		<tstamp/>
+		<delete>
+			<fileset dir="${test.eclipseDir}" includes="org.eclipse.objectteams.otdt.test.builder.AllTests.xml,${plugin-name}.${file-id}.xml"/>
+		</delete>
+
+	</target>
+
+	<!-- This target defines the tests that need to be run. -->
+	<target name="suite">
+
+		<!-- OTDT Non UI tests -->
+		<property name="otdt-builder-folder" 
+              value="${otdt-tests-workspace}/otdt-builder-folder"/>
+		<delete dir="${otdt-nonUI-folder}" quiet="true"/>
+
+		<ant target="core-test" antfile="${library-file}" dir="${test.eclipseDir}">
+			<property name="data-dir" value="${otdt-builder-folder}"/>
+			<property name="plugin-name" value="${plugin-name}"/>
+			<property name="classname" value="org.eclipse.objectteams.otdt.test.builder.AllTests"/>
+		</ant>
+
+	</target>
+
+	<target name="checkOS">
+		<condition property="os.isWindows">
+			<os family="windows"/>
+		</condition>
+	</target>
+
+	<!-- This target holds code to cleanup the testing environment after -->
+	<!-- after all of the tests have been run. You can use this target to -->
+	<!-- delete temporary files that have been created. -->
+	<target name="cleanup">
+
+	</target>
+
+	<!-- This target runs the test suite. Any actions that need to happen -->
+	<!-- after all the tests have been run should go here. -->
+	<target name="run" depends="init,suite,cleanup">
+<!--
+		<ant target="collect" antfile="${library-file}" dir="${test.eclipseDir}">
+			<property name="includes" value="org.eclipse.objectteams.otdt.test.builder.AllTests.xml"/>
+			<property name="output-file" value="${plugin-name}.${file-id}.xml"/>
+		</ant>
+-->
+	</target>
+
+</project>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.classpath
new file mode 100644
index 0000000..cee6929
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.project
new file mode 100644
index 0000000..1df9d7c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>AccumulatedBases</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9e5f077
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Sun Aug 03 18:01:18 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a45de4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: AccumulatedBases Plug-in
+Bundle-SymbolicName: AccumulatedBases;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.debug.ui,
+ org.eclipse.objectteams.otequinox,
+ org.eclipse.jdt.debug.ui,
+ org.eclipse.jdt.junit
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/plugin.xml
new file mode 100644
index 0000000..8edcf89
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="org.eclipse.debug.ui">
+         </basePlugin>
+         <team
+               class="accumulatedbases.Team1"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="org.eclipse.jdt.debug.ui">
+         </basePlugin>
+         <team
+               class="accumulatedbases.Team2"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif"
+               superclass="accumulatedbases.Team1">
+         </team>
+      </aspectBinding>
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="org.eclipse.jdt.junit">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="accumulatedbases.Team3"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif"
+               superclass="accumulatedbases.Team2">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team1.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team1.java
new file mode 100644
index 0000000..e657aaa
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team1.java
@@ -0,0 +1,10 @@
+package accumulatedbases;
+
+import base org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
+
+public team class Team1 {
+	protected class R1 playedBy AbstractLaunchConfigurationTabGroup {
+		
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team2.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team2.java
new file mode 100644
index 0000000..f50ef08
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team2.java
@@ -0,0 +1,8 @@
+package accumulatedbases;
+
+import base org.eclipse.jdt.internal.debug.ui.launcher.LocalJavaApplicationTabGroup;
+
+@SuppressWarnings("restriction")
+public team class Team2 extends Team1 {
+	protected class R2 extends R1 playedBy LocalJavaApplicationTabGroup {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team3.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team3.java
new file mode 100644
index 0000000..fb98912
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/src/accumulatedbases/Team3.java
@@ -0,0 +1,9 @@
+package accumulatedbases;
+
+import base org.eclipse.jdt.internal.junit.launcher.JUnitTabGroup;
+
+
+@SuppressWarnings("restriction")
+public team class Team3 extends Team2 {
+	protected class R3 extends R1 playedBy JUnitTabGroup {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/versions/Team1.java.1 b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/versions/Team1.java.1
new file mode 100644
index 0000000..e1c4851
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/AccumulatedBases/versions/Team1.java.1
@@ -0,0 +1,11 @@
+package accumulatedbases;
+
+import base org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
+
+public team class Team1 
+{
+	protected class R1 playedBy AbstractLaunchConfigurationTabGroup {
+		
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.project
new file mode 100644
index 0000000..27f1f6a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>IllegalUseOfForcedExport</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ae01de6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test Illegal Use Of ForcedExport Plug-in
+Bundle-SymbolicName: IllegalUseOfForcedExport; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.objectteams.otequinox,
+ Trac18b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/build.properties
new file mode 100644
index 0000000..2b0d95b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/plugin.xml
new file mode 100644
index 0000000..641f08d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+               <forcedExports>
+                  trac18b.actions
+               </forcedExports>
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="IllegalUseOfForcedExportTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/src/IllegalUseOfForcedExportTeam.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/src/IllegalUseOfForcedExportTeam.java
new file mode 100644
index 0000000..8955968
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/IllegalUseOfForcedExport/src/IllegalUseOfForcedExportTeam.java
@@ -0,0 +1,5 @@
+import trac18b.actions.SampleAction;
+
+public team class IllegalUseOfForcedExportTeam {
+	SampleAction action;
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.project
new file mode 100644
index 0000000..ea12513
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>MissingAspectBinding</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7d974ed
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TestNoAspectBinding Plug-in
+Bundle-SymbolicName: MissingAspectBinding; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.objectteams.otequinox,
+ Trac18b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/build.properties
new file mode 100644
index 0000000..2b0d95b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin-corrected.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin-corrected.xml
new file mode 100644
index 0000000..04dafdf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin-corrected.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="MissingAspectBindingTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin.xml
new file mode 100644
index 0000000..40a3556
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/plugin.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/src/MissingAspectBindingTeam.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/src/MissingAspectBindingTeam.java
new file mode 100644
index 0000000..81224ad
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/MissingAspectBinding/src/MissingAspectBindingTeam.java
@@ -0,0 +1,5 @@
+import base trac18b.api.PublicBase;
+
+public team class MissingAspectBindingTeam {
+	protected class R playedBy PublicBase {}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.project
new file mode 100644
index 0000000..377bf83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac132a1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..509e627
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 10 00:41:15 CET 2007
+eclipse.preferences.version=1
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9f1180c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac132 Aspect 1 Plug-in
+Bundle-SymbolicName: Trac132a1; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.objectteams.otequinox,
+ Trac132b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/plugin.xml
new file mode 100644
index 0000000..76e750f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac132b">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac132a1.Team132_1"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/src/trac132a1/Team132_1.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/src/trac132a1/Team132_1.java
new file mode 100644
index 0000000..f71ad09
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a1/src/trac132a1/Team132_1.java
@@ -0,0 +1,14 @@
+package trac132a1;
+
+import base trac132b.actions.SampleAction;
+import base trac132b.api.PublicBase;
+
+@SuppressWarnings("restriction")
+public team class Team132_1 {
+	protected class Action playedBy SampleAction {
+ 
+	}
+	protected class RoleOfPublic playedBy PublicBase {
+		
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.project
new file mode 100644
index 0000000..8ba3fce
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac132a2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..509e627
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 10 00:41:15 CET 2007
+eclipse.preferences.version=1
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1bc8e3a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac132 Aspect 2 Plug-in
+Bundle-SymbolicName: Trac132a2; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.objectteams.otequinox,
+ Trac132b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/plugin.xml
new file mode 100644
index 0000000..51021b1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac132b">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac132a2.Team132_2"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/src/trac132a2/Team132_2.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/src/trac132a2/Team132_2.java
new file mode 100644
index 0000000..611735d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132a2/src/trac132a2/Team132_2.java
@@ -0,0 +1,14 @@
+package trac132a2;
+
+import base trac132b.actions.SampleAction;
+import base trac132b.api.PublicBase;
+
+@SuppressWarnings("restriction")
+public team class Team132_2 {
+	protected class Action playedBy SampleAction {
+ 
+	}
+	protected class RoleOfPublic playedBy PublicBase {
+		
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.project
new file mode 100644
index 0000000..ea3db2a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac132b</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ac53ef5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac132 Base Plug-in
+Bundle-SymbolicName: Trac132b; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui
+Export-Package: trac132b.api,
+ trac132b.actions;x-internal:=true
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/plugin.xml
new file mode 100644
index 0000000..5910717
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac132b.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac132b.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac132b.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/actions/SampleAction.java
new file mode 100644
index 0000000..0c1a7ca
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac132b.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac132b Plug-in",
+			"Hello, Eclipse world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/api/PublicBase.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/api/PublicBase.java
new file mode 100644
index 0000000..b193459
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac132b/src/trac132b/api/PublicBase.java
@@ -0,0 +1,5 @@
+package trac132b.api;
+
+public class PublicBase {
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.classpath
new file mode 100644
index 0000000..c24f8de
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.project
new file mode 100644
index 0000000..3d731b8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac154a</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d742631
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Mon Oct 27 18:58:23 CET 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bf7729a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac154 aspect Plug-in
+Bundle-SymbolicName: Trac154a;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: Trac154b1;bundle-version="1.0.0",
+ org.eclipse.objectteams.otequinox,
+ org.eclipse.ui
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/plugin.xml
new file mode 100644
index 0000000..d73e081
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac154b1">
+            <forcedExports>
+               trac154b1.actions
+            </forcedExports>
+         </basePlugin>
+         <team
+               class="aspect.MyTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/src/aspect/MyTeam.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/src/aspect/MyTeam.java
new file mode 100644
index 0000000..7bf9efe
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154a/src/aspect/MyTeam.java
@@ -0,0 +1,9 @@
+package aspect;
+
+import base trac154b1.actions.SampleAction;
+
+public team class MyTeam {
+
+	protected class R playedBy SampleAction {}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.project
new file mode 100644
index 0000000..a59d0d8
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac154b1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..98b75e0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Oct 27 18:55:23 CET 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1296dad
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac154 base Plug-in 1
+Bundle-SymbolicName: Trac154b1; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: trac154b1.actions
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/icons/sample.gif b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/icons/sample.gif
Binary files differ
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/plugin.xml
new file mode 100644
index 0000000..b45bc2d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac154b1.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac154b1.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac154b1.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/src/trac154b1/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/src/trac154b1/actions/SampleAction.java
new file mode 100644
index 0000000..fd6ec4f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b1/src/trac154b1/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac154b1.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac154 base Plug-in 1",
+			"Hello, Eclipse world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.project
new file mode 100644
index 0000000..b02f3cf
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac154b2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b727278
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Oct 27 18:56:07 CET 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bf7740a
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac154 base Plug-in 2
+Bundle-SymbolicName: Trac154b2
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: Trac154b1;bundle-version="1.0.0",
+ org.eclipse.ui
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/src/internal/SubClass.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/src/internal/SubClass.java
new file mode 100644
index 0000000..a3c4597
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac154b2/src/internal/SubClass.java
@@ -0,0 +1,7 @@
+package internal;
+
+import trac154b1.actions.SampleAction;
+
+public class SubClass extends SampleAction {
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.project
new file mode 100644
index 0000000..722dc22
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac18a</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..509e627
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 10 00:41:15 CET 2007
+eclipse.preferences.version=1
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5d5f795
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac18a Plug-in
+Bundle-SymbolicName: Trac18a; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.objectteams.otequinox,
+ Trac18b
+Bundle-ActivationPolicy: lazy
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/plugin.xml
new file mode 100644
index 0000000..3329dbe
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/plugin.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac18a.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac18a.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac18a.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+               <forcedExports>
+                  trac18b.actions,
+trac18b.otherclasses
+               </forcedExports>
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac18a.Team18"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/Team18.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/Team18.java
new file mode 100644
index 0000000..d428053
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/Team18.java
@@ -0,0 +1,20 @@
+/**
+ * 
+ */
+package trac18a;
+
+import base trac18b.actions.SampleAction;
+import base trac18b.api.PublicBase;
+
+/**
+ * @author stephan
+ *
+ */
+public team class Team18 {
+	protected class Action playedBy SampleAction {
+ 
+	}
+	protected class RoleOfPublic playedBy PublicBase {
+		
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/actions/SampleAction.java
new file mode 100644
index 0000000..e60be67
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a/src/trac18a/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac18a.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac18a Plug-in",
+			"Hello, Aspect world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.project
new file mode 100644
index 0000000..722dc22
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac18a</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..509e627
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 10 00:41:15 CET 2007
+eclipse.preferences.version=1
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..537183c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac18a Plug-in
+Bundle-SymbolicName: Trac18a; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.objectteams.otequinox,
+ Trac18b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/plugin.xml
new file mode 100644
index 0000000..06c2c53
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac18a.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac18a.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac18a.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac18a.Team18"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/Team18.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/Team18.java
new file mode 100644
index 0000000..c0c4dd9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/Team18.java
@@ -0,0 +1,16 @@
+/**
+ * 
+ */
+package trac18a;
+
+import base trac18b.actions.SampleAction;
+
+/**
+ * @author stephan
+ *
+ */
+public team class Team18 {
+	protected class Action playedBy SampleAction {
+ 
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/actions/SampleAction.java
new file mode 100644
index 0000000..e60be67
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a2/src/trac18a/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac18a.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac18a Plug-in",
+			"Hello, Aspect world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.project
new file mode 100644
index 0000000..722dc22
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac18a</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..509e627
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,3 @@
+#Sat Nov 10 00:41:15 CET 2007
+eclipse.preferences.version=1
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..537183c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac18a Plug-in
+Bundle-SymbolicName: Trac18a; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.objectteams.otequinox,
+ Trac18b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/plugin.xml
new file mode 100644
index 0000000..d3d801c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/plugin.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac18a.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac18a.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac18a.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+               <forcedExports>
+                  trac18b.actions
+               </forcedExports>
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac18a.Team18"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/Team18.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/Team18.java
new file mode 100644
index 0000000..9372d10
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/Team18.java
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package trac18a;
+
+import base trac18b.actions.SampleAction;
+
+/**
+ * @author stephan
+ *
+ */
+public team class Team18 {
+	protected class Action playedBy SampleAction {
+		public Action() {
+			base();
+		}
+		void dispose() -> void dispose();
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/actions/SampleAction.java
new file mode 100644
index 0000000..e60be67
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18a3/src/trac18a/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac18a.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac18a Plug-in",
+			"Hello, Aspect world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.project
new file mode 100644
index 0000000..172a67f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac18b</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..09fa9e0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac18b Plug-in
+Bundle-SymbolicName: Trac18b; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.ui
+Export-Package: trac18b.api
+Bundle-ActivationPolicy: lazy
+
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/plugin.xml
new file mode 100644
index 0000000..e42d5e0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            label="Sample Action Set"
+            visible="true"
+            id="Trac18b.actionSet">
+         <menu
+               label="Sample &amp;Menu"
+               id="sampleMenu">
+            <separator
+                  name="sampleGroup">
+            </separator>
+         </menu>
+         <action
+               label="&amp;Sample Action"
+               icon="icons/sample.gif"
+               class="trac18b.actions.SampleAction"
+               tooltip="Hello, Eclipse world"
+               menubarPath="sampleMenu/sampleGroup"
+               toolbarPath="sampleGroup"
+               id="trac18b.actions.SampleAction">
+         </action>
+      </actionSet>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/actions/SampleAction.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/actions/SampleAction.java
new file mode 100644
index 0000000..0ef856e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/actions/SampleAction.java
@@ -0,0 +1,64 @@
+package trac18b.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+/**
+ * Our sample action implements workbench action delegate.
+ * The action proxy will be created by the workbench and
+ * shown in the UI. When the user tries to use the action,
+ * this delegate will be created and execution will be 
+ * delegated to it.
+ * @see IWorkbenchWindowActionDelegate
+ */
+public class SampleAction implements IWorkbenchWindowActionDelegate {
+	private IWorkbenchWindow window;
+	/**
+	 * The constructor.
+	 */
+	public SampleAction() {
+	}
+
+	/**
+	 * The action has been activated. The argument of the
+	 * method represents the 'real' action sitting
+	 * in the workbench UI.
+	 * @see IWorkbenchWindowActionDelegate#run
+	 */
+	public void run(IAction action) {
+		MessageDialog.openInformation(
+			window.getShell(),
+			"Trac18b Plug-in",
+			"Hello, Eclipse world");
+	}
+
+	/**
+	 * Selection in the workbench has been changed. We 
+	 * can change the state of the 'real' action here
+	 * if we want, but this can only happen after 
+	 * the delegate has been created.
+	 * @see IWorkbenchWindowActionDelegate#selectionChanged
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * We can use this method to dispose of any system
+	 * resources we previously allocated.
+	 * @see IWorkbenchWindowActionDelegate#dispose
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * We will cache window object in order to
+	 * be able to provide parent shell for the message dialog.
+	 * @see IWorkbenchWindowActionDelegate#init
+	 */
+	public void init(IWorkbenchWindow window) {
+		this.window = window;
+	}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/api/PublicBase.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/api/PublicBase.java
new file mode 100644
index 0000000..4a93991
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/api/PublicBase.java
@@ -0,0 +1,5 @@
+package trac18b.api;
+
+public class PublicBase {
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/otherclasses/OtherClass.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/otherclasses/OtherClass.java
new file mode 100644
index 0000000..d62824c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac18b/src/trac18b/otherclasses/OtherClass.java
@@ -0,0 +1,5 @@
+package trac18b.otherclasses;
+
+public class OtherClass {
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.classpath
new file mode 100644
index 0000000..c24f8de
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.project
new file mode 100644
index 0000000..3943bd2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac213a</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a205a2b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Sat Mar 14 19:00:03 CET 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..58fb008
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac213a Plug-in
+Bundle-SymbolicName: Trac213a;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: trac213a.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.objectteams.otequinox,
+ Trac213b1;bundle-version="1.0.0",
+ Trac213b2;bundle-version="1.0.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step1.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step1.java
new file mode 100644
index 0000000..2a6ba99
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step1.java
@@ -0,0 +1,11 @@
+package trac213a;
+
+import base trac213b1.Activator1;
+
+public team class TheTeam {
+
+	protected class R1 playedBy Activator1 {
+	
+	}
+	
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step2.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step2.java
new file mode 100644
index 0000000..56de0bd
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/TheTeam_step2.java
@@ -0,0 +1,15 @@
+package trac213a;
+
+import base trac213b1.Activator1;
+import base trac213b2.Activator2;
+
+public team class TheTeam {
+
+	protected class R1 playedBy Activator1 {
+	
+	}
+	protected class R2 playedBy Activator2 {
+	
+	}
+	
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/plugin_step2.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/plugin_step2.xml
new file mode 100644
index 0000000..d25bc85
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/aux/plugin_step2.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac213b1">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac213a.TheTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac213b2">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac213a.TheTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/plugin.xml
new file mode 100644
index 0000000..d54d890
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac213b1">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="trac213a.TheTeam"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/Activator.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/Activator.java
new file mode 100644
index 0000000..fb3d3d5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/Activator.java
@@ -0,0 +1,50 @@
+package trac213a;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "Trac213a";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/TheTeam.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/TheTeam.java
new file mode 100644
index 0000000..371cb03
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213a/src/trac213a/TheTeam.java
@@ -0,0 +1,6 @@
+package trac213a;
+
+public team class TheTeam {
+
+	
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.project
new file mode 100644
index 0000000..67d9e39
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac213b1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b74a520
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Sat Mar 14 18:51:55 CET 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..56fb5a2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac213b1 Plug-in
+Bundle-SymbolicName: Trac213b1
+Bundle-Version: 1.0.0
+Bundle-Activator: trac213b1.Activator1
+Require-Bundle: org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: trac213b1
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/src/trac213b1/Activator1.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/src/trac213b1/Activator1.java
new file mode 100644
index 0000000..6f3d21e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b1/src/trac213b1/Activator1.java
@@ -0,0 +1,50 @@
+package trac213b1;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator1 extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "Trac213b1";
+
+	// The shared instance
+	private static Activator1 plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator1() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator1 getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.project
new file mode 100644
index 0000000..5e4bac1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac213b2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..dfe2608
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Sat Mar 14 18:52:23 CET 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..44661c9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac213b2 Plug-in
+Bundle-SymbolicName: Trac213b2
+Bundle-Version: 1.0.0
+Bundle-Activator: trac213b2.Activator2
+Require-Bundle: org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: trac213b2
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/src/trac213b2/Activator2.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/src/trac213b2/Activator2.java
new file mode 100644
index 0000000..bd58e81
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac213b2/src/trac213b2/Activator2.java
@@ -0,0 +1,50 @@
+package trac213b2;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator2 extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "Trac213b2";
+
+	// The shared instance
+	private static Activator2 plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator2() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator2 getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.project
new file mode 100644
index 0000000..e9fa5c0
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac304b</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d6adcef
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+#Sun Sep 06 00:10:18 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.objectteams.otdt.compiler.option.pure_java=enabled
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..24047b3
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac304b
+Bundle-SymbolicName: Trac304b
+Bundle-Version: 1.0.0
+Bundle-Activator: trac304b.Activator
+Require-Bundle: org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Eclipse-ExtensibleAPI: true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: trac304b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/src/trac304b/Activator.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/src/trac304b/Activator.java
new file mode 100644
index 0000000..66cc2b1
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304b/src/trac304b/Activator.java
@@ -0,0 +1,50 @@
+package trac304b;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "Trac304b";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.project
new file mode 100644
index 0000000..115fe03
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac304f</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6bc01aa
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+#Sun Sep 06 00:11:24 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.objectteams.otdt.compiler.option.pure_java=enabled
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e18fd32
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac304f
+Bundle-SymbolicName: Trac304f
+Bundle-Version: 1.0.0
+Fragment-Host: Trac304b
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: fragment304
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/src/fragment304/FragClass.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/src/fragment304/FragClass.java
new file mode 100644
index 0000000..8319a3f
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304f/src/fragment304/FragClass.java
@@ -0,0 +1,5 @@
+package fragment304;
+
+public class FragClass {
+	void fragMethod() {}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.classpath
new file mode 100644
index 0000000..c24f8de
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.project
new file mode 100644
index 0000000..e3f5dee
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Trac304ot</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..781d9a4
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+#Sun Sep 06 00:13:00 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.objectteams.otdt.compiler.option.pure_java=enabled
+org.eclipse.objectteams.otdt.compiler.problem.binding_conventions=error
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4fd6b95
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Trac304ot
+Bundle-SymbolicName: Trac304ot;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: trac304ot.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.objectteams.otequinox,
+ Trac304b;bundle-version="1.0.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: trac304b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/plugin.xml
new file mode 100644
index 0000000..cb28f5e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac304b">
+            <requiredFragment
+                  id="Trac304f">
+            </requiredFragment>
+         </basePlugin>
+         <team
+               class="trac304ot.Team304ot"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Activator.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Activator.java
new file mode 100644
index 0000000..c1856e6
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Activator.java
@@ -0,0 +1,50 @@
+package trac304ot;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "Trac304ot";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Team304ot.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Team304ot.java
new file mode 100644
index 0000000..18e6c97
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Trac304ot/src/trac304ot/Team304ot.java
@@ -0,0 +1,16 @@
+/**
+ * 
+ */
+package trac304ot;
+
+import base fragment304.FragClass;
+
+/**
+ * @author stephan
+ *
+ */
+public team class Team304ot {
+	protected class Role playedBy FragClass {
+		
+	}
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.project
new file mode 100644
index 0000000..266b92c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>WrongBaseImport1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c5d233c
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test wrong base import Plug-in
+Bundle-SymbolicName: WrongBaseImport1; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.objectteams.otequinox,
+ Trac18b,
+ org.eclipse.core.runtime
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/plugin.xml
new file mode 100644
index 0000000..13fbd6b
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="Trac18b">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="WrongBaseImportTeam1"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/src/WrongBaseImportTeam1.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/src/WrongBaseImportTeam1.java
new file mode 100644
index 0000000..6ce2441
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport1/src/WrongBaseImportTeam1.java
@@ -0,0 +1,5 @@
+import base org.eclipse.objectteams.otequinox.TransformerPlugin;
+
+public team class WrongBaseImportTeam1 {
+	public class WrongRole playedBy TransformerPlugin {}
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.classpath
new file mode 100644
index 0000000..b70b156
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.project
new file mode 100644
index 0000000..11fe442
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>WrongBaseImport2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+	</natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6b8c992
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test wrong base import Plug-in
+Bundle-SymbolicName: WrongBaseImport2; singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.objectteams.otequinox,
+ Trac18b
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/build.properties
new file mode 100644
index 0000000..0d3d3a7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/plugin.xml b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/plugin.xml
new file mode 100644
index 0000000..ed5ab4e
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.objectteams.otequinox.aspectBindings">
+      <aspectBinding
+            icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/calloutbinding_obj.gif">
+         <basePlugin
+               icon="platform:/plugin/org.eclipse.pde.ui/icons/obj16/plugin_obj.gif"
+               id="org.eclipse.objectteams.otequinox">
+         </basePlugin>
+         <team
+               activation="ALL_THREADS"
+               class="WrongBaseImportTeam2"
+               icon="platform:/plugin/org.eclipse.objectteams.otdt.ui/icons/ot/team_obj.gif">
+         </team>
+      </aspectBinding>
+   </extension>
+
+</plugin>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/src/WrongBaseImportTeam2.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/src/WrongBaseImportTeam2.java
new file mode 100644
index 0000000..3953407
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/WrongBaseImport2/src/WrongBaseImportTeam2.java
@@ -0,0 +1,5 @@
+import base trac18b.api.PublicBase;
+
+public team class WrongBaseImportTeam2 {
+	protected class WrongRole playedBy PublicBase {}
+}
\ No newline at end of file
