diff --git a/jszip-load.js b/jszip-load.js
index a15209f..de873f9 100644
--- a/jszip-load.js
+++ b/jszip-load.js
@@ -7,7 +7,7 @@
 Dual licenced under the MIT license or GPLv3. See LICENSE.markdown.
 
 **/
-/*global JSZip,JSZipBase64 */
+/*global JSZip */
 (function () {
 
    /**
@@ -509,8 +509,9 @@
    JSZip.prototype.load = function(data, options) {
       var files, zipEntries, i, input;
       options = options || {};
+
       if(options.base64) {
-         data = JSZipBase64.decode(data);
+         data = JSZip.Base64.decode(data);
       }
 
       zipEntries = new ZipEntries(data, options);
diff --git a/jszip.js b/jszip.js
index 18eafc7..527564b 100644
--- a/jszip.js
+++ b/jszip.js
@@ -7,6 +7,11 @@
 Dual licenced under the MIT license or GPLv3. See LICENSE.markdown.
 
 Usage:
+   // CommonJS
+   var JSZip = require("jszip");
+   // Require.js
+   requirejs(["jszip"], function (JSZip) { ... });
+
    zip = new JSZip();
    zip.file("hello.txt", "Hello, World!").add("tempfile", "nothing");
    zip.folder("images").file("smile.gif", base64Data, {base64: true});
@@ -17,6 +22,22 @@
 
 **/
 
+// UMD from https://github.com/umdjs/umd/blob/master/returnExports.js
+(function (root, factory) {
+    if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else {
+        // Browser globals (root is window)
+        root.JSZip = factory();
+  }
+}(this, function () {
+
 /**
  * Representation a of zip file in js
  * @constructor
@@ -857,7 +878,7 @@
  *
  *  Hacked so that it doesn't utf8 en/decode everything
  **/
-var JSZipBase64 = (function() {
+var JSZipBase64 = JSZip.Base64 = (function() {
    // private property
    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
@@ -931,5 +952,9 @@
    };
 }());
 
+return JSZip;
+
+}));
+
 // enforcing Stuk's coding style
 // vim: set shiftwidth=3 softtabstop=3:
diff --git a/test/index.html b/test/index.html
index a299356..f33775a 100644
--- a/test/index.html
+++ b/test/index.html
@@ -176,7 +176,7 @@
       zip.file("Hello.txt", "Hello World\n");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       /*
       Expected differing bytes:
@@ -198,7 +198,7 @@
       zip.file("Hello.txt", "Hello World\n");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       /*
       Expected differing bytes:
@@ -239,7 +239,7 @@
 	  zip.file("Hello.txt", "Hello World\n", {date : new Date("July 17, 2009 14:36:57")});
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       /*
       Expected differing bytes:
@@ -259,7 +259,7 @@
       zip.file("smile.gif", "R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs=", {base64: true});
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
       equals(reload(actual), actual, "Generated ZIP can be parsed");
@@ -270,7 +270,7 @@
       zip.folder("folder");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
       equals(reload(actual), actual, "Generated ZIP can be parsed");
@@ -282,7 +282,7 @@
       zip.folder("images").file("smile.gif", "R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs=", {base64: true});
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       /*
       Expected differing bytes:
@@ -321,7 +321,7 @@
       // these changes won't be used
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
    });
@@ -383,7 +383,7 @@
       zip.remove("Remove.txt");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
 
@@ -395,7 +395,7 @@
       zip.remove("folder/Remove.txt");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
    });
@@ -407,7 +407,7 @@
       folder.remove("Remove.txt");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
    });
@@ -419,7 +419,7 @@
       zip.remove("remove");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
 
@@ -434,7 +434,7 @@
       zip.remove("remove");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
 
@@ -447,7 +447,7 @@
       zip.folder("folder").remove("1");
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
       equals(reload(actual), actual, "Generated ZIP can be parsed");
@@ -692,7 +692,7 @@
       });
       var content = zip.generate();
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
 
@@ -703,7 +703,7 @@
       zip.file("Hello.txt", "Hello World\n");
       var content = zip.generate({compression:'STORE'});
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       // no difference with the "Zip text file" test.
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
@@ -715,7 +715,7 @@
       zip.file("Hello.txt", "This a looong file : we need to see the difference between the different compression methods.\n");
       var content = zip.generate({compression:'STORE'});
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
    });
@@ -726,7 +726,7 @@
       zip.file("Hello.txt", "This a looong file : we need to see the difference between the different compression methods.\n");
       var content = zip.generate({compression:'DEFLATE'});
 
-      var actual = JSZipBase64.decode(content);
+      var actual = JSZip.Base64.decode(content);
 
       ok(similar(actual, expected, 18) , "Generated ZIP matches reference ZIP");
    });
