diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+#### 0.16.0.3
+
+* JavaScript/node.js: Each instance of a client now uses its own cookie jar automatically. You no longer need to depend on the `request` library to use generated clients. If you want access to the cookie jar use `api.cookieJar`.
+
 #### 0.16.0.2
 
 * Allow haskell-src-exts 1.16.*
diff --git a/files/Javascript/base.js b/files/Javascript/base.js
--- a/files/Javascript/base.js
+++ b/files/Javascript/base.js
@@ -1,14 +1,17 @@
+var isNodeJs = typeof module === "object" && module && typeof module.exports === "object";
+
 var $apinamespace$ =
   function (url, secureUrl)
   {
     var postfix          = '/v' + this.version + '/';
     var contextUrl       = url + postfix;
     var secureContextUrl = (secureUrl || url.replace(/^http:/, "https:")) + postfix;
+    var cookieJar = isNodeJs ? require('request').jar() : undefined;
 
-    $apinamespace$.setContext(this, contextUrl, secureContextUrl);
+    $apinamespace$.setContext(this, contextUrl, secureContextUrl, cookieJar);
   };
 
-if (typeof module === "object" && module && typeof module.exports === "object")
+if (isNodeJs)
 {
   // Export as Node module.
   module.exports = $apinamespace$;
@@ -62,7 +65,7 @@
   return q($dollar$.ajax(callData));
 }
 
-function nodeRequest (method, url, params, onSuccess, onError, contentType, acceptHeader, data, callOpts)
+function nodeRequest (method, url, params, onSuccess, onError, contentType, acceptHeader, data, callOpts, cookieJar)
 {
   var allParams = {};
   $apinamespace$.addObject(allParams, params);
@@ -82,6 +85,7 @@
     , qs      : allParams
     , method  : method
     , headers : headers
+    , jar     : cookieJar ? cookieJar : undefined
     };
 
   if (data) callData.body = data;
@@ -140,16 +144,17 @@
 }
 
 $apinamespace$.setContext =
-  function (obj, url, secureUrl)
+  function (obj, url, secureUrl, cookieJar)
   {
     obj.contextUrl = url;
     obj.secureContextUrl = secureUrl;
+    obj.cookieJar = cookieJar;
     for (var fld in obj)
     {
       if (obj[fld] != undefined && obj[fld].apiObjectType != undefined && obj[fld].apiObjectType == 'resourceDir')
       {
         var postfix = fld.replace(/([a-z0-9])([A-Z])/g, '$dollar$1-$dollar$2').toLowerCase() + '/';
-        $apinamespace$.setContext(obj[fld], url + postfix, secureUrl + postfix);
+        $apinamespace$.setContext(obj[fld], url + postfix, secureUrl + postfix, cookieJar);
       }
     }
   };
diff --git a/rest-gen.cabal b/rest-gen.cabal
--- a/rest-gen.cabal
+++ b/rest-gen.cabal
@@ -1,5 +1,5 @@
 name:                rest-gen
-version:             0.16.0.2
+version:             0.16.0.3
 description:         Documentation and client generation from rest definition.
 synopsis:            Documentation and client generation from rest definition.
 maintainer:          code@silk.co
diff --git a/src/Rest/Gen/JavaScript.hs b/src/Rest/Gen/JavaScript.hs
--- a/src/Rest/Gen/JavaScript.hs
+++ b/src/Rest/Gen/JavaScript.hs
@@ -51,10 +51,10 @@
 mkAccessorConstructor :: String -> ApiResource -> Code
 mkAccessorConstructor ns resource =
   let constrName = jsDir (cleanName (resName resource))
-  in functionDecl constrName ["url", "secureUrl"] $
+  in functionDecl constrName ["url", "secureUrl", "cookieJar"] $
        jsIf (code $ "this instanceof " ++ constrName)
-            (proc (ns ++ ".setContext") (code "this, url, secureUrl"))
-         <-> jsElse (ret $ call (constrName ++ ".access") (code "url, secureUrl"))
+            (proc (ns ++ ".setContext") (code "this, url, secureUrl, cookieJar"))
+         <-> jsElse (ret $ call (constrName ++ ".access") (code "url, secureUrl, cookieJar"))
 
 mkPreFuncs :: String -> ApiResource -> Code
 mkPreFuncs ns node =
@@ -83,7 +83,8 @@
   in function fParams $
       [ var "postfix" $ "'" ++ urlPart ++ "'"
       , var "accessor" $ new "this" . code $  "this.contextUrl + postfix, "
-                                           ++ "this.secureContextUrl + postfix"
+                                           ++ "this.secureContextUrl + postfix, "
+                                           ++ "this.cookieJar"
       , "accessor.get" .=. mkFunction ns node
       , ret "accessor"
       ]
@@ -110,6 +111,7 @@
           , string $ mOut
           , maybe (code "undefined") (\(p, _, f) -> f (code p)) mInp
           , code "callOpts"
+          , code "this.cookieJar"
           ]
 
 resourceLoc :: String -> ApiResource -> String
