diff --git a/preload/apps/ble/__init__.py b/preload/apps/ble/__init__.py
index 893fbde6a75a010104b96577e3a7a33664fd54e9..ca32a0cbdd2aa6239338ae086326974c6775da7c 100644
--- a/preload/apps/ble/__init__.py
+++ b/preload/apps/ble/__init__.py
@@ -1,87 +1,83 @@
 import os
 import display
-import utime
-import buttons
+import simple_menu
 
 CONFIG_NAME = "ble.txt"
 MAC_NAME = "mac.txt"
-ACTIVE_STRING = "active=true"
-INACTIVE_STRING = "active=false"
-
-
-def init():
-    if CONFIG_NAME not in os.listdir("."):
-        with open(CONFIG_NAME, "w") as f:
-            f.write(INACTIVE_STRING)
-
+BLE="active"
+BLE_FILETRANS="fileTrans"
+ENABLE = "true"
+DISABLE = "false"
+
+MENU = {
+    BLE: {
+        "name:":"Active",
+        "value":False,
+        "run": lambda: toggle(BLE),
+    },
+    BLE_FILETRANS: {
+        "name":"FileTransfer",
+        "value": False,
+        "run": lambda: toggle(BLE),
+    },
+    "__save__": {
+        "name": "Save",
+        "run": lambda: save()  os.reset(),
+    }
+}
 
 def load_mac():
     if MAC_NAME in os.listdir("."):
         with open(MAC_NAME) as f:
             return f.read().strip()
 
+def init():
+    if CONFIG_NAME not in os.listdir("."):
+        with open(CONFIG_NAME, "w") as f:
+            f.write(BLE+"="+DISABLE)
+            f.write(BLE_FILETRANS+"="+ENABLE)
 
-def triangle(disp, x, y, left):
-    yf = 1 if left else -1
-    scale = 6
-    disp.line(x - scale * yf, int(y + scale / 2), x, y)
-    disp.line(x, y, x, y + scale)
-    disp.line(x, y + scale, x - scale * yf, y + int(scale / 2))
-
-
-def toggle():
-    content = INACTIVE_STRING if is_active() else ACTIVE_STRING
-    with open(CONFIG_NAME, "w") as f:
-        f.write(content)
-
-    disp.clear()
-    disp.print("resetting", posy=0, fg=[0, 255, 255])
-    disp.print("to toggle", posy=20, fg=[0, 255, 255])
-    disp.print("BLE state", posy=40, fg=[0, 255, 255])
-    disp.update()
-    os.reset()
-
-
-def is_active():
-    with open(CONFIG_NAME, "r") as f:
-        state = f.readlines()[0]
-        if len(state) < len(ACTIVE_STRING):
-            return False
-        state = state[0 : len(ACTIVE_STRING)]
-        return state == ACTIVE_STRING
-
-
-def headline():
-    disp.print("BLE", posy=0, fg=[0, 255, 255])
-    if is_active():
-        disp.print("active", posy=20, fg=[0, 255, 0])
-        mac = load_mac()
-        if mac is not None:
-            disp.print(mac[9:], posy=60, fg=[0, 0, 255])
-    else:
-        disp.print("inactive", posy=20, fg=[255, 0, 0])
-
-
-def selector():
-    triangle(disp, 148, 46, False)
-    disp.print("toggle", posx=25, posy=40, fg=[255, 255, 255])
-
-
-disp = display.open()
-button_pressed = True
-init()
 
-while True:
-    disp.clear()
-    headline()
-    v = buttons.read(buttons.TOP_RIGHT)
-    if v == 0:
-        button_pressed = False
+def load():
+    with open(CONFIG_NAME) as f:
+        for line in f.readlines():
+            key, value = line.split("=")
+            MENU[key].value = value == ENABLE,
+            
 
-    if not button_pressed and v & buttons.TOP_RIGHT != 0:
-        button_pressed = True
-        toggle()
+def toggle(key):
+    MENU[key].value = not MENU[key].value
 
-    selector()
-    disp.update()
-    utime.sleep(0.1)
+def save():
+    with open(CONFIG_NAME, "w") as f:
+        f.write(BLE + "=" + MENU[BLE].value)
+        f.write(BLE_FILETRANS + "=" + MENU[BLE_FILETRANS].value)
+
+class BLEMenu(simple_menu.Menu):
+    color_1 = color.CAMPGREEN
+    color_2 = color.CAMPGREEN_DARK
+
+    def draw_entry(self, item, index, offset):
+        name = item if type(item) is str else item.name
+        self.disp.print(
+            " " + name + " " * 9,
+            posy=offset,
+            fg=self.color_text,
+            bg=self.color_1 if index % 2 == 0 else self.color_2,
+        )
+        if value in item:
+            self.disp.rect(
+                xs=-20, ys=offset,
+                xe=-4, ye=offset+18,
+                filled=True,
+                col=color.GREEN if item.value else color.RED
+            )
+
+
+    def on_select(self, item, index):
+        if type(item) is not str and "run" in item:
+            item.run()
+
+
+if __name__ == "__main__":
+    BLEMenu([load_mac()]+MENU).run()