diff --git a/Documentation/bluetooth/card10.rst b/Documentation/bluetooth/card10.rst
index 19c3b993c2f188e9f376b6d109555025832ddef1..e32ed6b4c6ed1fc27256feeb2b05443306cff912 100644
--- a/Documentation/bluetooth/card10.rst
+++ b/Documentation/bluetooth/card10.rst
@@ -18,67 +18,67 @@ The current draft uses following service specification:
 - Time update characteristic:
 
   UUID: ``42230201-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Vibra characteristic:
 
   UUID: ``4223020f-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Rockets characteristic:
 
   UUID: ``42230210-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Background LED Bottom Left characteristic:
 
   UUID: ``42230211-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Background LED Bottom Right characteristic:
 
   UUID: ``42230212-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Background LED Top Right characteristic:
 
   UUID: ``42230213-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Background LED Top Left characteristic:
 
   UUID: ``42230214-2342-2342-2342-234223422342``
-  write
+  write no reponse
 
 - LEDS dim bottom characteristic:
 
   UUID: ``42230215-2342-2342-2342-234223422342``
-  write
+  write with response
 
 - LEDs dim top characteristic:
 
   UUID: ``42230216-2342-2342-2342-234223422342``
-  write
+  write with response
 
 - LEDs powersafe characteristic:
 
   UUID: ``42230217-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - Flashlight characteristic:
 
   UUID: ``42230218-2342-2342-2342-234223422342``
-  write
+  write no response
 
 - LEDs above characteristic:
 
   UUID: ``42230220-2342-2342-2342-234223422342``
-  write
+  write no reponse
 
 - Light sensor characteristic:
 
   UUID: ``422302f0-2342-2342-2342-234223422342``
-  read
+  read no response
 
 Time update characteristic
 ---------------------------------
diff --git a/epicardium/ble/card10.c b/epicardium/ble/card10.c
index e7aa58fabe98d6fc78474223b008562e8fbc63ea..ab562db28b448493238a1c234c8cdcf9a96f0716 100644
--- a/epicardium/ble/card10.c
+++ b/epicardium/ble/card10.c
@@ -1,20 +1,8 @@
 #include "wsf_types.h"
-#include "wsf_os.h"
-#include "wsf_buf.h"
-#include "wsf_timer.h"
-#include "wsf_trace.h"
-#include "app_ui.h"
-#include "fit/fit_api.h"
-#include "hci_vs.h"
-
-#include "ff.h"
-
 #include "util/bstream.h"
+#include "wsf_assert.h"
 #include "att_api.h"
 
-#include "FreeRTOS.h"
-#include "crc32.h"
-
 #include "epicardium.h"
 
 #include <stdio.h>
