diff --git a/plugins/org.eclipse.ease.lang.python.py4j/pysrc/py4jdb.py b/plugins/org.eclipse.ease.lang.python.py4j/pysrc/py4jdb.py
index 7bfd0f3..f816d12 100644
--- a/plugins/org.eclipse.ease.lang.python.py4j/pysrc/py4jdb.py
+++ b/plugins/org.eclipse.ease.lang.python.py4j/pysrc/py4jdb.py
@@ -197,6 +197,7 @@
 
         # Caches for currently executed code parts
         self._current_frame = None
+        self._last_exception_frame = None
         self._current_file = None
 
         # Async continuation handling
@@ -206,6 +207,18 @@
         # TODO: Think about a better way to handle step return
         self._return_hack = False
 
+    def getCurrentFrame(self):
+        if self._current_frame is not None:
+        	  return _pyease_PyFrame(self._current_frame)
+        	  
+        return None
+    
+    def getExceptionFrame(self):
+        if self._last_exception_frame is not None:
+        	  return _pyease_PyFrame(self._last_exception_frame)
+
+        return None
+
     def setDebugger(self, debugger):
         '''
         Setter method for self._debugger.
@@ -228,7 +241,9 @@
         '''
         # Pre-filter to avoid issues with library internals
         if not _pyease_ignore_frame(frame):
+            self._current_frame = frame
             _pyease_bdb.Bdb.trace_dispatch(self, frame, event, arg)
+        
         return self.trace_dispatch
 
     def user_line(self, frame):
@@ -259,6 +274,12 @@
         self._continue_func = self.set_step
         self.dispatch(frame, 'return')
 
+    def dispatch_exception(self, frame, arg):
+        if not frame.f_code.co_filename.endswith("bdb.py"):
+            self._last_exception_frame = frame
+        
+        _pyease_bdb.Bdb.dispatch_exception(self, frame, arg)
+        
     def user_exception(self, frame, exc_info):
         '''
         Called when debugger thinks thrown exception is of interest.
@@ -266,9 +287,6 @@
         :param frame:    Current stack frame with exception information.
         :param exc_info:    ignored
         '''
-        # Cache exception
-        if self._debugger:
-            self._debugger.setExceptionStackTrace(_pyease_PyFrame(frame))
 
         self._continue_func = self.set_continue
         self.dispatch(frame, 'exception')
diff --git a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/ICodeTraceFilter.java b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/ICodeTraceFilter.java
index cef8ea8..243e1dd 100644
--- a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/ICodeTraceFilter.java
+++ b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/ICodeTraceFilter.java
@@ -16,6 +16,7 @@
 import org.eclipse.ease.IExecutionListener;
 import org.eclipse.ease.debugging.dispatcher.IEventProcessor;
 import org.eclipse.ease.lang.python.debugger.ICodeTracer;
+import org.eclipse.ease.lang.python.debugger.IPyFrame;
 import org.eclipse.ease.lang.python.debugger.PythonBreakpoint;
 import org.eclipse.ease.lang.python.debugger.PythonDebugger;
 
@@ -49,7 +50,7 @@
 
 	/**
 	 * Resume execution after filter has notified us that execution might need to be stopped.
-	 * 
+	 *
 	 * @param resumeType
 	 *            Resume type for execution continuation.
 	 */
@@ -59,4 +60,18 @@
 	 * Suspend execution after filter has notified us that execution might need to be stopped.
 	 */
 	void suspend();
+
+	/**
+	 * Get the current python frame.
+	 *
+	 * @return current python frame
+	 */
+	IPyFrame getCurrentFrame();
+
+	/**
+	 * Get the python frame of the last thrown exception.
+	 *
+	 * @return last exception python frame
+	 */
+	IPyFrame getExceptionFrame();
 }
diff --git a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebugger.java b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebugger.java
index 2b8bf6e..2c41659 100644
--- a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebugger.java
+++ b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebugger.java
@@ -23,11 +23,15 @@
 import org.eclipse.ease.IDebugEngine;
 import org.eclipse.ease.Script;
 import org.eclipse.ease.ScriptEngineCancellationException;
+import org.eclipse.ease.debugging.ScriptStackTrace;
 import org.eclipse.ease.debugging.events.debugger.IDebuggerEvent;
+import org.eclipse.ease.lang.python.debugger.IPyFrame;
 import org.eclipse.ease.lang.python.debugger.IPythonScriptRegistry;
 import org.eclipse.ease.lang.python.debugger.PythonBreakpoint;
 import org.eclipse.ease.lang.python.debugger.PythonDebugger;
 
+import py4j.Py4JException;
+
 /**
  * Extension of {@link PythonDebugger} with additional {@link ICodeTraceFilter} to lower amount of trace dispatches.
  */
@@ -35,11 +39,8 @@
 	/**
 	 * Extended code tracer doing pre-filtering.
 	 */
