diff --git a/components/badge23/include/badge23/spio.h b/components/badge23/include/badge23/spio.h
index 7dfe394423ea7899e6f4562f298dc04234c8e862..ee8f5f3cabf9cbec64648f9881f3c8b73d3553ee 100644
--- a/components/badge23/include/badge23/spio.h
+++ b/components/badge23/include/badge23/spio.h
@@ -1,6 +1,18 @@
 #pragma once
 #include <stdint.h>
 
+#define BUTTON_PRESSED_DOWN 2
+#define BUTTON_PRESSED_LEFT -1
+#define BUTTON_PRESSED_RIGHT 1
+#define BUTTON_NOT_PRESSED 0
+
 int8_t get_button_state(bool leftbutton);
 void update_button_state();
 void init_buttons();
+
+int8_t spio_menu_button_get();
+int8_t spio_application_button_get();
+int8_t spio_left_button_get();
+int8_t spio_right_button_get();
+int8_t spio_menu_button_get_left();
+void spio_menu_button_set_left(bool left);
diff --git a/components/badge23/spio.c b/components/badge23/spio.c
index e42842f9b61ab1544ba52884c2c32430ff5b7e86..c93ca9d2ebbfac9d0e9c2058c8350c354db85911 100644
--- a/components/badge23/spio.c
+++ b/components/badge23/spio.c
@@ -2,6 +2,7 @@
 #include "driver/gpio.h"
 #include "badge23_hwconfig.h"
 #include "stdint.h"
+#include "badge23/spio.h"
 
 static int8_t leftbutton = 0;
 static int8_t rightbutton = 0;
