diff --git a/src/ble/gatt-service/scan_parameters_service_client.c b/src/ble/gatt-service/scan_parameters_service_client.c
index cc63e35b1..aba3f03f4 100644
--- a/src/ble/gatt-service/scan_parameters_service_client.c
+++ b/src/ble/gatt-service/scan_parameters_service_client.c
@@ -57,6 +57,8 @@
 #include "btstack_run_loop.h"
 #include "gap.h"
 
+#include "ble/gatt_service_client.h"
+
 static btstack_packet_callback_registration_t hci_event_callback_registration;
 
 static btstack_linked_list_t clients;
@@ -65,7 +67,8 @@ static uint16_t scan_parameters_service_scan_window = 0;
 static uint16_t scan_parameters_service_scan_interval = 0;
 
 static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
-static void scan_parameters_service_run_for_client(scan_parameters_service_client_t * client);
+static void scan_parameters_service_send_next_query(void * context);
+static btstack_context_callback_registration_t scan_parameters_service_handle_can_send_now;
 
 static uint16_t scan_parameters_service_get_next_cid(void){
     if (scan_parameters_service_cid_counter == 0xffff) {
@@ -76,6 +79,17 @@ static uint16_t scan_parameters_service_get_next_cid(void){
     return scan_parameters_service_cid_counter;
 }
 
+static uint8_t scan_parameters_client_request_send_gatt_query(scan_parameters_service_client_t * client){
+    scan_parameters_service_handle_can_send_now.context = (void *) (uintptr_t)client->cid;
+    uint8_t status = gatt_client_request_to_send_gatt_query(&scan_parameters_service_handle_can_send_now, client->con_handle);
+    if (status != ERROR_CODE_SUCCESS){
+        if (client->state >= SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE){
+            client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_IDLE;
+        }
+    }
+    return status;
+}
+
 static scan_parameters_service_client_t * scan_parameters_service_create_client(hci_con_handle_t con_handle, uint16_t cid){
     scan_parameters_service_client_t * client = btstack_memory_scan_parameters_service_client_get();
     if (!client){
@@ -158,10 +172,16 @@ static void handle_notification_event(uint8_t packet_type, uint16_t channel, uin
     scan_parameters_service_client_t * client = scan_parameters_service_get_client_for_con_handle(gatt_event_notification_get_handle(packet));
     btstack_assert(client != NULL);
     client->scan_interval_window_value_update = true;
-    scan_parameters_service_run_for_client(client);
+    scan_parameters_client_request_send_gatt_query(client);
 }
 
-static void scan_parameters_service_run_for_client(scan_parameters_service_client_t * client){
+static void scan_parameters_service_send_next_query(void * context){
+    uint16_t cid = (uint16_t)(uintptr_t)context;
+    scan_parameters_service_client_t * client = scan_parameters_service_get_client_for_cid(cid);
+    if (client == NULL){
+        return;
+    }
+
     uint8_t att_status;
     gatt_client_service_t service;
 
@@ -254,7 +274,7 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
     scan_parameters_service_client_t * client = NULL;
     gatt_client_service_t service;
     gatt_client_characteristic_t characteristic;
-    uint8_t att_status;
+    uint8_t status;
 
 #ifdef ENABLE_TESTING_SUPPORT
     gatt_client_characteristic_descriptor_t characteristic_descriptor;
@@ -339,12 +359,12 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
             client = scan_parameters_service_get_client_for_con_handle(gatt_event_query_complete_get_handle(packet));
             btstack_assert(client != NULL);
             
-            att_status = gatt_event_query_complete_get_att_status(packet);
+            status = gatt_service_client_att_status_to_error_code(gatt_event_query_complete_get_att_status(packet));
             
             switch (client->state){
                 case SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_SERVICE_RESULT:
-                    if (att_status != ATT_ERROR_SUCCESS){
-                        scan_parameters_service_emit_connection_established(client, att_status);  
+                    if (status != ERROR_CODE_SUCCESS){
+                        scan_parameters_service_emit_connection_established(client, status);
                         scan_parameters_service_finalize_client(client);      
                         return;  
                     }
@@ -359,8 +379,8 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
                     return;
 
                 case SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_CHARACTERISTIC_RESULT:
-                    if (att_status != ATT_ERROR_SUCCESS){
-                        scan_parameters_service_emit_connection_established(client, att_status);  
+                    if (status != ERROR_CODE_SUCCESS){
+                        scan_parameters_service_emit_connection_established(client, status);
                         scan_parameters_service_finalize_client(client);      
                         break;  
                     }
@@ -394,7 +414,7 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
     }
 
     if (client != NULL){
-        scan_parameters_service_run_for_client(client);
+        scan_parameters_client_request_send_gatt_query(client);
     }
 }
 
@@ -433,7 +453,7 @@ void scan_parameters_service_client_set(uint16_t scan_interval, uint16_t scan_wi
     while (btstack_linked_list_iterator_has_next(&it)){
         scan_parameters_service_client_t * client = (scan_parameters_service_client_t*) btstack_linked_list_iterator_next(&it);
         client->scan_interval_window_value_update = true;
-        scan_parameters_service_run_for_client(client);
+        scan_parameters_client_request_send_gatt_query(client);
     }
 }
 
@@ -449,8 +469,7 @@ uint8_t scan_parameters_service_client_enable_notifications(uint16_t scan_parame
     }
 
     client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_CONFIGURE_NOTIFICATIONS;
-    scan_parameters_service_run_for_client(client);
-    return ERROR_CODE_SUCCESS;
+    return scan_parameters_client_request_send_gatt_query(client);
 }
 
 uint8_t scan_parameters_service_client_connect(hci_con_handle_t con_handle, btstack_packet_handler_t packet_handler, uint16_t * scan_parameters_service_cid){
@@ -473,8 +492,7 @@ uint8_t scan_parameters_service_client_connect(hci_con_handle_t con_handle, btst
 
     client->client_handler = packet_handler; 
     client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE;
-    scan_parameters_service_run_for_client(client);
-    return ERROR_CODE_SUCCESS;
+    return scan_parameters_client_request_send_gatt_query(client);
 }
 
 uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_service_cid){
@@ -490,6 +508,7 @@ uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_servi
 void scan_parameters_service_client_init(void){
     hci_event_callback_registration.callback = &handle_hci_event;
     hci_add_event_handler(&hci_event_callback_registration);
+    scan_parameters_service_handle_can_send_now.callback = &scan_parameters_service_send_next_query;
 }
 
 void scan_parameters_service_client_deinit(void){
diff --git a/src/btstack_defines.h b/src/btstack_defines.h
index f84152c94..369908d8a 100644
--- a/src/btstack_defines.h
+++ b/src/btstack_defines.h
@@ -4171,7 +4171,7 @@ typedef uint8_t sm_key_t[16];
  * @format 1H1
  * @param subevent_code
  * @param con_handle
- * @param att_status
+ * @param status
  */
 #define GATTSERVICE_SUBEVENT_SCAN_PARAMETERS_SERVICE_CONNECTED            0x11u