-	private ICodeTraceFilter fTraceFilter;
+	private ICodeTraceFilter fPythonDebuggerStub;
 
-	/**
-	 * @see PythonDebugger#PythonDebugger(IDebugEngine, boolean)
-	 */
 	public Py4jDebugger(IDebugEngine engine, boolean showDynamicCode) {
 		super(engine, showDynamicCode);
 	}
@@ -50,8 +51,8 @@
 	 * @param traceFilter
 	 *            Extended code tracer.
 	 */
-	public void setTraceFilter(ICodeTraceFilter traceFilter) {
-		fTraceFilter = traceFilter;
+	public void setPythonDebuggerStub(ICodeTraceFilter traceFilter) {
+		fPythonDebuggerStub = traceFilter;
 	}
 
 	/**
@@ -70,30 +71,32 @@
 				final List<IBreakpoint> breakpoints = fBreakpoints.get(script);
 				if (breakpoints != null) {
 					final List<PythonBreakpoint> pythonBreakpoints = new ArrayList<>();
+
 					for (final IBreakpoint breakpoint : breakpoints) {
-						final int lineno = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
-						pythonBreakpoints.add(new PythonBreakpoint(filename, lineno));
+						final int lineNumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
+						pythonBreakpoints.add(new PythonBreakpoint(filename, lineNumber));
 					}
+
 					return pythonBreakpoints;
 				}
 			}
 		}
 
-		return Collections.<PythonBreakpoint> emptyList();
-
+		return Collections.emptyList();
 	}
 
 	@Override
 	protected void suspend(IDebuggerEvent event) {
-		fTraceFilter.suspend();
-		super.suspend(event);
+		fPythonDebuggerStub.suspend();
 
+		super.suspend(event);
 	}
 
 	@Override
 	protected void resume(int resumeType, Object thread) {
 		super.resume(resumeType, thread);
-		fTraceFilter.resume(resumeType);
+
+		fPythonDebuggerStub.resume(resumeType);
 	}
 
 	@Override
@@ -105,7 +108,8 @@
 				registry.put(script);
 				reference = registry.getReference(script);
 			}
-			return fTraceFilter.run(script, reference);
+
+			return fPythonDebuggerStub.run(script, reference);
 
 		} catch (final Exception e) {
 			/*
@@ -118,10 +122,18 @@
 			if (getThreadState(getThread()).fResumeType == DebugEvent.STEP_END) {
 				throw new ScriptEngineCancellationException();
 			}
+
+			if (e instanceof Py4JException)
+				throw new Py4JException(beautifyExceptionMessage(e.getMessage()));
+
 			throw e;
 		}
 	}
 
+	private String beautifyExceptionMessage(String message) {
+		return message;
+	}
+
 	@Override
 	protected void breakpointAdded(final Script script, final IBreakpoint breakpoint) {
 		final IPythonScriptRegistry registry = getScriptRegistry();
@@ -131,11 +143,10 @@
 
 		final String reference = registry.getReference(script);
 		if (reference != null) {
-			final int linenumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
+			final int lineNumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
 
-			if (linenumber != -1) {
-				fTraceFilter.setBreakpoint(new PythonBreakpoint(reference, linenumber));
-			}
+			if (lineNumber != -1)
+				fPythonDebuggerStub.setBreakpoint(new PythonBreakpoint(reference, lineNumber));
 		}
 	}
 
@@ -148,11 +159,32 @@
 
 		final String reference = registry.getReference(script);
 		if (reference != null) {
-			final int linenumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
+			final int lineNumber = breakpoint.getMarker().getAttribute(IMarker.LINE_NUMBER, -1);
 
-			if (linenumber != -1) {
-				fTraceFilter.removeBreakpoint(new PythonBreakpoint(reference, linenumber));
-			}
+			if (lineNumber != -1)
+				fPythonDebuggerStub.removeBreakpoint(new PythonBreakpoint(reference, lineNumber));
 		}
 	}
+
+	@Override
+	public ScriptStackTrace getStacktrace() {
+		return toStackTrace(fPythonDebuggerStub.getCurrentFrame());
+	}
+
+	@Override
+	public ScriptStackTrace getExceptionStacktrace() {
+		return toStackTrace(fPythonDebuggerStub.getExceptionFrame());
+	}
+
+	private ScriptStackTrace toStackTrace(IPyFrame frame) {
+		final ScriptStackTrace trace = new ScriptStackTrace();
+
+		while (frame != null) {
+			trace.add(new PythonDebugFrame(frame));
+
+			frame = frame.getParent();
+		}
+
+		return trace;
+	}
 }
diff --git a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebuggerEngine.java b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebuggerEngine.java
index a82c470..34c0759 100644
--- a/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebuggerEngine.java
+++ b/plugins/org.eclipse.ease.lang.python.py4j/src/org/eclipse/ease/lang/python/py4j/internal/Py4jDebuggerEngine.java
@@ -27,6 +27,7 @@
 import org.eclipse.ease.lang.python.debugger.IPythonDebugEngine;
 import org.eclipse.ease.lang.python.debugger.PythonDebugger;
 import org.eclipse.ease.lang.python.debugger.PythonEventDispatchJob;
+import org.eclipse.ease.lang.python.debugger.PythonScriptRegistry;
 import org.eclipse.ease.lang.python.debugger.ResourceHelper;
 import org.eclipse.ease.lang.python.debugger.model.PythonDebugTarget;
 
@@ -41,7 +42,6 @@
 	public static final String ENGINE_ID = "org.eclipse.ease.lang.python.py4j.debugger.engine";
 
 	private Py4jDebugger fDebugger = null;
-	private ICodeTraceFilter fPyDebugger = null;
 
 	@Override
 	public void setDebugger(final PythonDebugger debugger) {
@@ -56,16 +56,22 @@
 	protected void setupEngine() throws ScriptEngineException {
 		super.setupEngine();
 
+		if (fDebugger == null) {
+			final Py4jDebugger debugger = new Py4jDebugger(this, false);
+			debugger.setScriptRegistry(new PythonScriptRegistry());
+			setDebugger(debugger);
+		}
+
 		// in case we were called using "Run as"
 		if (fDebugger != null) {
 			try {
 				// load python part of debugger
 				final InputStream stream = ResourceHelper.getResourceStream("org.eclipse.ease.lang.python.py4j", "pysrc/py4jdb.py");
-				fPyDebugger = (ICodeTraceFilter) super.internalExecute(new Script("Load Python debugger", stream), null);
+				final ICodeTraceFilter pythonDebugger = (ICodeTraceFilter) super.internalExecute(new Script("Load Python debugger", stream), null);
 
 				// Connect both sides
-				fPyDebugger.setDebugger(fDebugger);
-				fDebugger.setTraceFilter(fPyDebugger);
+				pythonDebugger.setDebugger(fDebugger);
+				fDebugger.setPythonDebuggerStub(pythonDebugger);
 
 			} catch (final Throwable e) {
 				throw new ScriptEngineException("Failed to load Python Debugger", e);
@@ -77,16 +83,17 @@
 	protected void teardownEngine() {
 		super.teardownEngine();
 
-		fPyDebugger = null;
 		fDebugger = null;
 	}
 
 	@Override
 	protected Object internalExecute(final Script script, final String fileName) throws Throwable {
-		if (fDebugger != null)
-			return fDebugger.execute(script);
+		return fDebugger.execute(script);
+	}
 
-		return super.internalExecute(script, fileName);
+	@Override
+	public ScriptStackTrace getStackTrace() {
+		return fDebugger.getStacktrace();
 	}
 
 	@Override
@@ -108,8 +115,7 @@
 
 	@Override
 	public ScriptStackTrace getExceptionStackTrace(Object thread) {
-		// FIXME to be implemented
-		return null;
+		return fDebugger.getExceptionStacktrace();
 	}
 
 	@Override
@@ -134,11 +140,4 @@
 
 		return variables;
 	}
-
-	@Override
-	protected EaseDebugVariable createVariable(String name, Object value) {
-		final EaseDebugVariable variable = super.createVariable(name, value);
-
-		return variable;
-	}
 }
diff --git a/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java b/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
index 6af4766..3bc5e0b 100644
--- a/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
+++ b/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
@@ -53,27 +53,28 @@
 		public PythonDebugFrame(final IPyFrame frame) {
 			super(getScriptRegistry() != null ? getScriptRegistry().getScript(frame.getFilename()) : null, frame.getLineNumber(), TYPE_FILE);
 			fFrame = frame;
-
 		}
 
 		@Override
 		public String getName() {
 			final Script script = getScript();
-			if (script.isDynamic()) {
-				// dynamic script
-				final String title = getScript().getTitle();
-				return (title != null) ? "Dynamic: " + title : "(Dynamic)";
+			if (script != null) {
+				if (script.isDynamic()) {
+					// dynamic script
+					final String title = getScript().getTitle();
+					return (title != null) ? "Dynamic: " + title : "(Dynamic)";
 
-			} else {
-				final Object command = getScript().getCommand();
-				if (command != null) {
-					if (command instanceof IFile)
-						return ((IFile) command).getName();
+				} else {
+					final Object command = getScript().getCommand();
+					if (command != null) {
+						if (command instanceof IFile)
+							return ((IFile) command).getName();
 
-					else if (command instanceof File)
-						return ((File) command).getName();
+						else if (command instanceof File)
+							return ((File) command).getName();
 
-					return command.toString();
+						return command.toString();
+					}
 				}
 			}
 