@@ -39,23 +40,23 @@ static void _init_buttons(){
 
 void update_button_state(){
     if(!gpio_get_level(RIGHT_BUTTON_LEFT)){
-        rightbutton = -1;
+        rightbutton = BUTTON_PRESSED_LEFT;
     } else if(!gpio_get_level(RIGHT_BUTTON_MID)){
-        rightbutton = 2;
+        rightbutton = BUTTON_PRESSED_DOWN;
     } else if(!gpio_get_level(RIGHT_BUTTON_RIGHT)){
-        rightbutton = 1;
+        rightbutton = BUTTON_PRESSED_RIGHT;
     } else {
-        rightbutton = 0;
+        rightbutton = BUTTON_NOT_PRESSED;
     }
 
     if(!gpio_get_level(LEFT_BUTTON_LEFT)){
-        leftbutton = -1;
+        leftbutton = BUTTON_PRESSED_LEFT;
     } else if(!gpio_get_level(LEFT_BUTTON_MID)){
-        leftbutton = 2;
+        leftbutton = BUTTON_PRESSED_DOWN;
     } else if(!gpio_get_level(LEFT_BUTTON_RIGHT)){
-        leftbutton = 1;
+        leftbutton = BUTTON_PRESSED_RIGHT;
     } else {
-        leftbutton = 0;
+        leftbutton = BUTTON_NOT_PRESSED;
     }
 }
 
@@ -102,23 +103,23 @@ void update_button_state(){
     uint8_t lm = gpio_get_level(LEFT_BUTTON_MID);
 
     if(!rl){
-        rightbutton = -1;
+        rightbutton = BUTTON_PRESSED_LEFT;
     } else if(!rm){
-        rightbutton = 2;
+        rightbutton = BUTTON_PRESSED_DOWN;
     } else if(!rr){
-        rightbutton = 1;
+        rightbutton = BUTTON_PRESSED_RIGHT;
     } else {
-        rightbutton = 0;
+        rightbutton = BUTTON_NOT_PRESSED;
     }
 
     if(!ll){
-        leftbutton = -1;
+        leftbutton = BUTTON_PRESSED_LEFT;
     } else if(!lm){
-        leftbutton = 2;
+        leftbutton = BUTTON_PRESSED_DOWN;
     } else if(!lr){
-        leftbutton = 1;
+        leftbutton = BUTTON_PRESSED_RIGHT;
     } else {
-        leftbutton = 0;
+        leftbutton = BUTTON_NOT_PRESSED;
     }
 }
 
@@ -138,3 +139,29 @@ int8_t get_button_state(bool left){
     if(left) return leftbutton;
     return rightbutton;
 }
+
+static bool menu_button_left = 0;
+
+void spio_menu_button_set_left(bool left){
+    menu_button_left = 1;
+}
+
+int8_t spio_menu_button_get(){
+    return get_button_state(menu_button_left);
+}
+
+int8_t spio_application_button_get(){
+    return get_button_state(!menu_button_left);
+}
+
+int8_t spio_left_button_get(){
+    return get_button_state(1);
+}
+
+int8_t spio_right_button_get(){
+    return get_button_state(0);
+}
+
+int8_t spio_menu_button_get_left(){
+    return menu_button_left;
+}
diff --git a/python_payload/event.py b/python_payload/event.py
index 599c8c80d849f862a924e3c2049185b77449ca33..d8eeffc5b44f73885463a425926015b2795c76f0 100644
--- a/python_payload/event.py
+++ b/python_payload/event.py
@@ -74,12 +74,17 @@ class Engine():
         input_state = []
 
         #buttons
-        for i in [0,1]:
-            input_state.append({
-                "type" : "button",
-                "index" : i,
-                "value" : hardware.get_button(i)
-            })
+        input_state.append({
+            "type" : "button",
+            "index" : 0,
+            "value" : hardware.menu_button_get()
+        })
+
+        input_state.append({
+            "type" : "button",
+            "index" : 1,
+            "value" : hardware.application_button_get()
+        })
 
         #captouch
         for i in range(0,10):
@@ -243,4 +248,4 @@ class Sequence():
     
         
 global the_engine
-the_engine = Engine()
\ No newline at end of file
+the_engine = Engine()
diff --git a/usermodule/mp_hardware.c b/usermodule/mp_hardware.c
index 81fcb9069708897ee7a1d21e45290a394efd644b..f0fc7fe79b7a57f6a178a2ee98968ab761fbf5bd 100644
--- a/usermodule/mp_hardware.c
+++ b/usermodule/mp_hardware.c
@@ -101,12 +101,39 @@ STATIC mp_obj_t mp_captouch_set_calibration_afe_target(mp_obj_t target_in) {
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_captouch_set_calibration_afe_target_obj, mp_captouch_set_calibration_afe_target);
 
-STATIC mp_obj_t mp_get_button(size_t n_args, const mp_obj_t *args) {
-    uint8_t leftbutton = mp_obj_get_int(args[0]);
-    int8_t ret = get_button_state(leftbutton);
-    return mp_obj_new_int(ret);
+
+STATIC mp_obj_t mp_menu_button_set_left(mp_obj_t left) {
+    spio_menu_button_set_left(mp_obj_get_int(left));
+    return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_menu_button_set_left_obj, mp_menu_button_set_left);
+
+STATIC mp_obj_t mp_menu_button_get_left() {
+    return mp_obj_new_int(spio_menu_button_get_left());
 }
-STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_get_button_obj, 1, 2, mp_get_button);
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_menu_button_get_left_obj, mp_menu_button_get_left);
+
+STATIC mp_obj_t mp_menu_button_get() {
+    return mp_obj_new_int(spio_menu_button_get());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_menu_button_get_obj, mp_menu_button_get);
+
+STATIC mp_obj_t mp_application_button_get() {
+    return mp_obj_new_int(spio_application_button_get());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_application_button_get_obj, mp_application_button_get);
+
+STATIC mp_obj_t mp_left_button_get() {
+    return mp_obj_new_int(spio_left_button_get());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_left_button_get_obj, mp_left_button_get);
+
+STATIC mp_obj_t mp_right_button_get() {
+    return mp_obj_new_int(spio_right_button_get());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_right_button_get_obj, mp_right_button_get);
+
+
 
 STATIC mp_obj_t mp_set_global_volume_dB(size_t n_args, const mp_obj_t *args) {
     mp_float_t x = mp_obj_get_float(args[0]);
@@ -179,6 +206,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_get_ctx_obj, 0, 0, mp_get_ctx);
 STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_badge_audio) },
     { MP_ROM_QSTR(MP_QSTR_init_done), MP_ROM_PTR(&mp_init_done_obj) },
