diff --git a/epicardium/modules/bsec.c b/epicardium/modules/bsec.c
index 4f66a0fb833f002b39548396ed24b2554add6859..44b96401046673f6489498a559cc62b554155967 100644
--- a/epicardium/modules/bsec.c
+++ b/epicardium/modules/bsec.c
@@ -168,6 +168,26 @@ done:
 	epic_file_close(fd);
 }
 
+static int8_t
+i2c_write(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size)
+{
+	int8_t ret;
+	hwlock_acquire(HWLOCK_I2C);
+	ret = card10_bosch_i2c_write(addr, reg, p_buf, size);
+	hwlock_release(HWLOCK_I2C);
+	return ret;
+}
+
+static int8_t
+i2c_read(uint8_t addr, uint8_t reg, uint8_t *p_buf, uint16_t size)
+{
+	int8_t ret;
+	hwlock_acquire(HWLOCK_I2C);
+	ret = card10_bosch_i2c_read(addr, reg, p_buf, size);
+	hwlock_release(HWLOCK_I2C);
+	return ret;
+}
+
 /*!
  * @brief           Load library config from non-volatile memory
  *
@@ -216,6 +236,11 @@ void ulp_plus_button_press()
 }
 #endif
 
+static void delay(uint32_t msec)
+{
+	vTaskDelay(pdMS_TO_TICKS(msec));
+}
+
 /*!
  * @brief       Main function which configures BSEC library and then reads and processes the data from sensor based
  *              on timer ticks
@@ -233,9 +258,9 @@ void vBSECTask(void *pvParameters)
 	ret = bsec_iot_init(
 		BSEC_SAMPLE_RATE_LP,
 		0.0f,
-		card10_bosch_i2c_write,
-		card10_bosch_i2c_read,
-		card10_bosch_delay,
+		i2c_write,
+		i2c_read,
+		delay,
 		state_load,
 		config_load
 	);
@@ -259,7 +284,7 @@ void vBSECTask(void *pvParameters)
 
 	/* State is saved every 100 samples, which means every 1200 * 3 secs = 60 minutes  */
 	bsec_iot_loop(
-		card10_bosch_delay,
+		delay,
 		get_timestamp_us,
 		output_ready,
 		state_save,