diff --git a/units-impl-wasm.js b/units-impl-wasm.js
index 105f51e..6b10f29 100644
--- a/units-impl-wasm.js
+++ b/units-impl-wasm.js
@@ -1,26 +1,30 @@
 const units = require("./units.lib.js");
 
-globalThis.printBuffer = "";
+export function setupUnits() {
+  globalThis.printBuffer = "";
 
-units({
-  "print": function(out) {
-    globalThis.printBuffer += out + "\n";
-  }
-}).then((Module) => {
-  let _do_a_conversion = Module.cwrap("do_a_conversion", "number", [
-    "number",
-    "number",
-    "number",
-  ]);
+  window.convertPromise = units({
+    "print": function(out) {
+      globalThis.printBuffer += out + "\n";
+    }
+  }).then((Module) => {
+    let _do_a_conversion = Module.cwrap("do_a_conversion", "number", [
+      "number",
+      "number",
+      "number",
+    ]);
 
-  async function convert(from, to = "", system="si") {
-    let from_c = Module.stringToNewUTF8(from);
-    let to_c = Module.stringToNewUTF8(to);
-    let sys_c = Module.stringToNewUTF8(system);
-    let lenBefore = globalThis.printBuffer.length;
-    _do_a_conversion(from_c, to === "" ? 0 : to_c, system);
-    return globalThis.printBuffer.slice(lenBefore).trim();
-  }
+    async function convert(from, to = "", system="si") {
+      let from_c = Module.stringToNewUTF8(from);
+      let to_c = Module.stringToNewUTF8(to);
+      let sys_c = Module.stringToNewUTF8(system);
+      let lenBefore = globalThis.printBuffer.length;
+      _do_a_conversion(from_c, to === "" ? 0 : to_c, system);
+      return globalThis.printBuffer.slice(lenBefore).trim();
+    }
 
-  window.convert = convert;
+    window.convert = convert;
+
+    return convert;
 });
+}
