diff --git a/preload/apps/hid/__init__.py b/preload/apps/hid/__init__.py
index f4e9e9465e69bc1c484835c4198bec9cb4e2af31..9aaa8c76a0626aebe5aaec3a1ffa846b46af61a1 100644
--- a/preload/apps/hid/__init__.py
+++ b/preload/apps/hid/__init__.py
@@ -3,6 +3,7 @@ import color
 import display
 import ble_hid
 import bhi160
+import config
 
 from adafruit_hid.keyboard import Keyboard
 from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
@@ -15,10 +16,13 @@ from adafruit_hid.consumer_control import ConsumerControl
 
 
 import time
+import os
+
+
+disp = display.open()
 
 
 def keyboard_demo():
-    disp = display.open()
     disp.clear()
     disp.print("  card10", posy=0)
     disp.print(" Keyboard", posy=20)
@@ -50,7 +54,6 @@ def keyboard_demo():
 
 
 def mouse_demo():
-    disp = display.open()
     disp.clear()
     disp.print("  card10", posy=0)
     disp.print("  Mouse", posy=20)
@@ -86,7 +89,6 @@ def mouse_demo():
 
 
 def control_demo():
-    disp = display.open()
     disp.clear()
     disp.print("  card10", posy=0)
     disp.print("  Control", posy=20)
@@ -111,26 +113,79 @@ def control_demo():
                 cc.send(ConsumerControlCode.PLAY_PAUSE)
 
 
-disp = display.open()
-disp.clear()
-disp.print("card10 HID", posy=0)
-disp.print("   Demo", posy=20)
-disp.print("KBD", posy=60, fg=color.BLUE)
-disp.print("Mouse", posy=40, posx=80, fg=color.RED)
-disp.print("Control", posy=60, posx=60, fg=color.GREEN)
-disp.update()
-
-cc = ConsumerControl(ble_hid.devices)
-
-b_old = buttons.read()
-while True:
-    b_new = buttons.read()
-    if not b_old == b_new:
-        print(b_new)
-        b_old = b_new
-        if b_new == buttons.TOP_RIGHT:
-            mouse_demo()
-        elif b_new == buttons.BOTTOM_RIGHT:
-            control_demo()
-        elif b_new == buttons.BOTTOM_LEFT:
-            keyboard_demo()
+def selection_screen():
+    disp.clear()
+    disp.print("card10 HID", posy=0)
+    disp.print("   Demo", posy=20)
+    disp.print("KBD", posy=60, fg=color.BLUE)
+    disp.print("Mouse", posy=40, posx=80, fg=color.RED)
+    disp.print("Control", posy=60, posx=60, fg=color.GREEN)
+    disp.update()
+
+    b_old = buttons.read()
+    while True:
+        b_new = buttons.read()
+        if not b_old == b_new:
+            print(b_new)
+            b_old = b_new
+            if b_new == buttons.TOP_RIGHT:
+                mouse_demo()
+            elif b_new == buttons.BOTTOM_RIGHT:
+                control_demo()
+            elif b_new == buttons.BOTTOM_LEFT:
+                keyboard_demo()
+
+
+def set_config(enable):
+    if enable:
+        config.set_string("ble_hid_enable", "true")
+    else:
+        config.set_string("ble_hid_enable", "false")
+
+    disp.clear()
+    disp.print("resetting", posy=0, fg=[0, 255, 255])
+    disp.print("to toggle", posy=20, fg=[0, 255, 255])
+    disp.print("HID state", posy=40, fg=[0, 255, 255])
+    disp.update()
+    os.reset()
+
+
+def welcome_screen(is_enabled):
+    disp.clear()
+    disp.print("card10 HID", posy=0)
+    disp.print("   Demo", posy=20)
+
+    if is_enabled:
+        disp.print("Start ->", posy=40, posx=40, fg=color.GREEN)
+        disp.print("<- Disable", posy=60, posx=0, fg=color.RED)
+    else:
+        disp.print("Enable ->", posy=40, posx=30, fg=color.GREEN)
+
+    disp.update()
+
+    b_old = buttons.read()
+    while True:
+        b_new = buttons.read()
+        if not b_old == b_new:
+            print(b_new)
+            b_old = b_new
+            if b_new == buttons.TOP_RIGHT:
+                if is_enabled:
+                    # while buttons.read(): pass
+                    selection_screen()
+                else:
+                    set_config(True)
+            elif b_new == buttons.BOTTOM_LEFT:
+                if is_enabled:
+                    set_config(False)
+
+
+is_enabled = False
+try:
+    enabled = config.get_string("ble_hid_enable")
+    if enabled.lower() == "true" or enabled == "1":
+        is_enabled = True
+except OSError:
+    pass
+
+welcome_screen(is_enabled)