diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.ui/src/org/eclipse/e4/languages/internal/javascript/debug/ui/launching/JavascriptSourceLocator.java b/bundles/org.eclipse.e4.languages.javascript.debug.ui/src/org/eclipse/e4/languages/internal/javascript/debug/ui/launching/JavascriptSourceLocator.java
index d5b43d8..b636923 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.ui/src/org/eclipse/e4/languages/internal/javascript/debug/ui/launching/JavascriptSourceLocator.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.ui/src/org/eclipse/e4/languages/internal/javascript/debug/ui/launching/JavascriptSourceLocator.java
@@ -10,16 +10,28 @@
  *******************************************************************************/
 package org.eclipse.e4.languages.internal.javascript.debug.ui.launching;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.model.IPersistableSourceLocator;
 import org.eclipse.debug.core.model.IStackFrame;
+import org.eclipse.e4.languages.javascript.debug.model.JSDIStackFrame;
+import org.eclipse.e4.languages.javascript.jsdi.ScriptReference;
+import org.eclipse.e4.languages.javascript.jsdi.StackFrame;
 
 /**
  * 
  */
 public class JavascriptSourceLocator implements IPersistableSourceLocator {
 
+	private Map files = new HashMap();
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento()
 	 */
@@ -48,8 +60,31 @@
 	 * @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(org.eclipse.debug.core.model.IStackFrame)
 	 */
 	public Object getSourceElement(IStackFrame stackFrame) {
-		// TODO Auto-generated method stub
+		JSDIStackFrame jsdiStackFrame = (JSDIStackFrame) stackFrame;
+		StackFrame underlyingStackFrame = jsdiStackFrame.getUnderlyingStackFrame();
+		
+		ScriptReference scriptReference = underlyingStackFrame.location().scriptReference();
+		String source = scriptReference.source();
+		
+		File file = (File) files.get(scriptReference);
+		if (file != null)
+			return file;
+		try {
+			file = File.createTempFile("" + scriptReference.hashCode(), "js");
+			
+			FileWriter writer = new FileWriter(file);
+			writer.write(source);
+			writer.close();
+			files.put(scriptReference, file);
+			return file;
+			
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
 		return null;
+
 	}
 
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIProperty.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIProperty.java
new file mode 100644
index 0000000..f79757c
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIProperty.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * 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
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.e4.languages.javascript.debug.model;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IValue;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.e4.languages.javascript.jsdi.PropertiesReference;
+import org.eclipse.e4.languages.javascript.jsdi.Property;
+import org.eclipse.e4.languages.javascript.jsdi.Value;
+
+/**
+ * Default implementation of an {@link IVariable} with-respect-to Javascript debugging
+ * 
+ * @see JSDIValue
+ * @see JSDIStackFrame
+ * @since 1.0
+ */
+public class JSDIProperty extends JSDIDebugElement implements IVariable {
+
+	private Property property;
+
+	private PropertiesReference propertiesReference;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param target
+	 */
+	public JSDIProperty(JSDIValue jsdiValue, PropertiesReference propertiesReference, Property property) {
+		super(jsdiValue.getJSDITarget());
+		this.propertiesReference = propertiesReference;
+		this.property = property;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IVariable#getName()
+	 */
+	public String getName() {
+		return property.name();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName()
+	 */
+	public String getReferenceTypeName() throws DebugException {
+		return "unknown";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IVariable#getValue()
+	 */
+	public IValue getValue() throws DebugException {
+		Value value = propertiesReference.getValue(property);
+		return new JSDIValue(this, value);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IVariable#hasValueChanged()
+	 */
+	public boolean hasValueChanged() throws DebugException {
+		// TODO need to consider this if we want to be able to edit variables
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		if (adapter == JSDIProperty.class) {
+			return this;
+		}
+		return super.getAdapter(adapter);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String)
+	 */
+	public void setValue(String expression) throws DebugException {
+		notSupported("Javascript variables do not support being edited", null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue)
+	 */
+	public void setValue(IValue value) throws DebugException {
+		notSupported("Javascript variables do not support being edited", null);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IValueModification#supportsValueModification()
+	 */
+	public boolean supportsValueModification() {
+		// TODO Do we want to support this?
+		// if so we need to impl verifyValue()*
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String)
+	 */
+	public boolean verifyValue(String expression) throws DebugException {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue)
+	 */
+	public boolean verifyValue(IValue value) throws DebugException {
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIStackFrame.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIStackFrame.java
index 637f831..36ecc82 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIStackFrame.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIStackFrame.java
@@ -10,12 +10,17 @@
  *******************************************************************************/
 package org.eclipse.e4.languages.javascript.debug.model;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IRegisterGroup;
 import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.debug.core.model.IThread;
 import org.eclipse.debug.core.model.IVariable;
 import org.eclipse.e4.languages.javascript.jsdi.StackFrame;
+import org.eclipse.e4.languages.javascript.jsdi.Variable;
 import org.eclipse.osgi.util.NLS;
 
 /**
@@ -33,7 +38,7 @@
 	/**
 	 * The underlying {@link StackFrame}
 	 */
-	private StackFrame stackframe = null;
+	private StackFrame stackFrame = null;
 
 	/**
 	 * Name cache
@@ -48,7 +53,11 @@
 	public JSDIStackFrame(JSDIThread thread, StackFrame stackFrame) {
 		super(thread.getJSDITarget());
 		this.thread = thread;
-		this.stackframe = stackFrame;
+		this.stackFrame = stackFrame;
+	}
+
+	public StackFrame getUnderlyingStackFrame() {
+		return stackFrame;
 	}
 
 	/*
@@ -75,7 +84,7 @@
 	 * @see org.eclipse.debug.core.model.IStackFrame#getLineNumber()
 	 */
 	public int getLineNumber() throws DebugException {
-		return (stackframe.location() != null ? stackframe.location().lineNumber() : -1);
+		return (stackFrame.location() != null ? stackFrame.location().lineNumber() : -1);
 	}
 
 	/*
@@ -85,9 +94,9 @@
 	 */
 	public String getName() throws DebugException {
 		if (name == null) {
-			name = stackframe.location().functionName();
+			name = stackFrame.location().functionName();
 			if (name == null) {
-				NLS.bind(ModelMessages.JSDIStackFrame_stackframe_name, new String[] { stackframe.location().scriptReference().source(), Integer.toString(stackframe.location().lineNumber()) });
+				NLS.bind(ModelMessages.JSDIStackFrame_stackframe_name, new String[] { stackFrame.location().scriptReference().source(), Integer.toString(stackFrame.location().lineNumber()) });
 			}
 		}
 		return name;
@@ -117,7 +126,15 @@
 	 * @see org.eclipse.debug.core.model.IStackFrame#getVariables()
 	 */
 	public IVariable[] getVariables() throws DebugException {
-		return (IVariable[]) stackframe.variables().toArray(new IVariable[stackframe.variables().size()]);
+		List variables = stackFrame.variables();
+
+		List result = new ArrayList(variables.size());
+		for (Iterator iterator = variables.iterator(); iterator.hasNext();) {
+			Variable variable = (Variable) iterator.next();
+			JSDIVariable jsdiVariable = new JSDIVariable(this, stackFrame, variable);
+			result.add(jsdiVariable);
+		}
+		return (IVariable[]) result.toArray(new IVariable[result.size()]);
 	}
 
 	/*
@@ -135,7 +152,7 @@
 	 * @see org.eclipse.debug.core.model.IStackFrame#hasVariables()
 	 */
 	public boolean hasVariables() throws DebugException {
-		return stackframe.variables().size() > 0;
+		return stackFrame.variables().size() > 0;
 	}
 
 	/*
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIThread.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIThread.java
index beb2d21..27c83f2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIThread.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIThread.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.e4.languages.javascript.debug.model;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -109,6 +110,7 @@
 	 */
 	public IStackFrame[] getStackFrames() throws DebugException {
 		if (frames == null) {
+			frames = new ArrayList();
 
 			List threadFrames = thread.frames();
 			for (Iterator iterator = threadFrames.iterator(); iterator.hasNext();) {
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIValue.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIValue.java
index 2716df0..72cdfab 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIValue.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIValue.java
@@ -10,22 +10,35 @@
  *******************************************************************************/
 package org.eclipse.e4.languages.javascript.debug.model;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IValue;
 import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.e4.languages.javascript.jsdi.PropertiesReference;
+import org.eclipse.e4.languages.javascript.jsdi.Property;
+import org.eclipse.e4.languages.javascript.jsdi.Value;
 
 /**
  * Default implementation of
  */
 public class JSDIValue extends JSDIDebugElement implements IValue {
 
-	/**
-	 * Constructor
-	 * 
-	 * @param target
-	 */
-	public JSDIValue(JSDIDebugTarget target) {
-		super(target);
+	private Value value;
+	private String name;
+
+	public JSDIValue(JSDIVariable jsdiVariable, Value value) {
+		super(jsdiVariable.getJSDITarget());
+		this.name = jsdiVariable.getName();
+		this.value = value;
+	}
+
+	public JSDIValue(JSDIProperty jsdiProperty, Value value) {
+		super(jsdiProperty.getJSDITarget());
+		this.name = jsdiProperty.getName();
+		this.value = value;
 	}
 
 	/*
@@ -34,8 +47,7 @@
 	 * @see org.eclipse.debug.core.model.IValue#getReferenceTypeName()
 	 */
 	public String getReferenceTypeName() throws DebugException {
-		// TODO Auto-generated method stub
-		return null;
+		return value.getValueTypeName();
 	}
 
 	/**
@@ -44,8 +56,7 @@
 	 * @return the variable name
 	 */
 	public String getName() {
-		// TODO show actual variable name
-		return "Var";
+		return name;
 	}
 
 	/*
@@ -54,8 +65,7 @@
 	 * @see org.eclipse.debug.core.model.IValue#getValueString()
 	 */
 	public String getValueString() throws DebugException {
-		// TODO Auto-generated method stub
-		return null;
+		return value.toString();
 	}
 
 	/*
@@ -64,8 +74,18 @@
 	 * @see org.eclipse.debug.core.model.IValue#getVariables()
 	 */
 	public IVariable[] getVariables() throws DebugException {
-		// TODO Auto-generated method stub
-		return null;
+		if (!hasVariables())
+			return null;
+		PropertiesReference reference = (PropertiesReference) value;
+
+		List properties = reference.properties();
+		List result = new ArrayList(properties.size());
+		for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
+			Property property = (Property) iterator.next();
+			JSDIProperty jsdiProperty = new JSDIProperty(this, reference, property);
+			result.add(jsdiProperty);
+		}
+		return (IVariable[]) result.toArray(new IVariable[result.size()]);
 	}
 
 	/*
@@ -74,8 +94,7 @@
 	 * @see org.eclipse.debug.core.model.IValue#hasVariables()
 	 */
 	public boolean hasVariables() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
+		return (value instanceof PropertiesReference);
 	}
 
 	/*
@@ -84,7 +103,6 @@
 	 * @see org.eclipse.debug.core.model.IValue#isAllocated()
 	 */
 	public boolean isAllocated() throws DebugException {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIVariable.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIVariable.java
index bd3a641..6313cd2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIVariable.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/model/JSDIVariable.java
@@ -13,6 +13,9 @@
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IValue;
 import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.e4.languages.javascript.jsdi.StackFrame;
+import org.eclipse.e4.languages.javascript.jsdi.Value;
+import org.eclipse.e4.languages.javascript.jsdi.Variable;
 
 /**
  * Default implementation of an {@link IVariable} with-respect-to Javascript debugging
@@ -23,25 +26,19 @@
  */
 public class JSDIVariable extends JSDIDebugElement implements IVariable {
 
-	/**
-	 * The underlying stack frame
-	 */
-	private JSDIStackFrame frame = null;
+	private Variable variable;
 
-	/**
-	 * The underlying value for the variable
-	 */
-	private JSDIValue value = null;
+	private StackFrame stackFrame;
 
 	/**
 	 * Constructor
 	 * 
 	 * @param target
 	 */
-	public JSDIVariable(JSDIDebugTarget target, JSDIStackFrame frame, JSDIValue value) {
-		super(target);
-		this.frame = frame;
-		this.value = value;
+	public JSDIVariable(JSDIStackFrame frame, StackFrame stackFrame, Variable variable) {
+		super(frame.getJSDITarget());
+		this.stackFrame = stackFrame;
+		this.variable = variable;
 	}
 
 	/*
@@ -49,11 +46,8 @@
 	 * 
 	 * @see org.eclipse.debug.core.model.IVariable#getName()
 	 */
-	public String getName() throws DebugException {
-		if (this.value != null) {
-			return this.value.getName();
-		}
-		return null;
+	public String getName() {
+		return variable.name();
 	}
 
 	/*
@@ -62,10 +56,7 @@
 	 * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName()
 	 */
 	public String getReferenceTypeName() throws DebugException {
-		if (this.value != null) {
-			return this.value.getReferenceTypeName();
-		}
-		return null;
+		return "unknown";
 	}
 
 	/*
@@ -74,7 +65,8 @@
 	 * @see org.eclipse.debug.core.model.IVariable#getValue()
 	 */
 	public IValue getValue() throws DebugException {
-		return this.value;
+		Value value = stackFrame.getValue(variable);
+		return new JSDIValue(this, value);
 	}
 
 	/*
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
index 3a6d64d..c9da04d 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
@@ -117,8 +117,14 @@
 	}
 
 	public Object lookup(Long handle) {
+
 		Object result = handles.get(handle);
-		return serialize(handle, result);
+		context.getFactory().enter();
+		try {
+			return serialize(handle, result);
+		} finally {
+			Context.exit();
+		}
 	}
 
 	public Object toJSON() {
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/RhinoDebugger.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/RhinoDebugger.java
index f6033bc..87510ce 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/RhinoDebugger.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/RhinoDebugger.java
@@ -150,7 +150,8 @@
 
 	public synchronized void suspend(Long threadId) {
 		ThreadData threadData = (ThreadData) threadIdToData.get(threadId);
-		threadData.suspend();
+		if (threadData != null)
+			threadData.suspend();
 	}
 
 	public synchronized void suspendAll() {
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/ThreadData.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/ThreadData.java
index f6fc90e..f3bc1af 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/ThreadData.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/debug/rhino/ThreadData.java
@@ -7,6 +7,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.e4.languages.javascript.debug.connect.EventPacket;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.debug.DebugFrame;
 import org.mozilla.javascript.debug.DebuggableScript;
@@ -46,10 +47,22 @@
 		ContextData contextData = new ContextData(threadId, new Long(currentContextId++), debugger);
 		context.setDebugger(debugger, contextData);
 		contexts.push(context);
+		if (contexts.size() == 1)
+			sendThreadEvent("enter");
 	}
 
 	public synchronized void contextReleased(Context context) {
 		contexts.pop();
+		if (contexts.isEmpty())
+			sendThreadEvent("exit");
+	}
+
+	private void sendThreadEvent(String type) {
+		EventPacket threadEvent = new EventPacket("thread");
+		Map body = threadEvent.getBody();
+		body.put("type", type);
+		body.put("threadId", threadId);
+		debugger.sendEvent(threadEvent);
 	}
 
 	public synchronized boolean hasContext() {
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Value.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Value.java
index 59b492d..2475879 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Value.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Value.java
@@ -17,4 +17,6 @@
  */
 public interface Value extends Mirror {
 
+	String getValueTypeName();
+
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Variable.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Variable.java
index c96be33..a2c23fe 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Variable.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/jsdi/Variable.java
@@ -15,7 +15,7 @@
  * 
  * @since 1.0
  */
-public interface Variable extends Mirror {
+public interface Variable extends Property {
 	public boolean isArgument();
 
 	/**
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/BooleanValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/BooleanValueImpl.java
index cbe077f..c5eb494 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/BooleanValueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/BooleanValueImpl.java
@@ -20,4 +20,8 @@
 	public boolean value() {
 		return value.booleanValue();
 	}
+
+	public String getValueTypeName() {
+		return "boolean";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NullValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NullValueImpl.java
index 582fc61..cdb5bed 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NullValueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NullValueImpl.java
@@ -32,4 +32,8 @@
 	public String toString() {
 		return "null";
 	}
+
+	public String getValueTypeName() {
+		return "null";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NumberValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NumberValueImpl.java
index 745722a..6ecd9a2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NumberValueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/NumberValueImpl.java
@@ -20,4 +20,8 @@
 	public Number value() {
 		return value;
 	}
+
+	public String getValueTypeName() {
+		return "number";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ObjectReferenceImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ObjectReferenceImpl.java
index b9c49de..7561f0c 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ObjectReferenceImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ObjectReferenceImpl.java
@@ -29,8 +29,8 @@
 	public ObjectReferenceImpl(VirtualMachineImpl vm, Map body, StackFrameImpl frame) {
 		super(vm, body, frame);
 		this.className = (String) body.get("className");
-		this.constructorRef = (Number) ((Map) body.get("constructor")).get("ref");
-		this.prototypeRef = (Number) ((Map) body.get("prototype")).get("ref");
+		this.constructorRef = (Number) ((Map) body.get("constructorFunction")).get("ref");
+		this.prototypeRef = (Number) ((Map) body.get("prototypeObject")).get("ref");
 	}
 
 	public String className() {
@@ -44,4 +44,8 @@
 	public ObjectReference prototype() {
 		return (ObjectReference) frame.lookupValue(prototypeRef);
 	}
+
+	public String getValueTypeName() {
+		return "object";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/PropertiesReferenceImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/PropertiesReferenceImpl.java
index be34e8e..9831089 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/PropertiesReferenceImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/PropertiesReferenceImpl.java
@@ -24,7 +24,7 @@
  * 
  * @since 1.0
  */
-public class PropertiesReferenceImpl extends MirrorImpl implements PropertiesReference {
+abstract public class PropertiesReferenceImpl extends MirrorImpl implements PropertiesReference {
 
 	protected StackFrameImpl frame;
 	private final List properties = new ArrayList();
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StackFrameImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StackFrameImpl.java
index 5fdda61..a964af6 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StackFrameImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StackFrameImpl.java
@@ -115,7 +115,8 @@
 	 *             if the type description in the map is unknown
 	 */
 	private Value createValue(Map body) throws IllegalStateException {
-		String type = (String) body.get(JSONConstants.TYPE);
+		Map lookup = (Map) body.get(JSONConstants.LOOKUP);
+		String type = (String) lookup.get(JSONConstants.TYPE);
 		// "undefined", "null", "boolean", "number", "string", "object", "function"
 
 		if (type.equals(JSONConstants.UNDEFINED))
@@ -123,17 +124,17 @@
 		else if (type.equals(JSONConstants.NULL))
 			return vm.nullValue;
 		else if (type.equals(JSONConstants.BOOLEAN))
-			return new BooleanValueImpl(vm, body);
+			return new BooleanValueImpl(vm, lookup);
 		else if (type.equals(JSONConstants.NUMBER))
-			return new NumberValueImpl(vm, body);
+			return new NumberValueImpl(vm, lookup);
 		else if (type.equals(JSONConstants.STRING))
-			return new StringValueImpl(vm, body);
+			return new StringValueImpl(vm, lookup);
 		else if (type.equals(JSONConstants.OBJECT))
-			return new ObjectReferenceImpl(vm, body, this);
+			return new ObjectReferenceImpl(vm, lookup, this);
 		else if (type.equals(JSONConstants.FUNCTION))
-			return new FunctionReferenceImpl(vm, body, this);
+			return new FunctionReferenceImpl(vm, lookup, this);
 		else if (type.equals(JSONConstants.ARRAY))
-			return new ArrayReferenceImpl(vm, body, this);
+			return new ArrayReferenceImpl(vm, lookup, this);
 		else
 			throw new IllegalStateException();
 	}
@@ -176,11 +177,12 @@
 		}
 		Request request = new Request(JSONConstants.LOOKUP);
 		request.getArguments().put(JSONConstants.THREAD_ID, threadId);
-		request.getArguments().put(JSONConstants.FRAME_ID, threadId);
+		request.getArguments().put(JSONConstants.FRAME_ID, frameId);
 		request.getArguments().put(JSONConstants.HANDLE, ref);
 		try {
 			Response response = vm.sendRequest(request, 30000);
-			List properties = (List) response.getBody().get(JSONConstants.PROPERTIES);
+			Map lookup = (Map) response.getBody().get(JSONConstants.LOOKUP);
+			List properties = (List) lookup.get(JSONConstants.PROPERTIES);
 			variables = new ArrayList();
 			for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
 				Map property = (Map) iterator.next();
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StringValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StringValueImpl.java
index 90f98b6..aea85c3 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StringValueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/StringValueImpl.java
@@ -49,4 +49,8 @@
 	public String toString() {
 		return value();
 	}
+
+	public String getValueTypeName() {
+		return "string";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ThreadReferenceImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ThreadReferenceImpl.java
index 1641b8c..c24975c 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ThreadReferenceImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/ThreadReferenceImpl.java
@@ -16,8 +16,6 @@
 public class ThreadReferenceImpl extends MirrorImpl implements ThreadReference {
 
 	private Number threadId;
-	private VirtualMachineImpl vm;
-
 	private List frames = new ArrayList();
 	private int status = THREAD_STATUS_RUNNING;
 	private boolean suspended;
@@ -29,9 +27,19 @@
 		super(vm);
 		this.threadId = (Number) jsonThread.get("threadId");
 		this.name = (String) jsonThread.get("name");
+		if (this.name == null)
+			this.name = "Rhino thread - " + threadId;
 		this.suspended = "suspended".equals(jsonThread.get("state"));
 	}
 
+	private ThreadReferenceImpl(VirtualMachineImpl vm, Long threadId) {
+		super(vm);
+		this.threadId = threadId;
+		this.name = "Rhino thread - " + threadId;
+		this.status = THREAD_STATUS_ZOMBIE;
+		this.frames = Collections.EMPTY_LIST;
+	}
+
 	public synchronized int frameCount() {
 		frames();
 		return frames.size();
@@ -43,6 +51,9 @@
 	}
 
 	public synchronized List frames() {
+		if (status == THREAD_STATUS_ZOMBIE)
+			return frames;
+
 		if (!suspended)
 			throw new IllegalStateException("not suspended");
 
@@ -50,6 +61,7 @@
 			return frames;
 
 		Request request = new Request("frames");
+		request.getArguments().put("threadId", threadId);
 		try {
 			Response response = vm.sendRequest(request, 30000);
 			List frameIds = (List) response.getBody().get("frames");
@@ -74,7 +86,7 @@
 	private StackFrameImpl createStackFrame(Long frameId) {
 		Request request = new Request("frame");
 		request.getArguments().put("threadId", threadId);
-		request.getArguments().put("frameId", threadId);
+		request.getArguments().put("frameId", frameId);
 		try {
 			Response response = vm.sendRequest(request, 30000);
 			Map jsonFrame = (Map) response.getBody().get("frame");
@@ -105,6 +117,9 @@
 	}
 
 	public synchronized void resume() {
+		if (status == THREAD_STATUS_ZOMBIE) {
+			return;
+		}
 		Request request = new Request("continue");
 		request.getArguments().put("threadId", threadId);
 		if (step != null) {
@@ -126,10 +141,16 @@
 	}
 
 	public void suspend() {
+		if (status == THREAD_STATUS_ZOMBIE) {
+			return;
+		}
+
 		Request request = new Request("suspend");
 		request.getArguments().put("threadId", threadId);
 		try {
 			vm.sendRequest(request, 30000);
+			// TODO: really make this work
+			suspended = true;
 		} catch (DisconnectException e) {
 			e.printStackTrace();
 		} catch (TimeoutException e) {
@@ -142,7 +163,7 @@
 	}
 
 	public synchronized int status() {
-		return this.status;
+		return status;
 	}
 
 	public synchronized String getStep() {
@@ -153,4 +174,8 @@
 		this.step = step;
 	}
 
+	public static ThreadReferenceImpl zombie(VirtualMachineImpl vm, Long threadId) {
+		return new ThreadReferenceImpl(vm, threadId);
+	}
+
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/UndefinedValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/UndefinedValueImpl.java
index c00a472..1eb93dc 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/UndefinedValueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/UndefinedValueImpl.java
@@ -31,4 +31,8 @@
 	public String toString() {
 		return "undefined";
 	}
+
+	public String getValueTypeName() {
+		return "undefined";
+	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VariableImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VariableImpl.java
index 15ab9e5..5780855 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VariableImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VariableImpl.java
@@ -15,7 +15,6 @@
 	}
 
 	public boolean isArgument() {
-		// TODO Auto-generated method stub
 		return false;
 	}
 
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VirtualMachineImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VirtualMachineImpl.java
index 6bf85be..8341ef6 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VirtualMachineImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/VirtualMachineImpl.java
@@ -100,8 +100,15 @@
 	 * @param scriptId
 	 * @param script
 	 */
-	public synchronized void addScript(Long scriptId, ScriptReferenceImpl script) {
-		scripts.put(scriptId, script);
+	public synchronized ScriptReferenceImpl addScript(Long scriptId) {
+		ScriptReferenceImpl script = (ScriptReferenceImpl) scripts.get(scriptId);
+		if (script != null)
+			return script;
+
+		script = createScriptReference(scriptId);
+		if (script != null)
+			scripts.put(scriptId, script);
+		return script;
 	}
 
 	/**
@@ -173,15 +180,33 @@
 		return new ArrayList(threads.values());
 	}
 
+	public synchronized ThreadReferenceImpl addThread(Long threadId) {
+		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads.get(threadId);
+		if (thread != null)
+			return thread;
+
+		thread = createThreadReference(threadId);
+		if (thread != null)
+			threads.put(threadId, thread);
+		return thread;
+	}
+
+	public synchronized ThreadReferenceImpl removeThread(Long threadId) {
+		return (ThreadReferenceImpl) threads.remove(threadId);
+	}
+
 	/**
 	 * @param threadId
 	 * @return
 	 */
 	private ThreadReferenceImpl createThreadReference(Long threadId) {
 		Request request = new Request(JSONConstants.THREAD);
+		request.getArguments().put(JSONConstants.THREAD_ID, threadId);
 		try {
 			Response response = sendRequest(request, 30000);
 			Map jsonThread = (Map) response.getBody().get(JSONConstants.THREAD);
+			if (jsonThread == null)
+				return ThreadReferenceImpl.zombie(this, threadId);
 			return new ThreadReferenceImpl(this, jsonThread);
 		} catch (DisconnectException e) {
 			e.printStackTrace();
@@ -196,7 +221,13 @@
 	 * @return
 	 */
 	public synchronized ThreadReferenceImpl getThread(Long threadId) {
-		return (ThreadReferenceImpl) threads.get(threadId);
+		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads.get(threadId);
+		if (thread == null) {
+			thread = createThreadReference(threadId);
+			if (thread != null)
+				threads.put(threadId, thread);
+		}
+		return thread;
 	}
 
 	/*
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/event/EventQueueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/event/EventQueueImpl.java
index 52b0f94..e28d2a3 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/event/EventQueueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug/src/org/eclipse/e4/languages/javascript/rhino/jsdi/event/EventQueueImpl.java
@@ -7,8 +7,6 @@
 import org.eclipse.e4.languages.javascript.debug.JSONConstants;
 import org.eclipse.e4.languages.javascript.debug.connect.DisconnectException;
 import org.eclipse.e4.languages.javascript.debug.connect.EventPacket;
-import org.eclipse.e4.languages.javascript.debug.connect.Request;
-import org.eclipse.e4.languages.javascript.debug.connect.Response;
 import org.eclipse.e4.languages.javascript.debug.connect.TimeoutException;
 import org.eclipse.e4.languages.javascript.jsdi.Location;
 import org.eclipse.e4.languages.javascript.jsdi.ThreadReference;
@@ -73,8 +71,7 @@
 					eventSet.setThread(thread);
 
 					Long scriptId = new Long(((Number) event.getBody().get(JSONConstants.SCRIPT_ID)).longValue());
-					ScriptReferenceImpl script = loadScriptReference(scriptId);
-					vm.addScript(scriptId, script);
+					ScriptReferenceImpl script = vm.addScript(scriptId);
 
 					List scriptLoadRequests = eventRequestManager.scriptLoadRequests();
 					for (Iterator iterator = scriptLoadRequests.iterator(); iterator.hasNext();) {
@@ -94,18 +91,20 @@
 					Location location = script.lineLocation(lineNumber);
 
 					List jsonBreakpoints = (List) event.getBody().get(JSONConstants.BREAKPOINTS);
-					List breakpoints = new ArrayList(jsonBreakpoints.size());
-					for (Iterator iterator = jsonBreakpoints.iterator(); iterator.hasNext();) {
-						Number breakpointId = (Number) iterator.next();
-						breakpoints.add(new Long(breakpointId.longValue()));
-					}
+					if (jsonBreakpoints != null) {
+						List breakpoints = new ArrayList(jsonBreakpoints.size());
+						for (Iterator iterator = jsonBreakpoints.iterator(); iterator.hasNext();) {
+							Number breakpointId = (Number) iterator.next();
+							breakpoints.add(new Long(breakpointId.longValue()));
+						}
 
-					List breakpointRequests = eventRequestManager.breakpointRequests();
-					for (Iterator iterator = breakpointRequests.iterator(); iterator.hasNext();) {
-						BreakpointRequestImpl request = (BreakpointRequestImpl) iterator.next();
-						ThreadReference requestThread = request.thread();
-						if (request.isEnabled() && (requestThread == null || thread == requestThread) && breakpoints.contains(request.breakpointId()))
-							eventSet.add(new BreakpointEventImpl(vm, thread, location, request));
+						List breakpointRequests = eventRequestManager.breakpointRequests();
+						for (Iterator iterator = breakpointRequests.iterator(); iterator.hasNext();) {
+							BreakpointRequestImpl request = (BreakpointRequestImpl) iterator.next();
+							ThreadReference requestThread = request.thread();
+							if (request.isEnabled() && (requestThread == null || thread == requestThread) && breakpoints.contains(request.breakpointId()))
+								eventSet.add(new BreakpointEventImpl(vm, thread, location, request));
+						}
 					}
 
 					String stepType = (String) event.getBody().get(JSONConstants.STEP_TYPE);
@@ -126,6 +125,11 @@
 								eventSet.add(new StepEventImpl(vm, thread, location, request));
 						}
 					}
+					if (eventSet.isEmpty()) {
+						// debugger case
+						thread.markSuspended(false);
+						continue;
+					}
 
 				} else if (eventName.equals(JSONConstants.EXCEPTION)) {
 					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
@@ -147,18 +151,19 @@
 					}
 				} else if (eventName.equals(JSONConstants.THREAD)) {
 					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
-					ThreadReferenceImpl thread = vm.getThread(threadId);
-					eventSet.setThread(thread);
 
 					String type = (String) event.getBody().get(JSONConstants.TYPE);
 
 					if (JSONConstants.ENTER.equals(type)) {
+						ThreadReferenceImpl thread = vm.addThread(threadId);
+						eventSet.setThread(thread);
 						List threadEnterRequests = eventRequestManager.threadEnterRequests();
 						for (Iterator iterator = threadEnterRequests.iterator(); iterator.hasNext();) {
 							ThreadEnterRequest request = (ThreadEnterRequest) iterator.next();
 							eventSet.add(new ThreadEnterEventImpl(vm, thread, request));
 						}
 					} else if (JSONConstants.EXIT.equals(type)) {
+						ThreadReferenceImpl thread = vm.removeThread(threadId);
 						List threadExitRequests = eventRequestManager.threadExitRequests();
 						for (Iterator iterator = threadExitRequests.iterator(); iterator.hasNext();) {
 							ThreadExitRequest request = (ThreadExitRequest) iterator.next();
@@ -179,24 +184,4 @@
 		}
 		return null;
 	}
-
-	/**
-	 * Creates a new {@link ScriptReferenceImpl}
-	 * 
-	 * @param scriptId
-	 * @return a new {@link ScriptReferenceImpl} or <code>null</code> if the VM has been disconnected or times out
-	 */
-	private ScriptReferenceImpl loadScriptReference(Long scriptId) {
-		Request request = new Request(JSONConstants.SCRIPT);
-		request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
-		try {
-			Response response = vm.sendRequest(request);
-			return new ScriptReferenceImpl(vm, response.getBody());
-		} catch (TimeoutException e) {
-			e.printStackTrace();
-		} catch (DisconnectException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
 }
diff --git a/bundles/org.eclipse.e4.languages.javascript/src/org/eclipse/e4/internal/languages/javascript/Activator.java b/bundles/org.eclipse.e4.languages.javascript/src/org/eclipse/e4/internal/languages/javascript/Activator.java
index 56268f4..e2b87dc 100644
--- a/bundles/org.eclipse.e4.languages.javascript/src/org/eclipse/e4/internal/languages/javascript/Activator.java
+++ b/bundles/org.eclipse.e4.languages.javascript/src/org/eclipse/e4/internal/languages/javascript/Activator.java
@@ -131,7 +131,7 @@
 		}
 		
 		if (contextFactory != null && packageAdmin != null) {
-			framework = new JSFrameworkImpl();
+			framework = new JSFrameworkImpl(contextFactory);
 			jsBundleTracker = new JSBundleTracker(context, framework);
 			jsBundleTracker.open();
 			registration = context.registerService(JSFramework.class.getName(), framework, null);