@@ -85,16 +73,19 @@ enum {
 
 /* BLE UUID for card10 service*/
 static const uint8_t UUID_svc[] = { CARD10_UUID_SUFFIX, 0x0, CARD10_UUID_PREFIX };
-
+// works vor everyone?
+static const uint16_t UUID_len = sizeof(UUID_svc);
 
 // starting at 0x01 with write (non visual) charateristics
 
 /* BLE UUID for card10 time update */
 static const uint8_t UUID_char_time[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_TIME_UPDATE_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x01, CARD10_UUID_PREFIX
 };
+// works vor everyone?
+static const uint16_t UUID_char_len = sizeof(UUID_char_time);
 
 static const uint8_t UUID_attChar_time[] = {
 	CARD10_UUID_SUFFIX, 0x01, CARD10_UUID_PREFIX
@@ -102,7 +93,7 @@ static const uint8_t UUID_attChar_time[] = {
 
 /* BLE UUID for card10 char vibra */
 static const uint8_t UUID_char_vibra[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_VIBRA_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x0f, CARD10_UUID_PREFIX
 };
@@ -116,7 +107,7 @@ static const uint8_t UUID_attChar_vibra[] = {
 
 /* BLE UUID for card10 char rockets */
 static const uint8_t UUID_char_rockets[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_ROCKETS_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x10, CARD10_UUID_PREFIX
 };
@@ -127,7 +118,7 @@ static const uint8_t UUID_attChar_rockets[] = {
 
 /* BLE UUID for card10 led background bottom left */
 static const uint8_t UUID_char_led_bg_bottom_left[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LED_BG_BOTTOM_LEFT_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x11, CARD10_UUID_PREFIX
 };
@@ -138,7 +129,7 @@ static const uint8_t UUID_attChar_led_bg_bottom_left[] = {
 
 /* BLE UUID for card10 led background bottom right */
 static const uint8_t UUID_char_led_bg_bottom_right[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LED_BG_BOTTOM_RIGHT_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x12, CARD10_UUID_PREFIX
 };
@@ -149,7 +140,7 @@ static const uint8_t UUID_attChar_led_bg_bottom_right[] = {
 
 /* BLE UUID for card10 led background top right */
 static const uint8_t UUID_char_led_bg_top_right[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LED_BG_TOP_RIGHT_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x13, CARD10_UUID_PREFIX
 };
@@ -160,7 +151,7 @@ static const uint8_t UUID_attChar_led_bg_top_right[] = {
 
 /* BLE UUID for card10 led background top left */
 static const uint8_t UUID_char_led_bg_top_left[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LED_BG_TOP_LEFT_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x14, CARD10_UUID_PREFIX
 };
@@ -193,7 +184,7 @@ static const uint8_t UUID_attChar_leds_top_dim[] = {
 
 /* BLE UUID for card10 powersafe */
 static const uint8_t UUID_char_led_powersafe[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LED_POWERSAFE_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x17, CARD10_UUID_PREFIX
 };
@@ -204,7 +195,7 @@ static const uint8_t UUID_attChar_led_powersafe[] = {
 
 /* BLE UUID for card10 flashlight */
 static const uint8_t UUID_char_flashlight[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_FLASHLIGHT_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x18, CARD10_UUID_PREFIX
 };
@@ -215,7 +206,7 @@ static const uint8_t UUID_attChar_flashlight[] = {
 
 /* BLE UUID for card10 above leds */
 static const uint8_t UUID_char_leds_above[] = {
-	ATT_PROP_WRITE,
+	ATT_PROP_WRITE_NO_RSP,
 	UINT16_TO_BYTES(CARD10_LEDS_ABOVE_VAL_HDL),
 	CARD10_UUID_SUFFIX, 0x20, CARD10_UUID_PREFIX
 };
@@ -234,308 +225,267 @@ static const uint8_t UUID_char_light_sensor[] = {
 static const uint8_t UUID_attChar_light_sensor[] = {
 	CARD10_UUID_SUFFIX, 0xf0, CARD10_UUID_PREFIX
 };
-/* clang-format on */
+
+static uint8_t initLightSensorValue[] = { UINT16_TO_BYTES(0) };
+static uint16_t initLightSensorLen = sizeof(initLightSensorValue);
 
 /*
  * Create the BLE service description. 
  */
-static void *addCard10GroupDyn(void)
-{
-	void *pSHdl;
-
-	uint8_t initLightSensorValue[] = { UINT16_TO_BYTES(0) };
-
-	/* Create the service */
-	pSHdl = AttsDynCreateGroup(CARD10_START_HDL, CARD10_END_HDL);
-	if (pSHdl != NULL) {
-		/* Primary service */
-		AttsDynAddAttrConst(
-			pSHdl,
-			attPrimSvcUuid,
-			UUID_svc,
-			sizeof(UUID_svc),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		// TIME UPDTAE
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_time,
-			sizeof(UUID_char_time),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_time,
-			NULL,
-			0,
-			sizeof(uint64_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// VIBRA
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_vibra,
-			sizeof(UUID_char_vibra),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_vibra,
-			NULL,
-			0,
-			sizeof(uint16_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// ROCKETS
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_rockets,
-			sizeof(UUID_char_rockets),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_rockets,
-			NULL,
-			0,
-			3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// BG LED Bottom left
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_led_bg_bottom_left,
-			sizeof(UUID_char_led_bg_bottom_left),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_led_bg_bottom_left,
-			NULL,
-			0,
-			3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// BG LED Bottom right
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_led_bg_bottom_right,
-			sizeof(UUID_char_led_bg_bottom_right),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_led_bg_bottom_right,
-			NULL,
-			0,
-			3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// BG LED top right
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_led_bg_top_right,
-			sizeof(UUID_char_led_bg_top_right),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_led_bg_top_right,
-			NULL,
-			0,
-			3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// BG LED top left
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_led_bg_top_left,
-			sizeof(UUID_char_led_bg_top_left),
-			0,
-			ATTS_PERMIT_READ
-		);
 
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_led_bg_top_left,
-			NULL,
-			0,
-			3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// Dim bottom module
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_leds_bottom_dim,
-			sizeof(UUID_char_leds_bottom_dim),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_leds_bottom_dim,
-			NULL,
-			0,
-			sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// Dim top module
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_leds_top_dim,
-			sizeof(UUID_char_leds_top_dim),
-			0,
-			ATTS_PERMIT_READ
-		);
-
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_leds_top_dim,
-			NULL,
-			0,
-			sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// led powersafe
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_led_powersafe,
-			sizeof(UUID_char_led_powersafe),
-			0,
-			ATTS_PERMIT_READ
-		);
+static const attsAttr_t card10SvcAttrList[] =
+{
+	{
+		.pUuid = attPrimSvcUuid,
+		.pValue = (uint8_t *) UUID_svc,
+		.pLen = (uint16_t *) &UUID_len,
+		.maxLen = sizeof(UUID_svc),
+		.permissions = ATTS_PERMIT_READ
+	},
+
+	// TIME
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_time,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_time),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_time,
+		.pValue = NULL,
+		.maxLen = sizeof(uint64_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// VIBRA
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_vibra,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_vibra),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_vibra,
+		.pValue = NULL,
+		.maxLen = sizeof(uint16_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// ROCKETS
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_rockets,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_rockets),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_rockets,
+		.pValue = NULL,
+		.maxLen = 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// BG LED Bottom left
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_led_bg_bottom_left,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_led_bg_bottom_left),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_led_bg_bottom_left,
+		.pValue = NULL,
+		.maxLen = 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// BG LED Bottom right
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_led_bg_bottom_right,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_led_bg_bottom_right),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_led_bg_bottom_right,
+		.pValue = NULL,
+		.maxLen = 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// BG LED top right
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_led_bg_top_right,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_led_bg_top_right),
+		.settings = 0,
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_led_bg_top_right,
+		.pValue = NULL,
+		.maxLen = 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// BG LED top left
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_led_bg_top_left,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_led_bg_top_left),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_led_bg_top_left,
+		.pValue = NULL,
+		.maxLen = 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// Dim bottom module
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_leds_bottom_dim,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_leds_bottom_dim),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_leds_bottom_dim,
+		.pValue = NULL,
+		.pLen = 0,
+		.maxLen = sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// Dim top module
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_leds_top_dim,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_leds_top_dim),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_leds_top_dim,
+		.pValue = NULL,
+		.maxLen = sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
 
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_led_powersafe,
-			NULL,
-			0,
-			sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// flashlight
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_flashlight,
-			sizeof(UUID_char_flashlight),
-			0,
-			ATTS_PERMIT_READ
-		);
+	// led powersafe
 
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_flashlight,
-			NULL,
-			0,
-			sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// ABOVE LEDS
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_leds_above,
-			sizeof(UUID_char_leds_above),
-			0,
-			ATTS_PERMIT_READ
-		);
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_led_powersafe,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_led_powersafe),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_led_powersafe,
+		.pValue = NULL,
+		.maxLen = sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
 
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_leds_above,
-			NULL,
-			0,
-			11 * 3 * sizeof(uint8_t),
-			ATTS_SET_WRITE_CBACK,
-			ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
-				ATTS_PERMIT_WRITE_AUTH);
-
-		// LIGHT_SENSOR
-
-		AttsDynAddAttrConst(
-			pSHdl,
-			attChUuid,
-			UUID_char_light_sensor,
-			sizeof(UUID_char_light_sensor),
-			0,
-			ATTS_PERMIT_READ
-		);
+	// flashlight
 
-		AttsDynAddAttr(
-			pSHdl,
-			UUID_attChar_light_sensor,
-			initLightSensorValue,
-			sizeof(uint8_t),
-			sizeof(uint8_t),
-			ATTS_SET_READ_CBACK,
-			ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
-				ATTS_PERMIT_READ_AUTH);
-
-		APP_TRACE_INFO0("ble-card10: services bound\n");
-	}
-	return pSHdl;
-}
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_flashlight,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_flashlight),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_flashlight,
+		.pValue = NULL,
+		.maxLen = sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// ABOVE LEDS
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_leds_above,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_leds_above),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_leds_above,
+		.pValue = NULL,
+		.maxLen = 11 * 3 * sizeof(uint8_t),
+		.settings = ATTS_SET_WRITE_CBACK,
+		.permissions = (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC |
+				ATTS_PERMIT_WRITE_AUTH)
+	},
+
+	// ABOVE LEDS
+
+	{
+		.pUuid = attChUuid,
+		.pValue = (uint8_t *) UUID_char_light_sensor,
+		.pLen = (uint16_t *) &UUID_char_len,
+		.maxLen = sizeof(UUID_char_light_sensor),
+		.permissions = ATTS_PERMIT_READ
+	},
+	{
+		.pUuid = UUID_attChar_light_sensor,
+		.pValue = initLightSensorValue,
+		.pLen = &initLightSensorLen,
+		.maxLen = sizeof(uint8_t),
+		.settings = ATTS_SET_READ_CBACK,
+		.permissions = (ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
+				ATTS_PERMIT_READ_AUTH)
+	},
+};
+/* clang-format on */
 
