diff --git a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/debugger/StackFrame.java b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/debugger/StackFrame.java
index e978f6a..250df27 100644
--- a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/debugger/StackFrame.java
+++ b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/debugger/StackFrame.java
@@ -178,7 +178,7 @@
 		RhinoDebuggerImpl rhinoDebugger = (RhinoDebuggerImpl) context.getDebugger();
 		rhinoDebugger.disableThread();
 
-		Context evalContext = context.getFactory().enter();
+		Context evalContext = context.getFactory().enterContext();
 		Debugger debugger = evalContext.getDebugger();
 		Object debuggerContextData = evalContext.getDebuggerContextData();
 		evalContext.setDebugger(null, null);
@@ -207,7 +207,7 @@
 		RhinoDebuggerImpl rhinoDebugger = (RhinoDebuggerImpl) context.getDebugger();
 		rhinoDebugger.disableThread();
 
-		Context evalContext = context.getFactory().enter();
+		Context evalContext = context.getFactory().enterContext();
 		Debugger debugger = evalContext.getDebugger();
 		Object debuggerContextData = evalContext.getDebuggerContextData();
 		evalContext.setDebugger(null, null);
@@ -234,7 +234,7 @@
 		RhinoDebuggerImpl rhinoDebugger = (RhinoDebuggerImpl) context.getDebugger();
 		rhinoDebugger.disableThread();
 
-		Context lookupContext = context.getFactory().enter();
+		Context lookupContext = context.getFactory().enterContext();
 		Debugger debugger = lookupContext.getDebugger();
 		Object debuggerContextData = lookupContext.getDebuggerContextData();
 		lookupContext.setDebugger(null, null);
@@ -286,7 +286,7 @@
 		} else if (object instanceof Number) {
 			Object value = (object == ScriptRuntime.NaNobj) ? null : object;
 			serializeSimpleType(value, JSONConstants.NUMBER, result);
-		} else if (object instanceof String) {
+		} else if (object instanceof CharSequence) {
 			serializeSimpleType(object, JSONConstants.STRING, result);
 		} else if (object instanceof Scriptable) {
 			Scriptable scriptable = (Scriptable) object;
diff --git a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/JSONUtil.java b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/JSONUtil.java
index fe4ea07..9597a2c 100644
--- a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/JSONUtil.java
+++ b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/JSONUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others All rights reserved. This
+ * Copyright (c) 2010, 2012 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
@@ -365,8 +365,8 @@
 			buffer.append(value.toString());
 		else if (value instanceof Number)
 			writeNumber((Number) value, buffer);
-		else if (value instanceof String)
-			writeString((String) value, buffer);
+		else if (value instanceof CharSequence)
+			writeCharSequence((CharSequence) value, buffer);
 		else if (value instanceof Collection)
 			writeArray((Collection) value, buffer);
 		else if (value instanceof Map)
@@ -399,7 +399,7 @@
 			Object key = iterator.next();
 			if (!(key instanceof String))
 				throw error("Map keys must be an instance of String but was '" + key.getClass().getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$););
-			writeString((String) key, buffer);
+			writeCharSequence((CharSequence) key, buffer);
 			buffer.append(':');
 			writeValue(map.get(key), buffer);
 			buffer.append(',');
@@ -422,7 +422,7 @@
 			buffer.append(']');
 	}
 
-	private static void writeString(String string, StringBuffer buffer) {
+	private static void writeCharSequence(CharSequence string, StringBuffer buffer) {
 		buffer.append('"');
 		int length = string.length();
 		for (int i = 0; i < length; i++) {
