diff --git a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/AllSuites.java b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/AllSuites.java
index abe8844..e09b760 100644
--- a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/AllSuites.java
+++ b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/AllSuites.java
@@ -11,13 +11,14 @@
  *******************************************************************************/
 /*
  *  $RCSfile: AllSuites.java,v $
- *  $Revision: 1.3 $  $Date: 2004/06/09 22:47:00 $ 
+ *  $Revision: 1.4 $  $Date: 2004/08/10 17:52:18 $ 
  */
 import org.eclipse.jem.tests.beaninfo.BeanInfoSuite;
 import org.eclipse.jem.tests.instantiation.InstantiationSuite;
 import org.eclipse.jem.tests.modelListeners.ListenersSuite;
 import org.eclipse.jem.tests.proxy.ide.IDEProxySuite;
 import org.eclipse.jem.tests.proxy.initParser.InitParserSuite;
+import org.eclipse.jem.tests.proxy.initParser.tree.ASTParserSuite;
 import org.eclipse.jem.tests.proxy.remote.RemoteProxySuite;
 
 import junit.framework.Test;
@@ -27,6 +28,7 @@
 	// Testa cases to be include in the suite
 	private static Class suitesList[] = {
 		InitParserSuite.class,  
+		ASTParserSuite.class,
 		RemoteProxySuite.class,
 		IDEProxySuite.class,
 		BeanInfoSuite.class,
diff --git a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java
index a947f2d..172a7ba 100644
--- a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java
+++ b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/JavaProjectUtil.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaProjectUtil.java,v $
- *  $Revision: 1.7 $  $Date: 2004/07/16 15:33:57 $ 
+ *  $Revision: 1.8 $  $Date: 2004/08/10 17:52:18 $ 
  */
 
 
@@ -121,7 +121,7 @@
 					e.printStackTrace();
 				}
 			}
-		}, project, 0, pm);
+		}, workspace.getRoot(), 0, pm);
 		
 		return project;
 	}
@@ -241,7 +241,7 @@
 					project.setRawClasspath(newRaw, new SubProgressMonitor(monitor, 100));
 				}
 			}
-		}, project.getProject(), 0, pm);
+		}, workspace.getRoot(), 0, pm);
 	}
 	
 	public static void waitForAutoBuild() throws CoreException {
diff --git a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/TestStandard.java b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/TestStandard.java
index bd67dc0..6407481 100644
--- a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/TestStandard.java
+++ b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/TestStandard.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: TestStandard.java,v $
- *  $Revision: 1.3 $  $Date: 2004/02/04 21:25:31 $ 
+ *  $Revision: 1.4 $  $Date: 2004/08/10 17:52:18 $ 
  */
 import java.io.IOException;
 
@@ -54,7 +54,7 @@
 		assertTrue(integerType.isKindOf(objectType));		
 	}
 	
-	public void testInvoke() throws ThrowableProxy {		
+	public void testMethodInvoke() throws ThrowableProxy {		
 		IBeanTypeProxy integerType = proxyTypeFactory.getBeanTypeProxy("java.lang.Integer"); //$NON-NLS-1$		
 		IMethodProxy mthd = integerType.getMethodProxy("valueOf", "java.lang.String"); //$NON-NLS-1$ //$NON-NLS-2$
 		assertNotNull(mthd);
@@ -71,7 +71,27 @@
 			assertEquals("java.lang.IllegalArgumentException", e.getTypeProxy().getTypeName()); //$NON-NLS-1$
 		}						
 	}
-	
+
+	public void testInvoke() throws ThrowableProxy {
+		// Technically invokables should be used for one-shot usage, but here to test the invoke correctly
+		// it will be used twice. This is not an error, just overhead.
+		IBeanTypeProxy integerType = proxyTypeFactory.getBeanTypeProxy("java.lang.Integer"); //$NON-NLS-1$		
+		IInvokable invokable = integerType.getInvokable("valueOf", "java.lang.String"); //$NON-NLS-1$ //$NON-NLS-2$
+		assertNotNull(invokable);
+		// See if we can invoke methods.
+		IIntegerBeanProxy anInt = (IIntegerBeanProxy) invokable.invoke(null, proxyFactory.createBeanProxyWith("5")); //$NON-NLS-1$
+		assertNotNull(anInt);
+		assertEquals(5, anInt.intValue());
+		// See if invoke with bad type throws the ExceptionProxy.
+		try {
+			invokable.invoke(null, proxyFactory.createBeanProxyWith(5));
+			fail("Exception not thrown like it should of been.");
+		} catch (ThrowableProxy e) {
+			// We should of gotton the exception. See if it is of the correct type.
+			assertEquals("java.lang.IllegalArgumentException", e.getTypeProxy().getTypeName()); //$NON-NLS-1$
+		}						
+	}
+
 	public void testSimpleInitString() throws ThrowableProxy, InstantiationException {
 		IBeanTypeProxy integerType = proxyTypeFactory.getBeanTypeProxy("java.lang.Integer"); //$NON-NLS-1$				
 		// See if we can create it from an initialization string.
@@ -385,6 +405,27 @@
 		assertEquals((byte)254, ((INumberBeanProxy) byteValue).byteValue());
 	}
 	
