diff --git a/pycardium/modules/leds.c b/pycardium/modules/leds.c
index 6010d2131a5293ee969c4c34e87f0b2209f6605b..c2096fdabffc45bd02dbfa3c8edcd1a0badb831c 100644
--- a/pycardium/modules/leds.c
+++ b/pycardium/modules/leds.c
@@ -1,22 +1,33 @@
 #include "py/obj.h"
+#include "py/objlist.h"
+#include "py/runtime.h"
+
 #include "epicardium.h"
 
-static mp_obj_t mp_leds_set(size_t n_args, const mp_obj_t *args)
+static mp_obj_t mp_leds_set(mp_obj_t led_in, mp_obj_t color_in)
 {
-	int led   = mp_obj_get_int(args[0]);
-	uint8_t r = mp_obj_get_int(args[1]);
-	uint8_t g = mp_obj_get_int(args[2]);
-	uint8_t b = mp_obj_get_int(args[3]);
+	mp_check_self(mp_obj_is_type(color_in, &mp_type_list));
+	mp_obj_list_t*color = MP_OBJ_TO_PTR(color_in);
+	int led = mp_obj_get_int(led_in);
+
+	if (color->len < 3) {
+		mp_raise_ValueError("color list must have 3 elements");
+	}
 
-	epic_leds_set(led, r, g, b);
+	epic_leds_set(
+		led,
+		mp_obj_get_int(color->items[0]),
+		mp_obj_get_int(color->items[1]),
+		mp_obj_get_int(color->items[2])
+	);
 
 	return mp_const_none;
 }
-static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(leds_set_obj, 4, 4, mp_leds_set);
+static MP_DEFINE_CONST_FUN_OBJ_2(leds_set_obj, mp_leds_set);
 
 static const mp_rom_map_elem_t leds_module_globals_table[] = {
-	{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_leds)},
-	{MP_ROM_QSTR(MP_QSTR_set), MP_ROM_PTR(&leds_set_obj)},
+	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_leds) },
+	{ MP_ROM_QSTR(MP_QSTR_set), MP_ROM_PTR(&leds_set_obj) },
 };
 static MP_DEFINE_CONST_DICT(leds_module_globals, leds_module_globals_table);