Adding NaN support
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.connect/src/org/eclipse/e4/languages/javascript/debug/connect/JSONConstants.java b/bundles/org.eclipse.e4.languages.javascript.debug.connect/src/org/eclipse/e4/languages/javascript/debug/connect/JSONConstants.java
index 4b7b8d7..cf324b4 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.connect/src/org/eclipse/e4/languages/javascript/debug/connect/JSONConstants.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.connect/src/org/eclipse/e4/languages/javascript/debug/connect/JSONConstants.java
@@ -56,6 +56,7 @@
 	public static final String PROTOTYPE_OBJECT = "prototypeObject"; //$NON-NLS-1$
 	public static final String PROTO_OBJECT = "protoObject"; //$NON-NLS-1$
 	public static final String CONSTRUCTOR_FUNCTION = "constructorFunction"; //$NON-NLS-1$
+	public static final String NAN = "NaN"; //$NON-NLS-1$
 
 	// id constants
 	public static final String THREAD_ID = "threadId"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/NaNValueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/NaNValueImpl.java
new file mode 100644
index 0000000..c16bb87
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/NaNValueImpl.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * 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.jsdi.rhino;
+
+import org.eclipse.e4.languages.javascript.debug.connect.JSONConstants;
+import org.eclipse.e4.languages.javascript.jsdi.NaNValue;
+
+/**
+ * Rhino implementation of {@link NaNValue}
+ * 
+ * @since 1.0
+ */
+public class NaNValueImpl extends MirrorImpl implements NaNValue {
+
+	/**
+	 * Constructor
+	 * 
+	 * @param vm
+	 * @param description
+	 */
+	public NaNValueImpl(VirtualMachineImpl vm) {
+		super(vm);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return JSONConstants.NAN;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.e4.languages.javascript.jsdi.Value#getValueTypeName()
+	 */
+	public String getValueTypeName() {
+		return JSONConstants.NAN;
+	}
+}
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/StackFrameImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/StackFrameImpl.java
index 6d40b42..c110ad2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/StackFrameImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/StackFrameImpl.java
@@ -43,8 +43,7 @@
 		this.contextId = (Number) jsonFrame.get(JSONConstants.CONTEXT_ID);
 		this.ref = (Number) jsonFrame.get(JSONConstants.REF);
 
-		Long scriptId = new Long(((Number) jsonFrame
-				.get(JSONConstants.SCRIPT_ID)).longValue());
+		Long scriptId = new Long(((Number) jsonFrame.get(JSONConstants.SCRIPT_ID)).longValue());
 		ScriptReferenceImpl script = vm.script(scriptId);
 
 		String function = (String) jsonFrame.get(JSONConstants.FUNCTION);
@@ -53,8 +52,7 @@
 		} else {
 			Number line = (Number) jsonFrame.get(JSONConstants.LINE);
 			Location lineLocation = script.lineLocation(line.intValue());
-			this.location = lineLocation != null ? lineLocation
-					: new LocationImpl(vm, function, line.intValue(), script);
+			this.location = lineLocation != null ? lineLocation : new LocationImpl(vm, function, line.intValue(), script);
 		}
 
 	}
