diff --git a/lib/js/README b/lib/js/README
index 07b188b..bb65050 100644
--- a/lib/js/README
+++ b/lib/js/README
@@ -25,7 +25,7 @@
 
 Grunt Build
 ------------
-The is the base directory for the Apache Thrift JavaScript
+This is the base directory for the Apache Thrift JavaScript
 library. This directory contains a Gruntfile.js and a
 package.json. Many of the build and test tools used here
 require a recent version of Node.js to be installed. To 
@@ -46,7 +46,7 @@
 The following directories are present (some only after the
 grunt build):
   /src  - The JavaScript Apache Thrift source
-  /doc - HTML documentation
+  /doc  - HTML documentation
   /dist - Distribution files (thrift.js and thrift.min.js)
   /test - Various tests, this is a good place to look for
           example code
@@ -81,8 +81,8 @@
         <script src="gen-js/hello_svc.js"></script>
         <script>
           (function() {
-            var transport = new Thrift.Transport("/hello");
-            var protocol  = new Thrift.Protocol(transport);
+            var transport = new Thrift.TXHRTransport("/hello");
+            var protocol  = new Thrift.TJSONProtocol(transport);
             var client    = new hello_svcClient(protocol);
             var nameElement = document.getElementById("name_in");
             var outputElement = document.getElementById("output");
@@ -98,9 +98,7 @@
     </html>
 
 ### hello.js - Node Server
-    var Thrift = require('thrift');
-    var TBufferedTransport = require('thrift/lib/thrift/transport').TBufferedTransport;
-    var TJSONProtocol = require('thrift/lib/thrift/protocol').TJSONProtocol;
+    var thrift = require('thrift');
     var hello_svc = require('./gen-nodejs/hello_svc.js');
     
     var hello_handler = {
@@ -111,9 +109,9 @@
     }
     
     var hello_svc_opt = {
-      transport: TBufferedTransport,
-      protocol: TJSONProtocol,
-      cls: hello_svc,
+      transport: thrift.TBufferedTransport,
+      protocol: thrift.TJSONProtocol,
+      processor: hello_svc,
       handler: hello_handler
     };
     
@@ -124,7 +122,7 @@
       }
     }
     
-    var server = Thrift.createThriftWebServer(server_opt);
+    var server = Thrift.createWebServer(server_opt);
     var port = 9099;
     server.listen(port);
     console.log("Http/Thrift Server running on port: " + port);
diff --git a/lib/js/src/thrift.js b/lib/js/src/thrift.js
index 411eead..8fc7cd2 100644
--- a/lib/js/src/thrift.js
+++ b/lib/js/src/thrift.js
@@ -286,11 +286,11 @@
  * @example
  *     var transport = new Thrift.TXHRTransport("http://localhost:8585");
  */
-Thrift.Transport = Thrift.TXHRTransport = function(url) {
+Thrift.Transport = Thrift.TXHRTransport = function(url, options) {
     this.url = url;
     this.wpos = 0;
     this.rpos = 0;
-
+    this.useCORS = (options && options.useCORS);
     this.send_buf = '';
     this.recv_buf = '';
 };
@@ -683,7 +683,7 @@
  * @example
  *     var protocol  = new Thrift.Protocol(transport);
  */
-Thrift.Protocol = function(transport) {
+Thrift.TJSONProtocol = Thrift.Protocol = function(transport) {
     this.transport = transport;
 };
 
@@ -977,16 +977,8 @@
                 var ch = str.charAt(i);      // a single double quote: "
                 if (ch === '\"') {
                     escapedString += '\\\"'; // write out as: \"
-                } else if (ch === '\\') {    // a single backslash: \
-                    escapedString += '\\\\'; // write out as: \\
-                /* Currently escaped forward slashes break TJSONProtocol.
-                 * As it stands, we can simply pass forward slashes into
-                 * our strings across the wire without being escaped.
-                 * I think this is the protocol's bug, not thrift.js
-                 * } else if(ch === '/') {   // a single forward slash: /
-                 *  escapedString += '\\/';  // write out as \/
-                 * }
-                 */
+                } else if (ch === '\\') {    // a single backslash
+                    escapedString += '\\\\'; // write out as double backslash 
                 } else if (ch === '\b') {    // a single backspace: invisible
                     escapedString += '\\b';  // write out as: \b"
                 } else if (ch === '\f') {    // a single formfeed: invisible
@@ -1025,7 +1017,9 @@
         this.rstack = [];
         this.rpos = [];
 
-        if (typeof jQuery !== 'undefined') {
+        if (typeof JSON !== 'undefined' && typeof JSON.parse === 'function') {
+            this.robj = JSON.parse(this.transport.readAll());
+        } else if (typeof jQuery !== 'undefined') {
             this.robj = jQuery.parseJSON(this.transport.readAll());
         } else {
             this.robj = eval(this.transport.readAll());
diff --git a/lib/js/test/README b/lib/js/test/README
index 6923794..9ad140e 100644
--- a/lib/js/test/README
+++ b/lib/js/test/README
@@ -1,7 +1,8 @@
 Thrift Javascript Library
 =========================
 This browser based Apache Thrift implementation supports
-RPC clients using the JSON protocol over Http[s] with XHR.
+RPC clients using the JSON protocol over Http[s] with XHR
+and WebSocket.
 
 License
 -------
@@ -32,14 +33,18 @@
 standard Apache Thrift test suite (thrift/test/ThriftTest.thrift).
 The server supports Apache Thrift XHR and WebSocket clients.
 
-server_https.js is the same but uses SSL/TLS. The sec directory
-contains the server key and certificate used by the ssl server.
+server_https.js is the same but uses SSL/TLS. The server key 
+and cert are pulled from the thrift/test/keys folder.
+
 Both of these servers support WebSocket (the http: supports ws:,
 and the https: support wss:).
 
-To run the test servers use: $ make check (requires
-the Apache Thrift Java branch and make check must have
-been run in thrift/lib/java previously) or run the grunt
+To run the client test with the Java test server use: 
+$ make check (requires the Apache Thrift Java branch 
+and make check must have been run in thrift/lib/java 
+previously).
+
+To run the client tests with the Node servers run the grunt
  build in the parent js directory (see README there).
  
 Test Clients
@@ -54,10 +59,10 @@
 -rw-r--r-- 1 randy randy  2847 Feb  9 06:31 testws.html
 
 There are three html test driver files, all of which are
-QUnit based. test.html test the Apache Thrift jQuery
+QUnit based. test.html tests the Apache Thrift jQuery
 generated code (thrift -gen js:jquery). The test-nojq.html
-Runs almost identical tests against normal JavaScript builds
+runs almost identical tests against normal JavaScript builds
 (thrift -gen js). Both of the previous tests use the XHR 
 transport. The testws.html runs similar tests using the
 WebSocket transport. The test*.js files are loaded by the
-html drivers and contain the actualApache Thrift tests.
+html drivers and contain the actual Apache Thrift tests.
