diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index a807a35731e7f16b1603b99bd43dd3fc3b71b468..4557a322a74afc493329cd6dd67388d8371ccc16 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -40,6 +40,7 @@
 #include "rscp/rscp_api.h"
 #include "profiles/gap_api.h"
 #include "cccd.h"
+#include "ess.h"
 
 #include "ble_api.h"
 #include "epicardium.h"
@@ -228,6 +229,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] =
   /* cccd handle          value range               security level */
   {GATT_SC_CH_CCC_HDL,    ATT_CLIENT_CFG_INDICATE,  DM_SEC_LEVEL_NONE},   /* BLE_GATT_SC_CCC_IDX */
   {BATT_LVL_CH_CCC_HDL,   ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},   /* BLE_BATT_LVL_CCC_IDX */
+  {ESS_TEMP_CH_CCC_HDL,   ATT_CLIENT_CFG_NOTIFY,    DM_SEC_LEVEL_NONE},   /* BLE_ESS_TEMP_CCC_IDX */
 };
 
 /**************************************************************************************************
diff --git a/epicardium/ble/cccd.h b/epicardium/ble/cccd.h
index 02574bbdc9d0316eeff03ce3a1c19b1b0f09c94c..9e2907290f0aa0256d969ee7fbb7bdefcadf1ad6 100644
--- a/epicardium/ble/cccd.h
+++ b/epicardium/ble/cccd.h
@@ -4,6 +4,7 @@ enum
 {
   BLE_GATT_SC_CCC_IDX,                    /*! GATT service, service changed characteristic */
   BLE_BATT_LVL_CCC_IDX,                   /*! Battery service, battery level characteristic */
+  BLE_ESS_TEMP_CCC_IDX,                   /*! Environmental sensing service, temperature characteristic */
   BLE_NUM_CCC_IDX
 };
 
diff --git a/epicardium/ble/ess.c b/epicardium/ble/ess.c
index f4f012a45f4ef416f41cec26e1dfd426c8f37f5e..3ceef2af7b530b6cf68577a76f5626b3e3d9f13a 100644
--- a/epicardium/ble/ess.c
+++ b/epicardium/ble/ess.c
@@ -1,8 +1,11 @@
 #include "ess.h"
+#include "cccd.h"
+
 #include "wsf_types.h"
 #include "util/bstream.h"
 #include "wsf_assert.h"
 #include "att_api.h"
+#include "app_api.h"
 
 #include "epicardium.h"
 
@@ -11,21 +14,6 @@
 #include <stdbool.h>
 #include <machine/endian.h>
 
-/*!< \brief Service start handle. */
-#define ESS_START_HDL 0x1000
-/*!< \brief Service end handle. */
-#define ESS_END_HDL (ESS_MAX_HDL - 1)
-
-enum {
-	/*!< \brief environmental sensing services service declaration */
-	ESS_SVC_HDL = ESS_START_HDL,
-	/*!< \brief temperature characteristic */
-	ESS_TEMPERATURE_CH_HDL,
-	ESS_TEMPERATURE_VAL_HDL,
-	/*!< \brief Maximum handle. */
-	ESS_MAX_HDL
-};
-
 /* clang-format off */
 
 /* BLE UUID for ESS service*/
@@ -34,7 +22,7 @@ static const uint16_t UUID_svc_len = sizeof(UUID_svc);
 
 /* BLE UUID for temperature */
 static const uint8_t UUID_char_temperature[] = {
-	ATT_PROP_READ,
+	ATT_PROP_READ | ATT_PROP_NOTIFY,
 	UINT16_TO_BYTES(ESS_TEMPERATURE_VAL_HDL),
 	UINT16_TO_BYTES(ATT_UUID_TEMPERATURE)
 };
@@ -43,6 +31,12 @@ static const uint16_t UUID_char_len = sizeof(UUID_char_temperature);
 
 static uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) };
 static uint16_t initTemperatureLen = sizeof(initTemperatureValue);
+
+/* Battery level client characteristic configuration */
+static uint8_t essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)};
+static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc);
+
+
 /* clang-format on */
 
 /*
@@ -75,6 +69,15 @@ static const attsAttr_t ESSSvcAttrList[] = {
 		.permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
 			       ATTS_PERMIT_READ_AUTH,
 	},
+	/* Characteristic CCC descriptor */
+	{
+		.pUuid       = attCliChCfgUuid,
+		.pValue      = essValTempChCcc,
+		.pLen        = (uint16_t *) &essLenTempChCcc,
+		.maxLen      = sizeof(essValTempChCcc),
+		.settings    = ATTS_SET_CCC,
+		.permissions = (ATTS_PERMIT_READ | ATTS_PERMIT_WRITE) // How about security?
+	},
 };
 
 // validating that the service really has all charateristics
@@ -124,6 +127,13 @@ void bleESS_update(void)
 {
 	uint16_t i16 = 0;
 	AttsSetAttr(ESS_TEMPERATURE_VAL_HDL, sizeof(i16), (uint8_t *)&i16);
+
+	dmConnId_t connId = AppConnIsOpen();
+	if(connId != DM_CONN_ID_NONE) {
+		if(AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) {
+			AttsHandleValueNtf(connId, ESS_TEMPERATURE_VAL_HDL, sizeof(i16), (uint8_t *)&i16);
+		}
+	}
 }
 
 /*
diff --git a/epicardium/ble/ess.h b/epicardium/ble/ess.h
index 24b65c94f94356727e77a2699099df9d06c803be..d52439891ebbd5f9d7790e63e3c38ac678b68032 100644
--- a/epicardium/ble/ess.h
+++ b/epicardium/ble/ess.h
@@ -1,3 +1,20 @@
 #pragma once
 
+/*!< \brief Service start handle. */
+#define ESS_START_HDL 0x1000
+/*!< \brief Service end handle. */
+#define ESS_END_HDL (ESS_MAX_HDL - 1)
+
+enum {
+	/*!< \brief environmental sensing services service declaration */
+	ESS_SVC_HDL = ESS_START_HDL,
+	/*!< \brief temperature characteristic */
+	ESS_TEMPERATURE_CH_HDL,
+	ESS_TEMPERATURE_VAL_HDL,
+	ESS_TEMP_CH_CCC_HDL,                  /*!< Temperature CCCD */
+	/*!< \brief Maximum handle. */
+	ESS_MAX_HDL
+};
+
+
 void bleESS_update();