@@ -62,9 +60,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.StackFrame#evaluate(java.lang
-	 * .String)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.StackFrame#evaluate(java.lang .String)
 	 */
 	public Value evaluate(String expression) {
 		Request request = new Request(JSONConstants.EVALUATE);
@@ -85,9 +81,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.StackFrame#getValue(org.eclipse
-	 * .e4.languages.javascript.jsdi.Variable)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.StackFrame#getValue(org.eclipse .e4.languages.javascript.jsdi.Variable)
 	 */
 	public Value getValue(Variable variable) {
 		VariableImpl variableImpl = (VariableImpl) variable;
@@ -125,13 +119,15 @@
 	private Value createValue(Map body) throws IllegalStateException {
 		Map lookup = (Map) body.get(JSONConstants.LOOKUP);
 		String type = (String) lookup.get(JSONConstants.TYPE);
-		// "undefined", "null", "boolean", "number", "string", "object",
+		// "undefined", "null", "NaN", "boolean", "number", "string", "object",
 		// "function"
 
 		if (type.equals(JSONConstants.UNDEFINED))
 			return vm.undefinedValue;
 		else if (type.equals(JSONConstants.NULL))
 			return vm.nullValue;
+		else if (type.equals(JSONConstants.NAN))
+			return vm.nanValue;
 		else if (type.equals(JSONConstants.BOOLEAN))
 			return new BooleanValueImpl(vm, lookup);
 		else if (type.equals(JSONConstants.NUMBER))
@@ -217,8 +213,7 @@
 	 * @return true if this frame is visible, false otherwise
 	 */
 	public synchronized boolean isVisible(VariableImpl variable) {
-		return variables != null
-				&& (thisVariable == variable || variables.contains(variable));
+		return variables != null && (thisVariable == variable || variables.contains(variable));
 	}
 
 	/**
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/VirtualMachineImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/VirtualMachineImpl.java
index 0868bcf..b781472 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/VirtualMachineImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/VirtualMachineImpl.java
@@ -28,16 +28,14 @@
  */
 public class VirtualMachineImpl implements VirtualMachine {
 
-	public final UndefinedValueImpl undefinedValue = new UndefinedValueImpl(
-			this);
+	public final UndefinedValueImpl undefinedValue = new UndefinedValueImpl(this);
 	public final NullValueImpl nullValue = new NullValueImpl(this);
+	public final NaNValueImpl nanValue = new NaNValueImpl(this);
 
 	private final Map scripts = new HashMap();
 	private final DebugSession session;
-	private EventRequestManagerImpl eventRequestManager = new EventRequestManagerImpl(
-			this);
-	private final EventQueue eventQueue = new EventQueueImpl(this,
-			eventRequestManager);
+	private EventRequestManagerImpl eventRequestManager = new EventRequestManagerImpl(this);
+	private final EventQueue eventQueue = new EventQueueImpl(this, eventRequestManager);
 	private Map threads = new HashMap();
 	private boolean disconnected = false;
 
@@ -58,8 +56,7 @@
 		Request request = new Request(JSONConstants.SCRIPTS);
 		try {
 			Response response = sendRequest(request);
-			List scriptIds = (List) response.getBody().get(
-					JSONConstants.SCRIPTS);
+			List scriptIds = (List) response.getBody().get(JSONConstants.SCRIPTS);
 
 			for (Iterator iterator = scriptIds.iterator(); iterator.hasNext();) {
 				Long scriptId = new Long(((Number) iterator.next()).longValue());
@@ -106,8 +103,7 @@
 	 * @param script
 	 */
 	public synchronized ScriptReferenceImpl addScript(Long scriptId) {
-		ScriptReferenceImpl script = (ScriptReferenceImpl) scripts
-				.get(scriptId);
+		ScriptReferenceImpl script = (ScriptReferenceImpl) scripts.get(scriptId);
 		if (script != null)
 			return script;
 
@@ -131,8 +127,7 @@
 	 * @throws TimeoutException
 	 * @throws DisconnectException
 	 */
-	public EventPacket receiveEvent(int timeout) throws TimeoutException,
-			DisconnectException {
+	public EventPacket receiveEvent(int timeout) throws TimeoutException, DisconnectException {
 		return session.receiveEvent(timeout);
 	}
 
@@ -145,8 +140,7 @@
 	 * @throws TimeoutException
 	 * @throws DisconnectException
 	 */
-	public Response sendRequest(Request request, int timeout)
-			throws TimeoutException, DisconnectException {
+	public Response sendRequest(Request request, int timeout) throws TimeoutException, DisconnectException {
 		session.sendRequest(request);
 		return session.receiveResponse(request.getSequence(), timeout);
 	}
@@ -154,12 +148,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#sendRequest(org
-	 * .eclipse.e4.languages.javascript.debug.connect.Request)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#sendRequest(org .eclipse.e4.languages.javascript.debug.connect.Request)
 	 */
-	public Response sendRequest(Request request) throws TimeoutException,
-			DisconnectException {
+	public Response sendRequest(Request request) throws TimeoutException, DisconnectException {
 		return sendRequest(request, 30000);
 	}
 
@@ -172,13 +163,11 @@
 		Request request = new Request(JSONConstants.THREADS);
 		try {
 			Response response = sendRequest(request);
-			List threadIds = (List) response.getBody().get(
-					JSONConstants.THREADS);
+			List threadIds = (List) response.getBody().get(JSONConstants.THREADS);
 			HashMap allThreads = new HashMap(threadIds.size());
 			for (Iterator iterator = threadIds.iterator(); iterator.hasNext();) {
 				Long threadId = new Long(((Number) iterator.next()).longValue());
-				ThreadReferenceImpl thread = (ThreadReferenceImpl) threads
-						.get(threadId);
+				ThreadReferenceImpl thread = (ThreadReferenceImpl) threads.get(threadId);
 				if (thread == null) {
 					thread = createThreadReference(threadId);
 				}
@@ -194,8 +183,7 @@
 	}
 
 	public synchronized ThreadReferenceImpl addThread(Long threadId) {
-		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads
-				.get(threadId);
+		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads.get(threadId);
 		if (thread != null)
 			return thread;
 
@@ -235,8 +223,7 @@
 	 * @return
 	 */
 	public synchronized ThreadReferenceImpl getThread(Long threadId) {
-		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads
-				.get(threadId);
+		ThreadReferenceImpl thread = (ThreadReferenceImpl) threads.get(threadId);
 		if (thread == null) {
 			thread = createThreadReference(threadId);
 			if (thread != null)
@@ -248,19 +235,15 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#description()
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#description()
 	 */
 	public String description() {
 		Request request = new Request(JSONConstants.VERSION);
 		try {
 			Response response = sendRequest(request);
 			StringBuffer buffer = new StringBuffer();
-			buffer.append(
-					(String) response.getBody().get(JSONConstants.VM_VENDOR))
-					.append(JSONConstants.SPACE);
-			buffer.append(response.getBody().get(JSONConstants.VM_NAME))
-					.append(JSONConstants.SPACE);
+			buffer.append((String) response.getBody().get(JSONConstants.VM_VENDOR)).append(JSONConstants.SPACE);
+			buffer.append(response.getBody().get(JSONConstants.VM_NAME)).append(JSONConstants.SPACE);
 			buffer.append(response.getBody().get(JSONConstants.VM_VERSION));
 			return buffer.toString();
 		} catch (DisconnectException e) {
@@ -386,8 +369,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(boolean)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(boolean)
 	 */
 	public Value mirrorOf(boolean bool) {
 		return new BooleanValueImpl(this, Boolean.valueOf(bool));
@@ -396,8 +378,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(int)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(int)
 	 */
 	public Value mirrorOf(Number number) {
 		return new NumberValueImpl(this, number);
@@ -406,9 +387,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(java
-	 * .lang.String)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOf(java .lang.String)
 	 */
 	public StringValue mirrorOf(String string) {
 		return new StringValueImpl(this, string);
@@ -417,8 +396,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOfNull()
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOfNull()
 	 */
 	public Value mirrorOfNull() {
 		return nullValue;
@@ -427,9 +405,16 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOfUndefined
-	 * ()
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOfNull()
+	 */
+	public Value mirrorOfNaN() {
+		return nanValue;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#mirrorOfUndefined ()
 	 */
 	public Value mirrorOfUndefined() {
 		return undefinedValue;
@@ -438,9 +423,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#eventRequestManager
-	 * ()
+	 * @see org.eclipse.e4.languages.javascript.jsdi.VirtualMachine#eventRequestManager ()
 	 */
 	public EventRequestManager eventRequestManager() {
 		return eventRequestManager;
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/event/EventQueueImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/event/EventQueueImpl.java
index 4227433..abeb71b 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/event/EventQueueImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/src/org/eclipse/e4/languages/javascript/jsdi/rhino/event/EventQueueImpl.java
@@ -41,8 +41,7 @@
 	 * @param vm
 	 * @param eventRequestManager
 	 */
-	public EventQueueImpl(VirtualMachineImpl vm,
-			EventRequestManagerImpl eventRequestManager) {
+	public EventQueueImpl(VirtualMachineImpl vm, EventRequestManagerImpl eventRequestManager) {
 		this.vm = vm;
 		this.eventRequestManager = eventRequestManager;
 	}
@@ -59,8 +58,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see
-	 * org.eclipse.e4.languages.javascript.jsdi.event.EventQueue#remove(int)
+	 * @see org.eclipse.e4.languages.javascript.jsdi.event.EventQueue#remove(int)
 	 */
 	public EventSet remove(int timeout) {
 		try {
@@ -69,114 +67,80 @@
 				String eventName = event.getEvent();
 				EventSetImpl eventSet = new EventSetImpl(vm);
 				if (eventName.equals(JSONConstants.SCRIPT)) {
-					Long threadId = new Long(((Number) event.getBody().get(
-							JSONConstants.THREAD_ID)).longValue());
+					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
 					ThreadReferenceImpl thread = vm.getThread(threadId);
 					eventSet.setThread(thread);
 
-					Long scriptId = new Long(((Number) event.getBody().get(
-							JSONConstants.SCRIPT_ID)).longValue());
+					Long scriptId = new Long(((Number) event.getBody().get(JSONConstants.SCRIPT_ID)).longValue());
 					ScriptReferenceImpl script = vm.addScript(scriptId);
 
-					List scriptLoadRequests = eventRequestManager
-							.scriptLoadRequests();
-					for (Iterator iterator = scriptLoadRequests.iterator(); iterator
-							.hasNext();) {
-						ScriptLoadRequest request = (ScriptLoadRequest) iterator
-								.next();
+					List scriptLoadRequests = eventRequestManager.scriptLoadRequests();
+					for (Iterator iterator = scriptLoadRequests.iterator(); iterator.hasNext();) {
+						ScriptLoadRequest request = (ScriptLoadRequest) iterator.next();
 						if (request.isEnabled())
-							eventSet.add(new ScriptLoadEventImpl(vm, thread,
-									script, request));
+							eventSet.add(new ScriptLoadEventImpl(vm, thread, script, request));
 					}
 				} else if (eventName.equals(JSONConstants.BREAK)) {
-					Long threadId = new Long(((Number) event.getBody().get(
-							JSONConstants.THREAD_ID)).longValue());
+					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
 					ThreadReferenceImpl thread = vm.getThread(threadId);
 					eventSet.setThread(thread);
 
-					Long scriptId = new Long(((Number) event.getBody().get(
-							JSONConstants.SCRIPT_ID)).longValue());
+					Long scriptId = new Long(((Number) event.getBody().get(JSONConstants.SCRIPT_ID)).longValue());
 					ScriptReferenceImpl script = vm.getScript(scriptId);
 
-					int lineNumber = ((Number) event.getBody().get(
-							JSONConstants.LINE_NUMBER)).intValue();
+					int lineNumber = ((Number) event.getBody().get(JSONConstants.LINE_NUMBER)).intValue();
 					Location location = script.lineLocation(lineNumber);
 
 					boolean atBreakpoint = false;
 
-					List jsonBreakpoints = (List) event.getBody().get(
-							JSONConstants.BREAKPOINTS);
+					List jsonBreakpoints = (List) event.getBody().get(JSONConstants.BREAKPOINTS);
 					if (jsonBreakpoints != null) {
 						List breakpoints = new ArrayList(jsonBreakpoints.size());
-						for (Iterator iterator = jsonBreakpoints.iterator(); iterator
-								.hasNext();) {
+						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();
+						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));
+							if (request.isEnabled() && (requestThread == null || thread == requestThread) && breakpoints.contains(request.breakpointId())) {
+								eventSet.add(new BreakpointEventImpl(vm, thread, location, request));
 								atBreakpoint = true;
 							}
 						}
 					}
 
-					String stepType = (String) event.getBody().get(
-							JSONConstants.STEP);
+					String stepType = (String) event.getBody().get(JSONConstants.STEP);
 					if (JSONConstants.SUSPENDED.equals(stepType)) {
-						List suspendRequests = eventRequestManager
-								.suspendRequests();
-						for (Iterator iterator = suspendRequests.iterator(); iterator
-								.hasNext();) {
-							SuspendRequestImpl request = (SuspendRequestImpl) iterator
-									.next();
+						List suspendRequests = eventRequestManager.suspendRequests();
+						for (Iterator iterator = suspendRequests.iterator(); iterator.hasNext();) {
+							SuspendRequestImpl request = (SuspendRequestImpl) iterator.next();
 							ThreadReference requestThread = request.thread();
-							if (request.isEnabled()
-									&& (requestThread == null || thread == requestThread)) {
-								eventSet.add(new SuspendEventImpl(vm, thread,
-										location, request));
+							if (request.isEnabled() && (requestThread == null || thread == requestThread)) {
+								eventSet.add(new SuspendEventImpl(vm, thread, location, request));
 							}
 						}
 					} else if (stepType != null) {
 						List stepRequests = eventRequestManager.stepRequests();
-						for (Iterator iterator = stepRequests.iterator(); iterator
-								.hasNext();) {
-							StepRequestImpl request = (StepRequestImpl) iterator
-									.next();
+						for (Iterator iterator = stepRequests.iterator(); iterator.hasNext();) {
+							StepRequestImpl request = (StepRequestImpl) iterator.next();
 							ThreadReference requestThread = request.thread();
-							if (request.isEnabled()
-									&& (requestThread == null || thread == requestThread)) {
-								eventSet.add(new StepEventImpl(vm, thread,
-										location, request));
+							if (request.isEnabled() && (requestThread == null || thread == requestThread)) {
+								eventSet.add(new StepEventImpl(vm, thread, location, request));
 							}
 						}
 					}
 
-					Boolean debuggerStatement = (Boolean) event.getBody().get(
-							JSONConstants.DEBUGGER_STATEMENT);
+					Boolean debuggerStatement = (Boolean) event.getBody().get(JSONConstants.DEBUGGER_STATEMENT);
 					if (debuggerStatement.booleanValue()) {
-						List debuggerStatementRequests = eventRequestManager
-								.debuggerStatementRequests();
-						for (Iterator iterator = debuggerStatementRequests
-								.iterator(); iterator.hasNext();) {
-							DebuggerStatementRequestImpl request = (DebuggerStatementRequestImpl) iterator
-									.next();
+						List debuggerStatementRequests = eventRequestManager.debuggerStatementRequests();
+						for (Iterator iterator = debuggerStatementRequests.iterator(); iterator.hasNext();) {
+							DebuggerStatementRequestImpl request = (DebuggerStatementRequestImpl) iterator.next();
 							ThreadReference requestThread = request.thread();
-							if (request.isEnabled()
-									&& (requestThread == null || thread == requestThread)) {
-								eventSet.add(new DebuggerStatementEventImpl(vm,
-										thread, location, request));
+							if (request.isEnabled() && (requestThread == null || thread == requestThread)) {
+								eventSet.add(new DebuggerStatementEventImpl(vm, thread, location, request));
 							}
 						}
 					}
@@ -184,66 +148,48 @@
 					if (!eventSet.isEmpty())
 						thread.markSuspended(atBreakpoint);
 				} else if (eventName.equals(JSONConstants.EXCEPTION)) {
-					Long threadId = new Long(((Number) event.getBody().get(
-							JSONConstants.THREAD_ID)).longValue());
+					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
 					ThreadReferenceImpl thread = vm.getThread(threadId);
 					eventSet.setThread(thread);
 
-					Long scriptId = new Long(((Number) event.getBody().get(
-							JSONConstants.SCRIPT_ID)).longValue());
+					Long scriptId = new Long(((Number) event.getBody().get(JSONConstants.SCRIPT_ID)).longValue());
 					ScriptReferenceImpl script = vm.getScript(scriptId);
 
-					int lineNumber = ((Number) event.getBody().get(
-							JSONConstants.LINE_NUMBER)).intValue();
+					int lineNumber = ((Number) event.getBody().get(JSONConstants.LINE_NUMBER)).intValue();
 					Location location = script.lineLocation(lineNumber);
 
-					String message = (String) event.getBody().get(
-							JSONConstants.MESSAGE);
+					String message = (String) event.getBody().get(JSONConstants.MESSAGE);
 
-					List exceptionRequests = eventRequestManager
-							.scriptLoadRequests();
-					for (Iterator iterator = exceptionRequests.iterator(); iterator
-							.hasNext();) {
-						ExceptionRequest request = (ExceptionRequest) iterator
-								.next();
+					List exceptionRequests = eventRequestManager.exceptionRequests();
+					for (Iterator iterator = exceptionRequests.iterator(); iterator.hasNext();) {
+						ExceptionRequest request = (ExceptionRequest) iterator.next();
 						if (request.isEnabled()) {
-							eventSet.add(new ExceptionEventImpl(vm, thread,
-									location, message, request));
+							eventSet.add(new ExceptionEventImpl(vm, thread, location, message, request));
 						}
 					}
 					if (!eventSet.isEmpty())
 						thread.markSuspended(false);
 				} else if (eventName.equals(JSONConstants.THREAD)) {
-					Long threadId = new Long(((Number) event.getBody().get(
-							JSONConstants.THREAD_ID)).longValue());
+					Long threadId = new Long(((Number) event.getBody().get(JSONConstants.THREAD_ID)).longValue());
 
-					String type = (String) event.getBody().get(
-							JSONConstants.TYPE);
+					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();
+						List threadEnterRequests = eventRequestManager.threadEnterRequests();
+						for (Iterator iterator = threadEnterRequests.iterator(); iterator.hasNext();) {
+							ThreadEnterRequest request = (ThreadEnterRequest) iterator.next();
 							if (request.isEnabled())
-								eventSet.add(new ThreadEnterEventImpl(vm,
-										thread, request));
+								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();
+						List threadExitRequests = eventRequestManager.threadExitRequests();
+						for (Iterator iterator = threadExitRequests.iterator(); iterator.hasNext();) {
+							ThreadExitRequest request = (ThreadExitRequest) iterator.next();
 							if (request.isEnabled())
-								eventSet.add(new ThreadExitEventImpl(vm,
-										thread, request));
+								eventSet.add(new ThreadExitEventImpl(vm, thread, request));
 						}
 					}
 				}
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/META-INF/MANIFEST.MF
index 5244b5e..56e044c 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/META-INF/MANIFEST.MF
@@ -4,6 +4,6 @@
 Bundle-SymbolicName: org.eclipse.e4.languages.javascript.debug.jsdi
 Bundle-Version: 1.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: org.eclipse.e4.languages.javascript.jsdi;x-friends:="org.eclipse.e4.languages.javascript.debug.test",
+Export-Package: org.eclipse.e4.languages.javascript.jsdi,
  org.eclipse.e4.languages.javascript.jsdi.event,
  org.eclipse.e4.languages.javascript.jsdi.request
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/NaNValue.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/NaNValue.java
new file mode 100644
index 0000000..6c9da93
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/NaNValue.java
@@ -0,0 +1,5 @@
+package org.eclipse.e4.languages.javascript.jsdi;
+
+public interface NaNValue extends Value {
+
+}
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/VirtualMachine.java b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/VirtualMachine.java
index 271e13f..49fccb2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/VirtualMachine.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi/src/org/eclipse/e4/languages/javascript/jsdi/VirtualMachine.java
@@ -91,6 +91,13 @@
 	public Value mirrorOfNull();
 
 	/**
+	 * Returns a new {@link Value} that represents <code>NaN</code>
+	 * 
+	 * @return a new <code>NaN</code> {@link Value}
+	 */
+	public Value mirrorOfNaN();
+
+	/**
 	 * Returns a new boolean {@link Value}
 	 * 
 	 * @param bool
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/ContextData.java b/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/ContextData.java
index 22733d7..a1450bf 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/ContextData.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/ContextData.java
@@ -190,7 +190,7 @@
 			stepFrame = null;
 		} else {
 			// TODO NLS this
-			throw new IllegalStateException("bad stepType: "+ stepType); //$NON-NLS-1$
+			throw new IllegalStateException("bad stepType: " + stepType); //$NON-NLS-1$
 		}
 		contextState = CONTEXT_RUNNING;
 		notifyAll();
@@ -260,6 +260,7 @@
 		EventPacket exceptionEvent = new EventPacket(JSONConstants.EXCEPTION);
 		Map body = exceptionEvent.getBody();
 		body.put(JSONConstants.CONTEXT_ID, contextId);
+		body.put(JSONConstants.THREAD_ID, threadId);
 		body.put(JSONConstants.SCRIPT_ID, script.getId());
 		body.put(JSONConstants.LINE_NUMBER, lineNumber);
 		body.put(JSONConstants.MESSAGE, ex.getMessage());
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java b/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
index 25f0b04..948b6d6 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.rhino/src/org/eclipse/e4/languages/javascript/debug/rhino/DebugFrameImpl.java
@@ -256,6 +256,8 @@
 			serializeUndefined(result);
 		} else if (object == null) {
 			serializeNull(result);
+		} else if (object == ScriptRuntime.NaNobj) {
+			serializeNaN(result);
 		} else if (object instanceof Boolean) {
 			serializeSimpleType(object, JSONConstants.BOOLEAN, result);
 		} else if (object instanceof Number) {
@@ -293,6 +295,10 @@
 		result.put(JSONConstants.TYPE, JSONConstants.NULL);
 	}
 
+	private void serializeNaN(Map result) {
+		result.put(JSONConstants.TYPE, JSONConstants.NAN);
+	}
+
 	/**
 	 * Serialize the given simple type
 	 * 
diff --git a/examples/sample.js.debugdisplay/scripts/script.js b/examples/sample.js.debugdisplay/scripts/script.js
index f1fba29..c26375c 100644
--- a/examples/sample.js.debugdisplay/scripts/script.js
+++ b/examples/sample.js.debugdisplay/scripts/script.js
@@ -9,5 +9,4 @@
 var aPrintableObject = {x: 5, y: 25};
 var aMap             = {};
 var anArray          = [];
-var anArguments      = arguments;
 debugger;