diff --git a/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.JavaScript b/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.js
similarity index 100%
rename from plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.JavaScript
rename to plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.js
diff --git a/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.py b/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.py
new file mode 100644
index 0000000..737a5c1
--- /dev/null
+++ b/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.py
@@ -0,0 +1,135 @@
+import unittest
+import warnings
+import sys
+from unittest.signals import registerResult
+
+MOD_org_eclipse_ease_lang_unittest_UnitTestModule = loadModule("/Unittest")
+
+class EASETestResult(unittest.result.TestResult):
+    def __init__(self, stream, descriptions, verbosity):
+        super(EASETestResult, self).__init__(stream, descriptions, verbosity)
+        self.stream = stream
+        self.showAll = verbosity > 1
+        self.dots = verbosity == 1
+        self.descriptions = descriptions
+       
+    def getUnitTestModule(self):
+        return MOD_org_eclipse_ease_lang_unittest_UnitTestModule
+       
+    def startTest(self, test):
+        super(EASETestResult, self).startTest(test)
+        self.getUnitTestModule().startTest(test._testMethodName, test.shortDescription())
+       
+    def stopTest(self, test):
+        self.getUnitTestModule().endTest()
+ 
+    def addError(self, test, err):
+        try:
+            if (hasattr(err[1], 'java_exception')):
+                if ("org.eclipse.ease.lang.unittest.AssertionException" == err[1].java_exception.getClass().getName()):
+                    self.addFailure(test, (AssertionError, AssertionError(err[1].java_exception.getMessage()), err[2]))
+                    return
+        except:
+            pass
+
+        super(EASETestResult, self).addError(test, err)
+        self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.ERROR, str(err[0].__name__) + ": " + str(err[1]))
+ 
+    def addFailure(self, test, err):
+        super(EASETestResult, self).addFailure(test, err)
+        self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.FAILURE, str(err[1]))
+   
+    def addTestResult(self, type, message):
+        result = org.eclipse.ease.lang.unittest.runtime.IRuntimeFactory.eINSTANCE.createTestResult()
+        result.setStatus(type);
+        result.setMessage(message);
+       
+        try:
+            result.setStackTrace(getScriptEngine().getStackTrace())
+        except Exception:
+            print("could not set stacktrace")
+            pass
+       
+        self.getUnitTestModule().getCurrentTest().getResults().add(result);       
+    
+    def addSkip(self, test, reason):
+        super(EASETestResult, self).addSkip(test, reason)
+        self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.DISABLED, reason)
+ 
+    def addUnexpectedSuccess(self, test):
+        super(EASETestResult, self).addUnexpectedSuccess(test)
+        self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.FAILURE, "We expected an error")
+  
+class EASETestRunner(object):
+    """A test runner class that cooperates with the Eclipse EASE framework.
+    """
+    resultclass = EASETestResult
+
+    def __init__(self, stream=None, descriptions=True, verbosity=1,
+                 failfast=False, buffer=False, resultclass=None, warnings=None):
+        if stream is None:
+            stream = sys.stderr
+        
+        self.stream = stream
+        self.descriptions = descriptions
+        self.verbosity = verbosity
+        self.failfast = failfast
+        self.buffer = buffer
+        self.warnings = warnings
+        if resultclass is not None:
+            self.resultclass = resultclass
+
+    def _makeResult(self):
+        return self.resultclass(self.stream, self.descriptions, self.verbosity)
+
+    def run(self, test):
+        "Run the given test case or test suite."
+        result = self._makeResult()
+        registerResult(result)
+        result.failfast = self.failfast
+        result.buffer = self.buffer
+        with warnings.catch_warnings():
+            if self.warnings:
+                # if self.warnings is set, use it to filter all the warnings
+                warnings.simplefilter(self.warnings)
+                # if the filter is 'default' or 'always', special-case the
+                # warnings from the deprecated unittest methods to show them
+                # no more than once per module, because they can be fairly
+                # noisy.  The -Wd and -Wa flags can be used to bypass this
+                # only when self.warnings is None.
+                if self.warnings in ['default', 'always']:
+                    warnings.filterwarnings('module',
+                            category=DeprecationWarning,
+                            message='Please use assert\w+ instead.')
+            startTestRun = getattr(result, 'startTestRun', None)
+            if startTestRun is not None:
+                startTestRun()
+            try:
+                test(result)
+            finally:
+                stopTestRun = getattr(result, 'stopTestRun', None)
+                if stopTestRun is not None:
+                    stopTestRun()
+        result.printErrors()
+        run = result.testsRun
+
+        expectedFails = unexpectedSuccesses = skipped = 0
+        try:
+            results = map(len, (result.expectedFailures,
+                                result.unexpectedSuccesses,
+                                result.skipped))
+        except AttributeError:
+            pass
+        else:
+            expectedFails, unexpectedSuccesses, skipped = results
+
+        infos = []
+        return result
+   
+if __name__ == "__main__":
+    # Dynamically create test suite to combine test cases
+    tests = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
+    testSuite = unittest.TestSuite(tests)
+    
+    runner = EASETestRunner()
+    runner.run(testSuite)
diff --git a/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner_definitions.py b/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner_definitions.py
new file mode 100644
index 0000000..2bfe9a9
--- /dev/null
+++ b/plugins/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner_definitions.py
@@ -0,0 +1,14 @@
+import functools
+
+class timeout(object):
+
+    def __init__(self, timeout):
+        self.timeout = timeout        
+
+    def __call__(self, fn):
+        @functools.wraps(fn)
+        def decorated(*args, **kwargs):
+            MOD_org_eclipse_ease_lang_unittest_UnitTestModule.setTestTimeout(self.timeout)
+            fn(*args, **kwargs)
+            
+        return decorated
diff --git a/plugins/org.eclipse.ease.lang.unittest/src-gen/org/eclipse/ease/lang/unittest/runtime/impl/TestFile.java b/plugins/org.eclipse.ease.lang.unittest/src-gen/org/eclipse/ease/lang/unittest/runtime/impl/TestFile.java
index 0b7e98d..5762687 100644
--- a/plugins/org.eclipse.ease.lang.unittest/src-gen/org/eclipse/ease/lang/unittest/runtime/impl/TestFile.java
+++ b/plugins/org.eclipse.ease.lang.unittest/src-gen/org/eclipse/ease/lang/unittest/runtime/impl/TestFile.java
@@ -247,7 +247,7 @@
 							if (!fScriptEngine.hasVariable("__EASE_UnitTest_TestRunner")) {
 								// load the unittest runner
 								try {
-									final URL url = new URL("platform:/plugin/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.JavaScript");
+									final URL url = new URL("platform:/plugin/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.js");
 									executionResult = fScriptEngine.executeSync(url);
 									if (executionResult.hasException())
 										getTest("[EASE Testrunner]").addError(executionResult.getException().getMessage(), fScriptEngine);
@@ -256,6 +256,18 @@
 									getTest("[EASE Testrunner]").addError(e.getMessage(), fScriptEngine);
 								}
 							}
+
+						} else if (scriptType.getName().equals("Python")) {
+							// load the unittest runner
+							try {
+								final URL url = new URL("platform:/plugin/org.eclipse.ease.lang.unittest/resources/testrunner/testrunner.py");
+								executionResult = fScriptEngine.executeSync(url);
+								if (executionResult.hasException())
+									getTest("[EASE Testrunner]").addError(executionResult.getException().getMessage(), fScriptEngine);
+
+							} catch (final MalformedURLException e) {
+								getTest("[EASE Testrunner]").addError(e.getMessage(), fScriptEngine);
+							}
 						}
 					}
 				}
