diff --git a/Makefile b/Makefile
index 37b594f..af47130 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@
 
 webview-frontend: webview-frontend.cpp units.o getopt.o getopt1.o parse.tab.o strfunc.o | bundle-webview-js.h
 	g++ $^ -o webview-frontend $(WEBCFLAGS) -I json/include
+	strip $@
 
 units.wasm: units.c
 	emcc -o units.lib.js *.c $(CFLAGS) --preload-file definitions.units --preload-file elements.units --preload-file currency.units --preload-file cpi.units
@@ -25,10 +26,10 @@
 	xxd -i $^ > $@
 
 bundle-webview.js: webview-frontend.js frontend-impl.js styles.css
-	cp styles.css styles.css.txt
+	yarn esbuild styles.css --outfile=styles.css.txt --minify
 	yarn esbuild webview-frontend.js $(ESFLAGS) --outfile=bundle-webview.js
 
-watch:
+watch: units.wasm
 	yarn esbuild frontend.js $(ESFLAGS) --watch --outfile=bundle.js
 
 .PHONY: watch webview-frontend
diff --git a/frontend-impl.js b/frontend-impl.js
index 95ca17f..9c7b07c 100644
--- a/frontend-impl.js
+++ b/frontend-impl.js
@@ -1,20 +1,27 @@
 const React = require("preact");
-const {useState} = require('preact/hooks');
+const { useState } = require('preact/hooks');
 
 export const UnitsApp = () => {
   const [hist, setHist] = useState([]);
   const [query, setQuery] = useState("");
   const [to, setTo] = useState("");
+  const [unitSystem, setUnitSystem] = useState('si');
 
   function doConversion(e) {
     e.preventDefault();
     console.log("conversion");
+
+    if (query == '')
+      return;
+
+    console.log("units", unitSystem);
+
+    convert(query, to, unitSystem).then(res => {
+      setHist([...hist, [query, to, res]]);
+    });
+
     setQuery('');
     setTo('');
-    
-    convert(query, to).then(res => {
-      setHist([...hist, [query, to, res]]);
-    })
   }
 
   return (
@@ -34,21 +41,37 @@
           placeholder="To"
           onChange={(val) => setTo(val.target.value)}
         ></input>
-          
+
         <input value="Convert" type="submit"></input>
       </form>
 
-          <div class="table-container">
-      <table>
-      <thead>
-      <tr><td style="width: 30%">From</td><td style="width: 15%">To</td><td style="width: 55%">Result</td></tr>
-      </thead>
-        {hist.map((entry) => (
-          <tr>{entry.map(t => <td>{t}</td>)}</tr>
-        ))}
-        <tr><td></td></tr>
-      </table>
-        </div>
+      <div class="table-container">
+        <table>
+          <thead>
+            <tr><td style="width: 30%">From</td><td style="width: 15%">To</td><td style="width: 55%">Result</td></tr>
+          </thead>
+          {hist.map((entry) => (
+            <tr>{entry.map(t => <td>{t}</td>)}</tr>
+          ))}
+          <tr><td></td></tr>
+        </table>
+      </div>
+
+      <div class="bottom-menu">
+        <span>
+          Units: &nbsp;
+          <select onChange={val => setUnitSystem(val.target.value)}>
+            <option value="si">SI</option>
+            <option value="gauss">CGS Gaussian</option>
+            <option value="esu">CGS ESU</option>
+            <option value="emu">CGS EMU</option>
+            <option value="lhu">CGS LHU</option>
+          </select>
+        </span>
+
+        <button onClick={() => setHist([])}>Clear</button>
+      </div>
+
     </>
   );
 };
diff --git a/styles.css b/styles.css
index 87743a3..73d891b 100644
--- a/styles.css
+++ b/styles.css
@@ -23,7 +23,7 @@
 
 #app {
     display: grid;
-    grid-template-rows: min-content 1fr;
+    grid-template-rows: min-content 1fr min-content;
     width: 100%;
     height: 100%;
 }
@@ -34,13 +34,20 @@
 /*    border: 1px solid gray;*/
 }
 
+.bottom-menu {
+    font-size: 0.85rem!important;
+    display: grid;
+    grid-template-columns: 1fr auto;
+    margin-top: 8px;
+}
+
 table {
     width: 100%;
     border-collapse: collapse;
     margin: 0;
     background: white;
-    font-size: 0.85rem!important;
     table-layout: fixed;
+    font-size: 0.85rem!important;
 }
 td {
     padding: 2px 4px;
diff --git a/units-impl-wasm.js b/units-impl-wasm.js
index b8f6191..bf562e1 100644
--- a/units-impl-wasm.js
+++ b/units-impl-wasm.js
@@ -4,13 +4,15 @@
   let _do_a_conversion = Module.cwrap("do_a_conversion", "number", [
     "number",
     "number",
+    "number",
   ]);
 
-  async function convert(from, to = "") {
+  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);
+    _do_a_conversion(from_c, to === "" ? 0 : to_c, system);
     return globalThis.printBuffer.slice(lenBefore).trim();
   }
 
diff --git a/units.c b/units.c
index 54be48b..9bc6c39 100644
--- a/units.c
+++ b/units.c
@@ -6340,8 +6340,6 @@
     if (setup)
         return;
 
-    setup = 1;
-
     flags.quiet = 1;       /* Do not supress prompting */
     flags.unitcheck = 0;   /* Unit checking is off */
     flags.verbose = 2;     /* Medium verbosity */
@@ -6400,7 +6398,7 @@
 
 
 void
-do_a_conversion(char *input, char *output)
+do_a_conversion(char *input, char *output, char *system)
 {
     char *inp, *out;
 
@@ -6421,6 +6419,9 @@
     else
         setnumformat();
 
+    setenv("UNITS_SYSTEM", system, 1);
+    printf("units system %s\n", getenv("UNITS_SYSTEM"));
+
     conversion_worker(input, output);
 }
 
@@ -6428,9 +6429,9 @@
 int test_main()
 {
     char a[] = "pi", b[] = "";
-    do_a_conversion(a, b);
-    do_a_conversion(a, b);
-    do_a_conversion(a, b);
+    do_a_conversion(a, b, "si");
+    do_a_conversion(a, b, "si");
+    do_a_conversion(a, b, "si");
 }
 
 
diff --git a/webview-frontend.cpp b/webview-frontend.cpp
index e3a2ed6..ac2fc90 100644
--- a/webview-frontend.cpp
+++ b/webview-frontend.cpp
@@ -7,7 +7,7 @@
 using json = nlohmann::json;
 
 extern "C" {
-    extern void do_a_conversion(char *, char *);
+    extern void do_a_conversion(char *, char *, char *);
 }
 
 extern char log_buffer[4096];
@@ -19,11 +19,12 @@
     json j = json::parse(arg);
     
     auto from = j[0].template get<std::string>(),
-        to = j[1].template get<std::string>();
+        to = j[1].template get<std::string>(),
+        system = j[2].template get<std::string>();
         
     std::cout << from << ' ' << to << std::endl;
     
-    do_a_conversion((char *)from.data(), to.size() > 0 ? (char *)to.data() : nullptr);
+    do_a_conversion((char *)from.data(), to.size() > 0 ? (char *)to.data() : nullptr, (char *)system.data());
     std::string res = json(std::string(log_buffer, log_buffer_ptr - log_buffer)).dump();
     log_buffer_ptr = log_buffer;
     std::cout << res << std::endl;
