diff --git a/pycardium/modules/modbluetooth_card10.c b/pycardium/modules/modbluetooth_card10.c
index 0cfaa0516acb64b1e87c8cd80e552ba1c4b34724..9916eba602ca0e85bcb1bb39a7be1ed5a88c16f2 100644
--- a/pycardium/modules/modbluetooth_card10.c
+++ b/pycardium/modules/modbluetooth_card10.c
@@ -391,10 +391,6 @@ int mp_bluetooth_gatts_register_service(
 	size_t num_descriptors_total = 0;
 	size_t num_ccds              = 0;
 	for (size_t i = 0; i < num_characteristics; i++) {
-		if (num_descriptors[i]) {
-			// TODO: more specific error
-			raise();
-		}
 		num_descriptors_total += num_descriptors[i];
 		if ((characteristic_flags[i] &
 		     MP_BLUETOOTH_CHARACTERISTIC_FLAG_NOTIFY) ||
@@ -409,7 +405,7 @@ int mp_bluetooth_gatts_register_service(
 		1 + num_characteristics * 2 + num_ccds + num_descriptors_total;
 
 	uint16_t startHandle;
-	uint16_t uuid_len =
+	uint8_t uuid_len =
 		service_uuid->type == MP_BLUETOOTH_UUID_TYPE_16 ? 2 : 16;
 
 	// TODO: handle error
@@ -423,12 +419,13 @@ int mp_bluetooth_gatts_register_service(
 
 	uint16_t currentHandle = startHandle;
 
-	size_t handle_index = 0;
-	for (size_t i = 0; i < num_characteristics; ++i) {
+	size_t descriptor_index = 0;
+	size_t handle_index     = 0;
+
+	for (size_t i = 0; i < num_characteristics; i++) {
 		uint8_t flags                 = characteristic_flags[i];
 		mp_obj_bluetooth_uuid_t *uuid = characteristic_uuids[i];
-		uint8_t uuid_len =
-			uuid->type == MP_BLUETOOTH_UUID_TYPE_16 ? 2 : 16;
+		uuid_len = uuid->type == MP_BLUETOOTH_UUID_TYPE_16 ? 2 : 16;
 
 		currentHandle++;
 		epic_atts_dyn_add_characteristic(
@@ -484,6 +481,33 @@ int mp_bluetooth_gatts_register_service(
 		}
 
 		handle_index++;
+
+		for (size_t j = 0; j < num_descriptors[i]; j++) {
+			flags = descriptor_flags[descriptor_index];
+			mp_obj_bluetooth_uuid_t *uuid =
+				descriptor_uuids[descriptor_index];
+			uuid_len = uuid->type == MP_BLUETOOTH_UUID_TYPE_16 ? 2 :
+									     16;
+
+			epic_ble_atts_dyn_add_descriptor(
+				pSvcHandle,
+				uuid->data,
+				uuid_len,
+				flags,
+				NULL,
+				0,
+				MP_BLUETOOTH_DEFAULT_ATTR_LEN
+			);
+
+			mp_bluetooth_gatts_db_create_entry(
+				GATTS_DB,
+				handles[handle_index],
+				MP_BLUETOOTH_DEFAULT_ATTR_LEN
+			);
+
+			descriptor_index++;
+			handle_index++;
+		}
 	}
 
 	return 0;