diff --git a/utils/localStorage.go b/utils/localStorage.go
index 0c0da260755ec9336433195da4228e8fdeebd2b3..d4681c2bb76cee5ffcfa20dc11ee332da715d4b5 100644
--- a/utils/localStorage.go
+++ b/utils/localStorage.go
@@ -98,29 +98,34 @@ func (ls *LocalStorage) Clear() {
 	ls.clear()
 }
 
-// ClearWASM clears all the keys in storage created by WASM.
-// TODO: add test.
-func (ls *LocalStorage) ClearWASM() {
-	for i := 0; i < ls.Length(); i++ {
-		v := ls.key(i)
-		if !v.IsNull() && strings.HasPrefix(v.String(), localStorageWasmPrefix) {
-			ls.RemoveItem(strings.TrimPrefix(v.String(), localStorageWasmPrefix))
-
-			// Decrement to account for reduced length from removed key
-			i--
+// ClearPrefix clears all keys with the given prefix.
+func (ls *LocalStorage) ClearPrefix(prefix string) {
+	// Get a copy of all key names at once
+	keys := js.Global().Get("Object").Call("keys", ls.v)
+
+	// Loop through each key
+	for i := 0; i < keys.Length(); i++ {
+		if v := keys.Index(i); !v.IsNull() {
+			keyName := strings.TrimPrefix(v.String(), localStorageWasmPrefix)
+			if strings.HasPrefix(keyName, prefix) {
+				ls.RemoveItem(keyName)
+			}
 		}
 	}
 }
 
-// ClearPrefix clears all keys with the given prefix.
-func (ls *LocalStorage) ClearPrefix(prefix string) {
-	for i := 0; i < ls.Length(); i++ {
-		keyName, err := ls.Key(i)
-		if err == nil && strings.HasPrefix(keyName, prefix) {
-			ls.RemoveItem(keyName)
-
-			// Decrement to account for reduced length from removed key
-			i--
+// ClearWASM clears all the keys in storage created by WASM.
+func (ls *LocalStorage) ClearWASM() {
+	// Get a copy of all key names at once
+	keys := js.Global().Get("Object").Call("keys", ls.v)
+
+	// Loop through each key
+	for i := 0; i < keys.Length(); i++ {
+		if v := keys.Index(i); !v.IsNull() {
+			keyName := v.String()
+			if strings.HasPrefix(keyName, localStorageWasmPrefix) {
+				ls.RemoveItem(strings.TrimPrefix(keyName, localStorageWasmPrefix))
+			}
 		}
 	}
 }
diff --git a/utils/localStorage_test.go b/utils/localStorage_test.go
index 7f08f450f3f2189ca98ae8dbdc1dee4a174e8ff3..6d8968491d6153ea47a9d666d73d8ea0b0fa3d22 100644
--- a/utils/localStorage_test.go
+++ b/utils/localStorage_test.go
@@ -85,28 +85,31 @@ func TestLocalStorage_Clear(t *testing.T) {
 	}
 }
 
-// Tests that LocalStorage.ClearWASM deletes all the WASM keys from storage and
-// does not remove any others
-func TestLocalStorage_ClearWASM(t *testing.T) {
+// Tests that LocalStorage.ClearPrefix deletes only the keys with the given
+// prefix.
+func TestLocalStorage_ClearPrefix(t *testing.T) {
 	jsStorage.clear()
 	prng := rand.New(rand.NewSource(11))
 	var yesPrefix, noPrefix []string
+	prefix := "keyNamePrefix/"
+
 	for i := 0; i < 10; i++ {
 		keyName := "keyNum" + strconv.Itoa(i)
 		if prng.Intn(2) == 0 {
+			keyName = prefix + keyName
 			yesPrefix = append(yesPrefix, keyName)
-			jsStorage.SetItem(keyName, []byte(strconv.Itoa(i)))
 		} else {
 			noPrefix = append(noPrefix, keyName)
-			jsStorage.setItem(keyName, strconv.Itoa(i))
 		}
+
+		jsStorage.SetItem(keyName, []byte(strconv.Itoa(i)))
 	}
 
-	jsStorage.ClearWASM()
+	jsStorage.ClearPrefix(prefix)
 
 	for _, keyName := range noPrefix {
-		if v := jsStorage.getItem(keyName); v.IsNull() {
-			t.Errorf("Could not get keyName %q.", keyName)
+		if _, err := jsStorage.GetItem(keyName); err != nil {
+			t.Errorf("Could not get keyName %q: %+v", keyName, err)
 		}
 	}
 	for _, keyName := range yesPrefix {
@@ -117,31 +120,28 @@ func TestLocalStorage_ClearWASM(t *testing.T) {
 	}
 }
 
-// Tests that LocalStorage.ClearPrefix deletes only the keys with the given
-// prefix.
-func TestLocalStorage_ClearPrefix(t *testing.T) {
+// Tests that LocalStorage.ClearWASM deletes all the WASM keys from storage and
+// does not remove any others
+func TestLocalStorage_ClearWASM(t *testing.T) {
 	jsStorage.clear()
 	prng := rand.New(rand.NewSource(11))
 	var yesPrefix, noPrefix []string
-	prefix := "keyNamePrefix/"
-
 	for i := 0; i < 10; i++ {
 		keyName := "keyNum" + strconv.Itoa(i)
 		if prng.Intn(2) == 0 {
-			keyName = prefix + keyName
 			yesPrefix = append(yesPrefix, keyName)
+			jsStorage.SetItem(keyName, []byte(strconv.Itoa(i)))
 		} else {
 			noPrefix = append(noPrefix, keyName)
+			jsStorage.setItem(keyName, strconv.Itoa(i))
 		}
-
-		jsStorage.SetItem(keyName, []byte(strconv.Itoa(i)))
 	}
 
-	jsStorage.ClearPrefix(prefix)
+	jsStorage.ClearWASM()
 
 	for _, keyName := range noPrefix {
-		if _, err := jsStorage.GetItem(keyName); err != nil {
-			t.Errorf("Could not get keyName %q: %+v", keyName, err)
+		if v := jsStorage.getItem(keyName); v.IsNull() {
+			t.Errorf("Could not get keyName %q.", keyName)
 		}
 	}
 	for _, keyName := range yesPrefix {