diff --git a/debug-app/app/src/main.cpp b/debug-app/app/src/main.cpp
index 7cf10b0ac03848c00f74f78cbc229050258e32ac..f0eb08a9b80f67e42ff1c697b75754e413350a0e 100644
--- a/debug-app/app/src/main.cpp
+++ b/debug-app/app/src/main.cpp
@@ -56,7 +56,7 @@ int main()
 {
 #if !defined(CONFIG_SOC_POSIX)
 	WifiController wifiController;
-	BleScanner bleScanner;
+	// BleScanner bleScanner;
 #endif
 	DebugHandler debugHanddler;
 	MainHandler mainHandler;
diff --git a/debug-app/drivers/ble-scanner/src/ble-scanner.cpp b/debug-app/drivers/ble-scanner/src/ble-scanner.cpp
index 532870a2e137e5edfb59111e61106775a335c9b4..0131d0fd8a86ffdc273af2065d67ed9cc51e53ee 100644
--- a/debug-app/drivers/ble-scanner/src/ble-scanner.cpp
+++ b/debug-app/drivers/ble-scanner/src/ble-scanner.cpp
@@ -8,8 +8,6 @@
 #include "ble-scanner.h"
 
 LOG_MODULE_REGISTER(BleScanner);
-ZBUS_CHAN_DECLARE(driverRequestChannel, bleScanChannel);
-
 static BleScanner *context;
 
 static struct bt_le_scan_param scan_param = {
@@ -19,8 +17,6 @@ static struct bt_le_scan_param scan_param = {
 		.window     = BT_GAP_SCAN_FAST_WINDOW,
 	};
 
-// ZBUS_LISTENER_DEFINE(bleScanListener, context->DriverRequestListener);
-
 BleScanner::BleScanner(){
     context = this;
     int err = bt_enable(NULL);
@@ -30,10 +26,14 @@ BleScanner::BleScanner(){
 		return;
 	}
 
-	// zbus_chan_add_obs(&driverResponseChannel, &debugDriverListener, K_NO_WAIT);
+	k_work_init(&bleWork, BleInterruptHandler);
+}
 
-	// //TODO: remove when bus communication has fully established
-	// bt_le_scan_start(&scan_param, BleDevicefound);
+void BleScanner::BleInterruptHandler(struct k_work *item){
+	LOG_INF("bt handler");
+	if(context->registeredCallback != NULL){
+		context->registeredCallback(context->currAddr, context->currData, context->currRssi);
+	}
 }
 
 void BleScanner::SetScan(bool enable){
@@ -49,33 +49,27 @@ void BleScanner::RegisterCallback(void (*callback)(std::string, std::vector<uint
 	registeredCallback = callback;
 }
 
+RawBleData_t BleScanner::GetLatestData(){
+	RawBleData_t rawData = {
+		.addrStr = currAddr,
+		.bleData = currData,
+		.rssi = currRssi
+	};
+	return rawData;
+}
+
 void BleScanner::BleDevicefound(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, struct net_buf_simple *ad){
     char addr_str[BT_ADDR_LE_STR_LEN];
 	bt_addr_le_to_str(addr, addr_str, sizeof(addr_str));
 	std::string addrStr(addr_str, sizeof(addr_str));
 	std::vector<uint8_t> dataVec(ad->data, ad->data + ad->len);
 
-	if(context->registeredCallback != NULL){
-		context->registeredCallback(addrStr, dataVec, rssi);
-	}
-	// BleData_t sentMessage = {
-	// 	.address = std::string(addr_str, sizeof(addr_str)),
-	// 	.data = std::vector<uint8_t>(ad->data, ad->data + ad->len)
-	// };
-	// zbus_chan_pub(&bleScanChannel, &sentMessage, K_MSEC(200));
-}
+	context->currAddr = addrStr;
+	context->currData = dataVec;
+	context->currRssi = rssi;
+
+	LOG_INF("bt interrupt");
 
-// void DriverRequestListener(const struct zbus_channel *chan){
-// 	const DriverMessage_t *msg;
-//     if (&driverRequestChannel == chan) {
-// 			msg = (DriverMessage_t *)zbus_chan_const_msg(chan); // Direct message access
-// 			if(msg->number == BLUETOOTH){
-// 				if(msg->value[0]){
-// 					bt_le_scan_start(&scan_param, bleDevicefound);
-// 				}
-// 			}
-// 	}
-//     else{
-//         return;
-//     }
-// }
+	int err = k_work_submit(&context->bleWork);
+	LOG_INF("Work q error %d", err);
+}
\ No newline at end of file