+	public void testInvokableAccessors() throws ThrowableProxy {
+		IBeanTypeProxy integerType = proxyTypeFactory.getBeanTypeProxy("java.lang.Integer"); //$NON-NLS-1$				
+		
+		// Test able to access beantype proxy and invoke methods on it. This isn't
+		// the approved way of getting methods, but it tests that method proxies
+		// are created correctly if returned from an invoke method.
+		IBeanTypeProxy classTypeProxy = proxyTypeFactory.getBeanTypeProxy("java.lang.Class"); //$NON-NLS-1$
+		IInvokable getMethodInvokable = classTypeProxy.getInvokable("getMethod", new String[] {"java.lang.String", "[Ljava.lang.Class;"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		// Get the Integer.byteValue() method through an invoke instead of a method factory or bean type.
+		IBeanProxy method = getMethodInvokable.invoke(integerType, new IBeanProxy[] {
+			proxyFactory.createBeanProxyWith("byteValue"), null}); //$NON-NLS-1$
+		assertNotNull(method);
+		assertTrue(method instanceof IMethodProxy);
+		
+		// Now invoke it to see if correct answer comes back.
+		IBeanProxy byteValue = ((IMethodProxy) method).invoke(proxyFactory.createBeanProxyWith(new Integer(254)));
+		assertNotNull(byteValue);
+		assertEquals("byte", byteValue.getTypeProxy().getTypeName()); //$NON-NLS-1$
+		assertEquals((byte)254, ((INumberBeanProxy) byteValue).byteValue());
+	}	
+	
 	public void testCallback() throws ThrowableProxy {
 		System.out.println("--- Starting the callback test ---"); //$NON-NLS-1$
 		IBeanTypeProxy callbackType = proxyTypeFactory.getBeanTypeProxy("org.eclipse.jem.tests.proxy.vm.TestCallback"); //$NON-NLS-1$
@@ -393,8 +434,8 @@
 		IBeanProxy callbackProxy = callbackType.newInstance();
 		TestCallback cb = new TestCallback(testObject, registry);
 		registry.getCallbackRegistry().registerCallback(callbackProxy, cb);
-		IMethodProxy start = callbackType.getMethodProxy("start");	//$NON-NLS-1$
-		IMethodProxy stop = callbackType.getMethodProxy("stop");	//$NON-NLS-1$
+		IInvokable start = callbackType.getInvokable("start");	//$NON-NLS-1$
+		IInvokable stop = callbackType.getInvokable("stop");	//$NON-NLS-1$
 		synchronized(testObject) {
 			start.invokeCatchThrowableExceptions(callbackProxy);
 			try {
diff --git a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/initParser/tree/ASTTreeInitStringParserTestHelper.java b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/initParser/tree/ASTTreeInitStringParserTestHelper.java
index 6988c28..8a0af40 100644
--- a/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/initParser/tree/ASTTreeInitStringParserTestHelper.java
+++ b/tests/org.eclipse.jem.tests/javatests/org/eclipse/jem/tests/proxy/initParser/tree/ASTTreeInitStringParserTestHelper.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: ASTTreeInitStringParserTestHelper.java,v $
- *  $Revision: 1.8 $  $Date: 2004/05/20 15:41:56 $ 
+ *  $Revision: 1.9 $  $Date: 2004/08/10 17:52:18 $ 
  */
 package org.eclipse.jem.tests.proxy.initParser.tree;
 
@@ -37,7 +37,7 @@
  */
 public class ASTTreeInitStringParserTestHelper extends AbstractInitStringParserTestHelper {
 
-	private static final String TEMPLATE_CLASS = "public class TEMPLATE '{'\n  public void test() '{'\n    String.valueOf({0});\n  }\n}";
+	private static final String TEMPLATE_CLASS = "public class TEMPLATE '{'\n  public void test() '{'\n    String.valueOf({0});\t// a line comment\n  }\n}";
 	private static final String TEMPLATE_CLASS_IMPORTS = "{0}\npublic class TEMPLATE '{'\n  public void test() '{'\n    String.valueOf({1});\n  }\n}";
 	
 	private IJavaProject project;
