diff --git a/README.md b/README.md
index 73b86235e01ac5a0fed65a41e79ab20ae451f4e0..9ea8f7e3d62fcc60fe68271c8ded9c495db3fdc3 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,7 @@ A Game Boy emulator that is written in Rust 🦀.
 * Web and SDL front-ends
 * Fullscreen mode
 * Support for multiple MBCs: MBC1, MBC2, MBC3, and MBC5
+* Transparent RAM saving using [Web Storage API](https://developer.mozilla.org/docs/Web/API/Window/localStorage)
 * Variable CPU clock speed
 * Debug mode: VRAM and registers
 
diff --git a/examples/web/util.ts b/examples/web/util.ts
index d52196c025576237af8c49dd7a1f98a18f56ec4f..37a00f53f35e731290ed7797421d93b7b6e12b81 100644
--- a/examples/web/util.ts
+++ b/examples/web/util.ts
@@ -1,18 +1,17 @@
 export const bufferToBase64 = (buffer: Uint8Array) => {
-    const array = Array(buffer.length)
-        .fill("")
+    const data = Array(buffer.length)
+        .fill(null)
         .map((_, i) => String.fromCharCode(buffer[i]))
         .join("");
-    const base64 = btoa(array);
+    const base64 = btoa(data);
     return base64;
 };
 
 export const base64ToBuffer = (base64: string) => {
-    const data = window.atob(base64);
-    const length = data.length;
-    const buffer = new Uint8Array(length);
-    for (let i = 0; i < length; i++) {
-        buffer[i] = data.charCodeAt(i);
-    }
+    const data = atob(base64);
+    const array = Array(data.length)
+        .fill(null)
+        .map((_, i) => data.charCodeAt(i));
+    const buffer = new Uint8Array(array);
     return buffer;
 };