diff --git a/test/mesh/mesh_message_test.c b/test/mesh/mesh_message_test.c
index 7e443be5d..0922d90ab 100644
--- a/test/mesh/mesh_message_test.c
+++ b/test/mesh/mesh_message_test.c
@@ -190,16 +190,25 @@ static void test_upper_transport_access_message_handler(mesh_pdu_t * pdu){
     }
 }
 
-static void test_upper_transport_unsegmented_callback_handler(mesh_network_pdu_t * network_pdu){
-    recv_upper_transport_pdu_len = mesh_network_pdu_len(network_pdu);
-    memcpy(recv_upper_transport_pdu_data, mesh_network_pdu_data(network_pdu), recv_upper_transport_pdu_len);
-    mesh_upper_transport_unsegmented_message_processed_by_higher_layer(network_pdu);
-}
-
-static void test_upper_transport_segmented_callback_handler(mesh_transport_pdu_t * transport_pdu){
-    recv_upper_transport_pdu_len = transport_pdu->len;
-    memcpy(recv_upper_transport_pdu_data, transport_pdu->data, recv_upper_transport_pdu_len);
-    mesh_upper_transport_segmented_message_processed_by_higher_layer(transport_pdu);
+static void test_upper_transport_control_message_handler(mesh_pdu_t * pdu){
+    mesh_transport_pdu_t * transport_pdu;
+    mesh_network_pdu_t   * network_pdu;
+    switch(pdu->pdu_type){
+        case MESH_PDU_TYPE_TRANSPORT:
+            transport_pdu = (mesh_transport_pdu_t *) pdu;
+            recv_upper_transport_pdu_len = transport_pdu->len;
+            memcpy(recv_upper_transport_pdu_data, transport_pdu->data, recv_upper_transport_pdu_len);
+            mesh_upper_transport_segmented_message_processed_by_higher_layer(transport_pdu);
+            break;
+        case MESH_PDU_TYPE_NETWORK:
+            network_pdu = (mesh_network_pdu_t *) pdu;
+            recv_upper_transport_pdu_len = mesh_network_pdu_len(network_pdu);
+            memcpy(recv_upper_transport_pdu_data, mesh_network_pdu_data(network_pdu), recv_upper_transport_pdu_len);
+            mesh_upper_transport_unsegmented_message_processed_by_higher_layer(network_pdu);
+            break;
+        default:
+            break;
+    }
 }
 
 TEST_GROUP(MessageTest){
@@ -214,7 +223,7 @@ TEST_GROUP(MessageTest){
         mesh_network_set_proxy_message_handler(&test_proxy_server_callback_handler);
         // register to receive upper transport messages
         mesh_upper_transport_register_access_message_handler(&test_upper_transport_access_message_handler);
-        mesh_upper_transport_register_unsegmented_control_message_handler(&test_upper_transport_unsegmented_callback_handler);
+        mesh_upper_transport_register_control_message_handler(&test_upper_transport_control_message_handler);
         mesh_seq_auth_reset();
         received_network_pdu = NULL;
         recv_upper_transport_pdu_len =0;
diff --git a/test/mesh/mesh_transport.c b/test/mesh/mesh_transport.c
index 3ce92bee4..11fcfbcbd 100644
--- a/test/mesh/mesh_transport.c
+++ b/test/mesh/mesh_transport.c
@@ -141,7 +141,7 @@ static mesh_transport_key_and_virtual_address_iterator_t mesh_transport_key_it;
 
 // upper transport callbacks - in access layer
 static void (*mesh_access_message_handler)(mesh_pdu_t * pdu);
-static void (*mesh_control_unsegmented_handler)(mesh_network_pdu_t * network_pdu);
+static void (*mesh_control_message_handler)(mesh_pdu_t * pdu);
 
 // unsegmented (network) and segmented (transport) control and access messages
 static btstack_linked_list_t upper_transport_incoming;
@@ -150,8 +150,8 @@ static btstack_linked_list_t upper_transport_incoming;
 void mesh_upper_unsegmented_control_message_received(mesh_network_pdu_t * network_pdu){
     uint8_t * lower_transport_pdu     = mesh_network_pdu_data(network_pdu);
     uint8_t  opcode = lower_transport_pdu[0];
-    if (mesh_control_unsegmented_handler){
-        mesh_control_unsegmented_handler(network_pdu);
+    if (mesh_control_message_handler){
+        mesh_control_message_handler((mesh_pdu_t*) network_pdu);
     } else {
         printf("[!] Unhandled Control message with opcode %02x\n", opcode);
         // done
@@ -780,8 +780,9 @@ void mesh_upper_transport_set_primary_element_address(uint16_t unicast_address){
 void mesh_upper_transport_register_access_message_handler(void (*callback)(mesh_pdu_t *pdu)){
     mesh_access_message_handler = callback;
 }
-void mesh_upper_transport_register_unsegmented_control_message_handler(void (*callback)(mesh_network_pdu_t *network_pdu)){
-    mesh_control_unsegmented_handler = callback;
+
+void mesh_upper_transport_register_control_message_handler(void (*callback)(mesh_pdu_t *pdu)){
+    mesh_control_message_handler = callback;
 }
 
 void mesh_upper_transport_set_higher_layer_handler(void (*pdu_handler)( mesh_transport_callback_type_t callback_type, mesh_transport_status_t status, mesh_pdu_t * pdu)){
diff --git a/test/mesh/mesh_transport.h b/test/mesh/mesh_transport.h
index 82c0702dd..777e1441a 100644
--- a/test/mesh/mesh_transport.h
+++ b/test/mesh/mesh_transport.h
@@ -59,7 +59,7 @@ void mesh_application_key_set(uint16_t appkey_index, uint8_t aid, const uint8_t
 
 // Control PDUs
 
-void mesh_upper_transport_register_unsegmented_control_message_handler(void (*callback)(mesh_network_pdu_t *network_pdu));
+void mesh_upper_transport_register_control_message_handler(void (*callback)(mesh_pdu_t * pdu));
 
 uint8_t mesh_upper_transport_setup_segmented_control_pdu(mesh_transport_pdu_t * transport_pdu, uint16_t netkey_index,
 	uint8_t ttl, uint16_t src, uint16_t dest, uint8_t opcode, const uint8_t * control_pdu_data, uint16_t control_pdu_len);