diff --git a/data_src/index.html b/data_src/index.html
index ad4562189f3b4ac5bc3c74b5c4577c5b83cef04f..c787ff29bb255683b4fffb3f883eb744f5479bd7 100644
--- a/data_src/index.html
+++ b/data_src/index.html
@@ -184,7 +184,7 @@
                 </div>
                 <div class="col-6 text-end">
                   <button type="button" class="btn btn-sm btn-danger btnConfirm" data-action="reset"
-                    data-title="Factory Reset" data-text="erase all highscores and settings? (ToDo)" disabled>Factory
+                    data-title="Factory Reset" data-text="erase all highscores and settings?" disabled>Factory
                     Reset</button>
                 </div>
               </div>
diff --git a/src/network.cpp b/src/network.cpp
index cc9e0ce30e21b0542a4400d839f0855661a4de12..af216d8f3562cb76c5fb88f2e371a25fd4aaa8be 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -174,11 +174,16 @@ void onTelnetInput(String str)
     telnet.println("> disconnecting...");
     telnet.disconnectClient();
   }
-  else if (str == "reboot" || str == "reset")
+  else if (str == "reboot")
   {
     telnet.println("> rebooting...");
     ESP.restart();
   }
+  else if (str == "factory-reset")
+  {
+    telnet.println("> clearing settings and rebooting...");
+    ESP.restart();
+  }
 }
 
 void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
@@ -259,6 +264,10 @@ void handleJson(uint8_t *data)
     {
       ESP.restart();
     }
+    else if (doc["action"] == "reset")
+    {
+      clearSettings();
+    }
   }
 }
 
diff --git a/src/settings.cpp b/src/settings.cpp
index 27b0f6eff99a0ad0a9b97299df4410895cba8dcf..8faba919c3fcd118a1c960637c118905cec60510 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -27,7 +27,17 @@ void saveSettings() {
   preferences.putUInt("color_r", colorR);
   preferences.putUInt("color_g", colorG);
   preferences.putUInt("color_b", colorB);
-  preferences.end();  
+  preferences.end();
+}
+
+void clearSettings() {
+  preferences.begin("settings", false);
+  preferences.clear();
+  preferences.end();
+  preferences.begin("highscores", false);
+  preferences.clear();
+  preferences.end();
+  ESP.restart();
 }
 
 bool updateHighscores(int games, int ticks, int cells) {
diff --git a/src/settings.h b/src/settings.h
index b70038f8a8cdbf235c51012bf4d2f61187e83f0a..2190a76bba6fb4721d31edc8622db67b9f8783ff 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -19,6 +19,7 @@ typedef struct {
 
 void loadSettings();
 void saveSettings();
+void clearSettings();
 bool updateHighscores(int games, int ticks, int cells);
 Highscores getHighscores();