diff --git a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestCase.java b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestCase.java
index 97eb68b..1dc5da1 100644
--- a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestCase.java
+++ b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestCase.java
@@ -31,12 +31,13 @@
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.ScriptableObject;
 
-public class JavaScriptTestCase extends TestCase {
+public class JavaScriptTestCase extends TestCase{
 
 	private Context context;
 	private ScriptableObject globalScope;
 
 	private String testCaseName;
+	private String testFunctionName;
 	private Collection<?> scripts;
 	private ClassLoader applicationClassLoader;
 	private ClassLoader originalApplicationClassLoader;
@@ -47,7 +48,6 @@
 	static {
 		String rhinoDebug = System.getProperty("rhino.debug"); 
 		if ( rhinoDebug != null) {
-			Class<?> c = null;
 			try {
 				Class.forName("org.eclipse.wst.jsdt.debug.rhino.debugger.RhinoDebugger"); //$NON-NLS-1$
 				DebugUtil.debug(rhinoDebug);
@@ -61,16 +61,20 @@
 		this(null, null, null, null);
 	}
 
-	public JavaScriptTestCase(String name, String testCaseName) {
-		this(name, testCaseName, null, null);
+	public JavaScriptTestCase(String testFunctionName, String testCaseName) {
+		this(testFunctionName, testCaseName, null, null);
 	}
 
-	public JavaScriptTestCase(String name, String testCaseName, ClassLoader applicationClassLoader) {
-		this(name, testCaseName, null, applicationClassLoader);
+	public JavaScriptTestCase(String testFunctionName, String testCaseName, ClassLoader applicationClassLoader) {
+		this(testFunctionName, testCaseName, null, applicationClassLoader);
 	}
 
-	public JavaScriptTestCase(String name, String testCaseName, Collection<?> scripts, ClassLoader applicationClassLoader) {
-		super(name);
+	public JavaScriptTestCase(String testFunctionName, String testCaseName, Collection<?> scripts, ClassLoader applicationClassLoader) {
+		super(testFunctionName + " (" + testCaseName + ")"); 
+		// this is done to create a name that is usable like the typical classname/methodname id.
+		// The UI hides everything after the brackets
+		
+		this.testFunctionName = testFunctionName;
 		this.testCaseName = testCaseName;
 		this.scripts = scripts;
 		this.applicationClassLoader = applicationClassLoader;
@@ -156,7 +160,7 @@
 			super.runTest();
 			return;
 		}
-		ScriptableObject testCaseInstance = (ScriptableObject) createJavaScriptTestCaseInstance(getName());
+		ScriptableObject testCaseInstance = (ScriptableObject) createJavaScriptTestCaseInstance(testFunctionName);
 		BaseFunction runMethod = (BaseFunction) ScriptableObject.getProperty(testCaseInstance, "run");
 		runMethod.call(context, globalScope, testCaseInstance, new Object[0]);
 	}
diff --git a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestSuite.java b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestSuite.java
index ccdde2b..74bcdd9 100644
--- a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestSuite.java
+++ b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/JavaScriptTestSuite.java
@@ -22,8 +22,15 @@
 
 public class JavaScriptTestSuite extends TestSuite {
 
-	private Collection<?> scripts;
-	private ClassLoader applicationClassLoader;
+
+	public JavaScriptTestSuite() {
+		super();
+	}
+	
+	public JavaScriptTestSuite(String testCaseName) {
+		super(testCaseName);
+	}
+	
 
 	public JavaScriptTestSuite(String testCaseName, Collection<?> scripts) {
 		this(testCaseName, scripts, null);
@@ -31,17 +38,14 @@
 
 	public JavaScriptTestSuite(String testCaseName, Collection<?> scripts, ClassLoader applicationClassLoader) {
 		super(testCaseName);
-		this.scripts = scripts;
-		this.applicationClassLoader = applicationClassLoader;
-
 		try {
-			findTests();
+			findTests(scripts, applicationClassLoader);
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}
 	}
 
-	private void findTests() throws Exception {
+	protected void findTests(Collection<?> scripts, ClassLoader applicationClassLoader) throws Exception {
 		JavaScriptTestCase testCase = new JavaScriptTestCase(null, getName(), scripts, applicationClassLoader);
 		testCase.setUp();
 		try {
diff --git a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/assert.js b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/assert.js
index 5b3de07..ff54685 100644
--- a/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/assert.js
+++ b/bundles/org.eclipse.e4.languages.javascript.junit/src/org/eclipse/e4/languages/javascript/junit/assert.js
@@ -70,8 +70,8 @@
 		}
 		if (expected === value)
 			return;
-		var expectedMessage = '- expected: [' + expected + '] but was [' + value + '].';
-		Assert.fail(message ? message : 'assertSame failed') + expectedMessage;
+		var expectedMessage = ' - expected: [' + expected + '] but was [' + value + '].';
+		Assert.fail(message ? message : 'assertSame failed' + expectedMessage);
 	},
 	assertNotSame : function(message, expected, value) {
 		if (arguments.length != 3) {
@@ -92,8 +92,8 @@
 			return;
 		if (expected !== null && typeof expected === 'object' && typeof expected.equals === 'function' && expected.equals(value))
 			return;
-		var expectedMessage = '- expected: [' + expected + '] but was [' + value + '].';
-		Assert.fail(message ? message : 'assertEquals failed') + expectedMessage;
+		var expectedMessage = ' - expected: [' + expected + '] but was [' + value + '].';
+		Assert.fail(message ? message : 'assertEquals failed' + expectedMessage);
 	},
 	assertNotEquals : function(message, expected, value) {
 		if (arguments.length != 3) {
@@ -168,7 +168,7 @@
 		}
 	}
 };
-TestCase.extend = function(testCaseName, protoObject) {
+TestCase.create = function(testCaseName, protoObject) {
 	var F = function(testName) {
 		TestCase.call(this, testName);
 	};
