diff --git a/weinre.test/.classpath b/weinre.test/.classpath
new file mode 100644
index 0000000..940bbab
--- /dev/null
+++ b/weinre.test/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.application"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.build"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.doc"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.server"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.server.android"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/weinre.web"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/weinre.test/.project b/weinre.test/.project
new file mode 100644
index 0000000..5fbae6a
--- /dev/null
+++ b/weinre.test/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>weinre.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/weinre.test/.settings/org.eclipse.jdt.core.prefs b/weinre.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..db929eb
--- /dev/null
+++ b/weinre.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Mar 03 11:36:18 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/weinre.test/bin/weinre/test/issues/Issue_35.class b/weinre.test/bin/weinre/test/issues/Issue_35.class
new file mode 100644
index 0000000..d3a6ac3
--- /dev/null
+++ b/weinre.test/bin/weinre/test/issues/Issue_35.class
Binary files differ
diff --git a/weinre.test/bin/weinre/test/issues/Issue_35.js b/weinre.test/bin/weinre/test/issues/Issue_35.js
new file mode 100755
index 0000000..f2b73b5
--- /dev/null
+++ b/weinre.test/bin/weinre/test/issues/Issue_35.js
@@ -0,0 +1,27 @@
+#!/usr/bin/env node
+
+var util = require("util")
+var data = ""
+
+process.stdin.setEncoding('utf8')
+
+process.stdin.on('data', function (chunk) {
+    data = data + chunk
+    console.log("\nread: " + chunk + " (len: " + chunk.length + ")")
+})
+
+process.stdin.on('end', function () {
+    console.log("\ndone: " + data)
+    data = eval(data)
+    var object = JSON.parse(data)
+    var redo = JSON.stringify(object)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    var redo = JSON.stringify(redo)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    var redo = JSON.stringify(redo)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    console.log("\ndump:")
+    console.log(util.inspect(object,true,null))
+})
+
+process.stdin.resume()
diff --git a/weinre.test/bin/weinre/test/issues/Issue_35.txt b/weinre.test/bin/weinre/test/issues/Issue_35.txt
new file mode 100644
index 0000000..4d98928
--- /dev/null
+++ b/weinre.test/bin/weinre/test/issues/Issue_35.txt
@@ -0,0 +1 @@
+"[\"{\\\"interface\\\":\\\"WeinreTargetCommands\\\",\\\"method\\\":\\\"registerTarget\\\",\\\"args\\\":\\\"[\\\\\\\"file:///Users/aktowns/Library/Application Support/iPhone Simulator/4.2/Applications/3A54251E-6728-4EC6-A019-14AC875FB8DA/Documents/issues/testfile/023-widg/L1-2.html\\\\\\\", \\\\\\\"???::1\\\\\\\"]\\\"}\"]"
\ No newline at end of file
diff --git a/weinre.test/src/weinre/test/issues/Issue_35.java b/weinre.test/src/weinre/test/issues/Issue_35.java
new file mode 100644
index 0000000..d310bdc
--- /dev/null
+++ b/weinre.test/src/weinre/test/issues/Issue_35.java
@@ -0,0 +1,41 @@
+/*
+ * weinre is available under *either* the terms of the modified BSD license *or* the
+ * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
+ * 
+ * Copyright (c) 2010, 2011 IBM Corporation
+ */
+
+package weinre.test.issues;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.apache.wink.json4j.JSONArray;
+
+//-------------------------------------------------------------------
+public class Issue_35 {
+
+  //-------------------------------------------------------------------
+static public void main(String[] args) throws Throwable {
+    new Issue_35().main();
+}
+
+//-------------------------------------------------------------------
+private void main() throws Throwable {
+    InputStream iStream = getClass().getResourceAsStream("Issue_35.txt");
+    
+    Reader reader = new InputStreamReader(iStream);
+    
+    char buffer[] = new char[4096];
+    int len       = reader.read(buffer,0,buffer.length);
+//    String data   = String.valueOf(buffer, 0, len);
+    String data   = String.valueOf(buffer, 1, len-2);
+    
+    reader.close();
+    
+    new JSONArray(data);
+    
+}
+
+}
diff --git a/weinre.test/src/weinre/test/issues/Issue_35.js b/weinre.test/src/weinre/test/issues/Issue_35.js
new file mode 100755
index 0000000..f2b73b5
--- /dev/null
+++ b/weinre.test/src/weinre/test/issues/Issue_35.js
@@ -0,0 +1,27 @@
+#!/usr/bin/env node
+
+var util = require("util")
+var data = ""
+
+process.stdin.setEncoding('utf8')
+
+process.stdin.on('data', function (chunk) {
+    data = data + chunk
+    console.log("\nread: " + chunk + " (len: " + chunk.length + ")")
+})
+
+process.stdin.on('end', function () {
+    console.log("\ndone: " + data)
+    data = eval(data)
+    var object = JSON.parse(data)
+    var redo = JSON.stringify(object)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    var redo = JSON.stringify(redo)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    var redo = JSON.stringify(redo)
+    console.log("\nredo: " + redo + " (len: " + redo.length + ")")
+    console.log("\ndump:")
+    console.log(util.inspect(object,true,null))
+})
+
+process.stdin.resume()
diff --git a/weinre.test/src/weinre/test/issues/Issue_35.txt b/weinre.test/src/weinre/test/issues/Issue_35.txt
new file mode 100644
index 0000000..4d98928
--- /dev/null
+++ b/weinre.test/src/weinre/test/issues/Issue_35.txt
@@ -0,0 +1 @@
+"[\"{\\\"interface\\\":\\\"WeinreTargetCommands\\\",\\\"method\\\":\\\"registerTarget\\\",\\\"args\\\":\\\"[\\\\\\\"file:///Users/aktowns/Library/Application Support/iPhone Simulator/4.2/Applications/3A54251E-6728-4EC6-A019-14AC875FB8DA/Documents/issues/testfile/023-widg/L1-2.html\\\\\\\", \\\\\\\"???::1\\\\\\\"]\\\"}\"]"
\ No newline at end of file