+
     { MP_ROM_QSTR(MP_QSTR_captouch_calibration_active), MP_ROM_PTR(&mp_captouch_calibration_active_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_captouch), MP_ROM_PTR(&mp_get_captouch_obj) },
     { MP_ROM_QSTR(MP_QSTR_captouch_get_petal_pad_raw), MP_ROM_PTR(&mp_captouch_get_petal_pad_raw_obj) },
@@ -188,7 +216,14 @@ STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR_captouch_set_petal_pad_threshold), MP_ROM_PTR(&mp_captouch_set_petal_pad_threshold_obj) },
     { MP_ROM_QSTR(MP_QSTR_captouch_autocalib), MP_ROM_PTR(&mp_captouch_autocalib_obj) },
     { MP_ROM_QSTR(MP_QSTR_captouch_set_calibration_afe_target), MP_ROM_PTR(&mp_captouch_set_calibration_afe_target_obj) },
-    { MP_ROM_QSTR(MP_QSTR_get_button), MP_ROM_PTR(&mp_get_button_obj) },
+
+    { MP_ROM_QSTR(MP_QSTR_menu_button_get), MP_ROM_PTR(&mp_menu_button_get_obj) },
+    { MP_ROM_QSTR(MP_QSTR_application_button_get), MP_ROM_PTR(&mp_application_button_get_obj) },
+    { MP_ROM_QSTR(MP_QSTR_left_button_get), MP_ROM_PTR(&mp_left_button_get_obj) },
+    { MP_ROM_QSTR(MP_QSTR_right_button_get), MP_ROM_PTR(&mp_right_button_get_obj) },
+    { MP_ROM_QSTR(MP_QSTR_menu_button_set_left), MP_ROM_PTR(&mp_menu_button_set_left_obj) },
+    { MP_ROM_QSTR(MP_QSTR_menu_button_get_left), MP_ROM_PTR(&mp_menu_button_get_left_obj) },
+
     { MP_ROM_QSTR(MP_QSTR_set_global_volume_dB), MP_ROM_PTR(&mp_set_global_volume_dB_obj) },
     { MP_ROM_QSTR(MP_QSTR_count_sources), MP_ROM_PTR(&mp_count_sources_obj) },
     { MP_ROM_QSTR(MP_QSTR_dump_all_sources), MP_ROM_PTR(&mp_dump_all_sources_obj) },
@@ -198,6 +233,11 @@ STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR_display_update), MP_ROM_PTR(&mp_display_update_obj) },
     { MP_ROM_QSTR(MP_QSTR_version), MP_ROM_PTR(&mp_version_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_ctx), MP_ROM_PTR(&mp_get_ctx_obj) },
+
+    { MP_ROM_QSTR(MP_QSTR_BUTTON_PRESSED_LEFT), MP_ROM_INT(BUTTON_PRESSED_LEFT) },
+    { MP_ROM_QSTR(MP_QSTR_BUTTON_PRESSED_RIGHT), MP_ROM_INT(BUTTON_PRESSED_RIGHT) },
+    { MP_ROM_QSTR(MP_QSTR_BUTTON_PRESSED_DOWN), MP_ROM_INT(BUTTON_PRESSED_DOWN) },
+    { MP_ROM_QSTR(MP_QSTR_BUTTON_NOT_PRESSED), MP_ROM_INT(BUTTON_NOT_PRESSED) },
 };
 
 STATIC MP_DEFINE_CONST_DICT(mp_module_hardware_globals, mp_module_hardware_globals_table);