+// validating, that the service really get all charateristics
+WSF_CT_ASSERT(
+	((sizeof(card10SvcAttrList) / sizeof(card10SvcAttrList[0])) ==
+	 CARD10_END_HDL - CARD10_START_HDL + 1));
 /*
  * Set the time given in milliseconds since 1.1.1970 as 64 bit integer.
  */
@@ -548,7 +498,7 @@ static uint8_t setTime(uint8_t *pValue)
 	time = __bswap64(timeNet);
 	epic_rtc_set_milliseconds(time);
 
-	APP_TRACE_INFO1("set time to: %d\n", time);
+	APP_TRACE_INFO1("ble-card10: set time to: %d\n", time);
 	return ATT_SUCCESS;
 }
 
@@ -631,21 +581,69 @@ static uint8_t writeCard10CB(
 	case CARD10_LEDS_BOTTOM_DIM_VAL_HDL:
 		ui8 = pValue[0];
 		if (ui8 >= 1 && ui8 <= 8) {
-			epic_leds_dim_bottom(pValue[0]);
-			APP_TRACE_INFO1("dim bottom to: %d\n", pValue[0]);
-			return ATT_SUCCESS;
+			if (operation == ATT_PDU_WRITE_CMD ||
+			    operation == ATT_PDU_SIGNED_WRITE_CMD ||
+			    operation == ATT_PDU_WRITE_REQ ||
+			    operation == ATT_PDU_EXEC_WRITE_REQ) {
+				epic_leds_dim_bottom(pValue[0]);
+				APP_TRACE_INFO1(
+					"ble-card10: dim bottom to: %d\n",
+					pValue[0]
+				);
+				return ATT_SUCCESS;
+			} else if (operation == ATT_PDU_PREP_WRITE_REQ) {
+				APP_TRACE_INFO1(
+					"ble_card10: value for dim bottom would be okay: %d\n",
+					pValue[0]
+				);
+				return ATT_SUCCESS;
+			} else {
+				APP_TRACE_INFO1(
+					"ble-card10: dim bottom with unknown operation: %d\n",
+					operation
+				);
+				return ATT_ERR_INVALID_PDU;
+			}
+		} else {
+			APP_TRACE_INFO1(
+				"ble-card: prep dim bottom invalid value (1-8): %d\n",
+				ui8
+			);
+			return ATT_ERR_RANGE;
 		}
-		APP_TRACE_INFO1("dim bottom invalid value (1-8): %d\n", ui8);
-		return ATT_ERR_RANGE;
 	case CARD10_LEDS_TOP_DIM_VAL_HDL:
 		ui8 = pValue[0];
 		if (ui8 >= 1 && ui8 <= 8) {
-			epic_leds_dim_top(ui8);
-			APP_TRACE_INFO1("dim top to: %d\n", ui8);
-			return ATT_SUCCESS;
+			if (operation == ATT_PDU_WRITE_CMD ||
+			    operation == ATT_PDU_SIGNED_WRITE_CMD ||
+			    operation == ATT_PDU_WRITE_REQ ||
+			    operation == ATT_PDU_EXEC_WRITE_REQ) {
+				epic_leds_dim_top(pValue[0]);
+				APP_TRACE_INFO1(
+					"ble-card10: dim top to: %d\n",
+					pValue[0]
+				);
+				return ATT_SUCCESS;
+			} else if (operation == ATT_PDU_PREP_WRITE_REQ) {
+				APP_TRACE_INFO1(
+					"ble_card10: value for dim top would be okay: %d\n",
+					pValue[0]
+				);
+				return ATT_SUCCESS;
+			} else {
+				APP_TRACE_INFO1(
+					"ble-card10: dim top with unknown operation: %d\n",
+					operation
+				);
+				return ATT_ERR_INVALID_PDU;
+			}
+		} else {
+			APP_TRACE_INFO1(
+				"ble-card: prep dim top invalid value (1-8): %d\n",
+				ui8
+			);
+			return ATT_ERR_RANGE;
 		}
-		APP_TRACE_INFO1("dim top invalid value (1-8): %d\n", ui8);
-		return ATT_ERR_RANGE;
 	// led powersafe
 	case CARD10_LED_POWERSAFE_VAL_HDL:
 		epic_leds_set_powersave(pValue[0]);
@@ -706,12 +704,20 @@ static uint8_t readCard10CB(
 	}
 }
 
+static attsGroup_t svcCard10Group = {
+	.pNext       = NULL,
+	.pAttr       = (attsAttr_t *)card10SvcAttrList,
+	.readCback   = readCard10CB,
+	.writeCback  = writeCard10CB,
+	.startHandle = CARD10_START_HDL,
+	.endHandle   = CARD10_END_HDL,
+};
+
 /*
  * This registers and starts the BLE card10 service.
  */
 
 void bleCard10_init(void)
 {
-	void *pSHdl = addCard10GroupDyn();
-	AttsDynRegister(pSHdl, readCard10CB, writeCard10CB);
+	AttsAddGroup(&svcCard10Group);
 }