diff --git a/erpc/client/CMakeLists.txt b/erpc/client/CMakeLists.txt
index 53658aa..9472dc0 100644
--- a/erpc/client/CMakeLists.txt
+++ b/erpc/client/CMakeLists.txt
@@ -51,8 +51,7 @@
         ${ERPC_REPO_PATH}/erpc_c/setup/erpc_client_setup.cpp
         ${ERPC_REPO_PATH}/erpc_c/setup/erpc_setup_mbf_dynamic.cpp
         # Generated files
-        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_client_api_client.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_connection_api_client.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_client.cpp
 )
 
 target_include_directories(erpc_client
diff --git a/erpc/client/erpc_client_wrapper.c b/erpc/client/erpc_client_wrapper.c
index 37b5f82..4b23f5f 100644
--- a/erpc/client/erpc_client_wrapper.c
+++ b/erpc/client/erpc_client_wrapper.c
@@ -7,7 +7,7 @@
 
 #include <stddef.h>
 #include "psa/client.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
 
 psa_status_t psa_call(psa_handle_t handle, int32_t type,
                       const psa_invec *in_vec, size_t in_len,
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api.h b/erpc/generated_files/tfm_erpc.h
similarity index 78%
rename from erpc/generated_files/tfm_erpc_psa_client_api.h
rename to erpc/generated_files/tfm_erpc.h
index 6b6760e..0bff49a 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api.h
+++ b/erpc/generated_files/tfm_erpc.h
@@ -1,19 +1,19 @@
 /*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 /*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
  *
  * AUTOGENERATED - DO NOT EDIT
  */
 
 
-#if !defined(_tfm_erpc_psa_client_api_h_)
-#define _tfm_erpc_psa_client_api_h_
+#if !defined(_tfm_erpc_h_)
+#define _tfm_erpc_h_
 
 #include <stdbool.h>
 #include <stddef.h>
@@ -55,6 +55,8 @@
     kpsa_client_api_psa_framework_version_id = 1,
     kpsa_client_api_psa_version_id = 2,
     kpsa_client_api_erpc_psa_call_id = 3,
+    kpsa_client_api_psa_connect_id = 4,
+    kpsa_client_api_psa_close_id = 5,
 };
 
 #if defined(__cplusplus)
@@ -68,10 +70,14 @@
 uint32_t psa_version(uint32_t sid);
 
 psa_status_t erpc_psa_call(psa_handle_t handle, int32_t t, const list_binary_1_t * erpc_in_vec, list_binary_1_t * erpc_out_vec);
+
+psa_handle_t psa_connect(uint32_t sid, uint32_t ver);
+
+void psa_close(psa_handle_t handle);
 //@}
 
 #if defined(__cplusplus)
 }
 #endif
 
-#endif // _tfm_erpc_psa_client_api_h_
+#endif // _tfm_erpc_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_client.cpp b/erpc/generated_files/tfm_erpc_client.cpp
similarity index 71%
rename from erpc/generated_files/tfm_erpc_psa_client_api_client.cpp
rename to erpc/generated_files/tfm_erpc_client.cpp
index fa7dee9..11c6fae 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_client.cpp
+++ b/erpc/generated_files/tfm_erpc_client.cpp
@@ -1,12 +1,12 @@
 /*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 /*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
  *
  * AUTOGENERATED - DO NOT EDIT
  */
@@ -19,9 +19,7 @@
 #include "erpc_codec.h"
 extern "C"
 {
-#include "tfm_erpc_psa_client_api.h"
-// import callbacks declaration from other groups
-#include "tfm_erpc_psa_connection_api.h"
+#include "tfm_erpc.h"
 }
 
 #if 10901 != ERPC_VERSION_NUMBER
@@ -298,3 +296,123 @@
 
     return result;
 }
+
+// psa_client_api interface psa_connect function client shim.
+psa_handle_t psa_connect(uint32_t sid, uint32_t ver)
+{
+    erpc_status_t err = kErpcStatus_Success;
+
+    psa_handle_t result;
+
+#if ERPC_PRE_POST_ACTION
+    pre_post_action_cb preCB = g_client->getPreCB();
+    if (preCB)
+    {
+        preCB();
+    }
+#endif
+
+    // Get a new request.
+    RequestContext request = g_client->createRequest(false);
+
+    // Encode the request.
+    Codec * codec = request.getCodec();
+
+    if (codec == NULL)
+    {
+        err = kErpcStatus_MemoryError;
+    }
+    else
+    {
+        codec->startWriteMessage(kInvocationMessage, kpsa_client_api_service_id, kpsa_client_api_psa_connect_id, request.getSequence());
+
+        codec->write(sid);
+
+        codec->write(ver);
+
+        // Send message to server
+        // Codec status is checked inside this function.
+        g_client->performRequest(request);
+
+        codec->read(&result);
+
+        err = codec->getStatus();
+    }
+
+    // Dispose of the request.
+    g_client->releaseRequest(request);
+
+    // Invoke error handler callback function
+    g_client->callErrorHandler(err, kpsa_client_api_psa_connect_id);
+
+#if ERPC_PRE_POST_ACTION
+    pre_post_action_cb postCB = g_client->getPostCB();
+    if (postCB)
+    {
+        postCB();
+    }
+#endif
+
+
+    if (err != kErpcStatus_Success)
+    {
+        result = -1;
+    }
+
+    return result;
+}
+
+// psa_client_api interface psa_close function client shim.
+void psa_close(psa_handle_t handle)
+{
+    erpc_status_t err = kErpcStatus_Success;
+
+
+#if ERPC_PRE_POST_ACTION
+    pre_post_action_cb preCB = g_client->getPreCB();
+    if (preCB)
+    {
+        preCB();
+    }
+#endif
+
+    // Get a new request.
+    RequestContext request = g_client->createRequest(false);
+
+    // Encode the request.
+    Codec * codec = request.getCodec();
+
+    if (codec == NULL)
+    {
+        err = kErpcStatus_MemoryError;
+    }
+    else
+    {
+        codec->startWriteMessage(kInvocationMessage, kpsa_client_api_service_id, kpsa_client_api_psa_close_id, request.getSequence());
+
+        codec->write(handle);
+
+        // Send message to server
+        // Codec status is checked inside this function.
+        g_client->performRequest(request);
+
+        err = codec->getStatus();
+    }
+
+    // Dispose of the request.
+    g_client->releaseRequest(request);
+
+    // Invoke error handler callback function
+    g_client->callErrorHandler(err, kpsa_client_api_psa_close_id);
+
+#if ERPC_PRE_POST_ACTION
+    pre_post_action_cb postCB = g_client->getPostCB();
+    if (postCB)
+    {
+        postCB();
+    }
+#endif
+
+
+    return;
+}
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api.h b/erpc/generated_files/tfm_erpc_psa_connection_api.h
deleted file mode 100644
index 4155916..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#if !defined(_tfm_erpc_psa_connection_api_h_)
-#define _tfm_erpc_psa_connection_api_h_
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include "erpc_version.h"
-#include "psa/client.h"
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-#if !defined(ERPC_TYPE_DEFINITIONS)
-#define ERPC_TYPE_DEFINITIONS
-
-// Aliases data types declarations
-typedef struct list_binary_1_t list_binary_1_t;
-typedef struct binary_t binary_t;
-
-// Structures/unions data types declarations
-struct list_binary_1_t
-{
-    binary_t * elements;
-    uint32_t elementsCount;
-};
-
-struct binary_t
-{
-    uint8_t * data;
-    uint32_t dataLength;
-};
-
-
-#endif // ERPC_TYPE_DEFINITIONS
-
-/*! @brief psa_connection_api identifiers */
-enum _psa_connection_api_ids
-{
-    kpsa_connection_api_service_id = 2,
-    kpsa_connection_api_psa_connect_id = 1,
-    kpsa_connection_api_psa_close_id = 2,
-};
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-//! @name psa_connection_api
-//@{
-psa_handle_t psa_connect(uint32_t sid, uint32_t ver);
-
-void psa_close(psa_handle_t handle);
-//@}
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif // _tfm_erpc_psa_connection_api_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp b/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp
deleted file mode 100644
index ab24967..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_client.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#include "erpc_client_manager.h"
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-#include "erpc_port.h"
-#endif
-#include "erpc_codec.h"
-extern "C"
-{
-#include "tfm_erpc_psa_connection_api.h"
-// import callbacks declaration from other groups
-#include "tfm_erpc_psa_client_api.h"
-}
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-using namespace erpc;
-using namespace std;
-
-extern ClientManager *g_client;
-
-
-// psa_connection_api interface psa_connect function client shim.
-psa_handle_t psa_connect(uint32_t sid, uint32_t ver)
-{
-    erpc_status_t err = kErpcStatus_Success;
-
-    psa_handle_t result;
-
-#if ERPC_PRE_POST_ACTION
-    pre_post_action_cb preCB = g_client->getPreCB();
-    if (preCB)
-    {
-        preCB();
-    }
-#endif
-
-    // Get a new request.
-    RequestContext request = g_client->createRequest(false);
-
-    // Encode the request.
-    Codec * codec = request.getCodec();
-
-    if (codec == NULL)
-    {
-        err = kErpcStatus_MemoryError;
-    }
-    else
-    {
-        codec->startWriteMessage(kInvocationMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_connect_id, request.getSequence());
-
-        codec->write(sid);
-
-        codec->write(ver);
-
-        // Send message to server
-        // Codec status is checked inside this function.
-        g_client->performRequest(request);
-
-        codec->read(&result);
-
-        err = codec->getStatus();
-    }
-
-    // Dispose of the request.
-    g_client->releaseRequest(request);
-
-    // Invoke error handler callback function
-    g_client->callErrorHandler(err, kpsa_connection_api_psa_connect_id);
-
-#if ERPC_PRE_POST_ACTION
-    pre_post_action_cb postCB = g_client->getPostCB();
-    if (postCB)
-    {
-        postCB();
-    }
-#endif
-
-
-    if (err != kErpcStatus_Success)
-    {
-        result = -1;
-    }
-
-    return result;
-}
-
-// psa_connection_api interface psa_close function client shim.
-void psa_close(psa_handle_t handle)
-{
-    erpc_status_t err = kErpcStatus_Success;
-
-
-#if ERPC_PRE_POST_ACTION
-    pre_post_action_cb preCB = g_client->getPreCB();
-    if (preCB)
-    {
-        preCB();
-    }
-#endif
-
-    // Get a new request.
-    RequestContext request = g_client->createRequest(false);
-
-    // Encode the request.
-    Codec * codec = request.getCodec();
-
-    if (codec == NULL)
-    {
-        err = kErpcStatus_MemoryError;
-    }
-    else
-    {
-        codec->startWriteMessage(kInvocationMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_close_id, request.getSequence());
-
-        codec->write(handle);
-
-        // Send message to server
-        // Codec status is checked inside this function.
-        g_client->performRequest(request);
-
-        err = codec->getStatus();
-    }
-
-    // Dispose of the request.
-    g_client->releaseRequest(request);
-
-    // Invoke error handler callback function
-    g_client->callErrorHandler(err, kpsa_connection_api_psa_close_id);
-
-#if ERPC_PRE_POST_ACTION
-    pre_post_action_cb postCB = g_client->getPostCB();
-    if (postCB)
-    {
-        postCB();
-    }
-#endif
-
-
-    return;
-}
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp b/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp
deleted file mode 100644
index 8e51d8d..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_server.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#include "tfm_erpc_psa_connection_api_server.h"
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-#include <new>
-#include "erpc_port.h"
-#endif
-#include "erpc_manually_constructed.h"
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-using namespace erpc;
-using namespace std;
-
-#if ERPC_NESTED_CALLS_DETECTION
-extern bool nestingDetection;
-#endif
-
-ERPC_MANUALLY_CONSTRUCTED_STATIC(psa_connection_api_service, s_psa_connection_api_service);
-
-
-
-// Call the correct server shim based on method unique ID.
-erpc_status_t psa_connection_api_service::handleInvocation(uint32_t methodId, uint32_t sequence, Codec * codec, MessageBufferFactory *messageFactory)
-{
-    erpc_status_t erpcStatus;
-    switch (methodId)
-    {
-        case kpsa_connection_api_psa_connect_id:
-        {
-            erpcStatus = psa_connect_shim(codec, messageFactory, sequence);
-            break;
-        }
-
-        case kpsa_connection_api_psa_close_id:
-        {
-            erpcStatus = psa_close_shim(codec, messageFactory, sequence);
-            break;
-        }
-
-        default:
-        {
-            erpcStatus = kErpcStatus_InvalidArgument;
-            break;
-        }
-    }
-
-    return erpcStatus;
-}
-
-// Server shim for psa_connect of psa_connection_api interface.
-erpc_status_t psa_connection_api_service::psa_connect_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
-{
-    erpc_status_t err = kErpcStatus_Success;
-
-    uint32_t sid;
-    uint32_t ver;
-    psa_handle_t result;
-
-    // startReadMessage() was already called before this shim was invoked.
-
-    codec->read(&sid);
-
-    codec->read(&ver);
-
-    err = codec->getStatus();
-    if (err == kErpcStatus_Success)
-    {
-        // Invoke the actual served function.
-#if ERPC_NESTED_CALLS_DETECTION
-        nestingDetection = true;
-#endif
-        result = psa_connect(sid, ver);
-#if ERPC_NESTED_CALLS_DETECTION
-        nestingDetection = false;
-#endif
-
-        // preparing MessageBuffer for serializing data
-        err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
-    }
-
-    if (err == kErpcStatus_Success)
-    {
-        // preparing codec for serializing data
-        codec->reset();
-
-        // Build response message.
-        codec->startWriteMessage(kReplyMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_connect_id, sequence);
-
-        codec->write(result);
-
-        err = codec->getStatus();
-    }
-
-    return err;
-}
-
-// Server shim for psa_close of psa_connection_api interface.
-erpc_status_t psa_connection_api_service::psa_close_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
-{
-    erpc_status_t err = kErpcStatus_Success;
-
-    psa_handle_t handle;
-
-    // startReadMessage() was already called before this shim was invoked.
-
-    codec->read(&handle);
-
-    err = codec->getStatus();
-    if (err == kErpcStatus_Success)
-    {
-        // Invoke the actual served function.
-#if ERPC_NESTED_CALLS_DETECTION
-        nestingDetection = true;
-#endif
-        psa_close(handle);
-#if ERPC_NESTED_CALLS_DETECTION
-        nestingDetection = false;
-#endif
-
-        // preparing MessageBuffer for serializing data
-        err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
-    }
-
-    if (err == kErpcStatus_Success)
-    {
-        // preparing codec for serializing data
-        codec->reset();
-
-        // Build response message.
-        codec->startWriteMessage(kReplyMessage, kpsa_connection_api_service_id, kpsa_connection_api_psa_close_id, sequence);
-
-        err = codec->getStatus();
-    }
-
-    return err;
-}
-
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-erpc_service_t create_psa_connection_api_service()
-{
-    return new (nothrow) psa_connection_api_service();
-}
-
-void destroy_psa_connection_api_service(erpc_service_t service)
-{
-    if (service)
-    {
-        delete (psa_connection_api_service *)service;
-    }
-}
-#elif ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_STATIC
-erpc_service_t create_psa_connection_api_service()
-{
-    s_psa_connection_api_service.construct();
-    return s_psa_connection_api_service.get();
-}
-
-void destroy_psa_connection_api_service()
-{
-    s_psa_connection_api_service.destroy();
-}
-#else
-#warning "Unknown eRPC allocation policy!"
-#endif
diff --git a/erpc/generated_files/tfm_erpc_psa_connection_api_server.h b/erpc/generated_files/tfm_erpc_psa_connection_api_server.h
deleted file mode 100644
index 01dbc1f..0000000
--- a/erpc/generated_files/tfm_erpc_psa_connection_api_server.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
- *
- * AUTOGENERATED - DO NOT EDIT
- */
-
-
-#if !defined(_tfm_erpc_psa_connection_api_server_h_)
-#define _tfm_erpc_psa_connection_api_server_h_
-
-#ifdef __cplusplus
-#include "erpc_server.h"
-#include "erpc_codec.h"
-extern "C"
-{
-#include "tfm_erpc_psa_connection_api.h"
-#include <stdint.h>
-#include <stdbool.h>
-}
-
-#if 10901 != ERPC_VERSION_NUMBER
-#error "The generated shim code version is different to the rest of eRPC code."
-#endif
-
-
-/*!
- * @brief Service subclass for psa_connection_api.
- */
-class psa_connection_api_service : public erpc::Service
-{
-public:
-    psa_connection_api_service() : Service(kpsa_connection_api_service_id) {}
-
-    /*! @brief Call the correct server shim based on method unique ID. */
-    virtual erpc_status_t handleInvocation(uint32_t methodId, uint32_t sequence, erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory);
-
-private:
-    /*! @brief Server shim for psa_connect of psa_connection_api interface. */
-    erpc_status_t psa_connect_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
-
-    /*! @brief Server shim for psa_close of psa_connection_api interface. */
-    erpc_status_t psa_close_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
-};
-
-extern "C" {
-#else
-#include "tfm_erpc_psa_connection_api.h"
-#endif // __cplusplus
-
-typedef void * erpc_service_t;
-
-erpc_service_t create_psa_connection_api_service(void);
-
-#if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
-void destroy_psa_connection_api_service(erpc_service_t service);
-#elif ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_STATIC
-void destroy_psa_connection_api_service(void);
-#else
-#warning "Unknown eRPC allocation policy!"
-#endif
-
-#ifdef __cplusplus
-}
-#endif // __cplusplus
-
-#endif // _tfm_erpc_psa_connection_api_server_h_
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_server.cpp b/erpc/generated_files/tfm_erpc_server.cpp
similarity index 75%
rename from erpc/generated_files/tfm_erpc_psa_client_api_server.cpp
rename to erpc/generated_files/tfm_erpc_server.cpp
index 82fb722..d2ec345 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_server.cpp
+++ b/erpc/generated_files/tfm_erpc_server.cpp
@@ -1,18 +1,18 @@
 /*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 /*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
  *
  * AUTOGENERATED - DO NOT EDIT
  */
 
 
-#include "tfm_erpc_psa_client_api_server.h"
+#include "tfm_erpc_server.h"
 #if ERPC_ALLOCATION_POLICY == ERPC_ALLOCATION_POLICY_DYNAMIC
 #include <new>
 #include "erpc_port.h"
@@ -126,7 +126,10 @@
 // Free space allocated inside struct binary_t function implementation
 static void free_binary_t_struct(binary_t * data)
 {
-    erpc_free(data->data);
+    if (data->data)
+    {
+        erpc_free(data->data);
+    }
 }
 
 // Free space allocated inside struct list_binary_1_t function implementation
@@ -137,7 +140,10 @@
         free_binary_t_struct(&data->elements[listCount]);
     }
 
-    erpc_free(data->elements);
+    if (data->elements)
+    {
+        erpc_free(data->elements);
+    }
 }
 
 
@@ -166,6 +172,18 @@
             break;
         }
 
+        case kpsa_client_api_psa_connect_id:
+        {
+            erpcStatus = psa_connect_shim(codec, messageFactory, sequence);
+            break;
+        }
+
+        case kpsa_client_api_psa_close_id:
+        {
+            erpcStatus = psa_close_shim(codec, messageFactory, sequence);
+            break;
+        }
+
         default:
         {
             erpcStatus = kErpcStatus_InvalidArgument;
@@ -327,13 +345,107 @@
     {
         free_list_binary_1_t_struct(erpc_in_vec);
     }
-    erpc_free(erpc_in_vec);
+    if (erpc_in_vec)
+    {
+        erpc_free(erpc_in_vec);
+    }
 
     if (erpc_out_vec)
     {
         free_list_binary_1_t_struct(erpc_out_vec);
     }
-    erpc_free(erpc_out_vec);
+    if (erpc_out_vec)
+    {
+        erpc_free(erpc_out_vec);
+    }
+
+    return err;
+}
+
+// Server shim for psa_connect of psa_client_api interface.
+erpc_status_t psa_client_api_service::psa_connect_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
+{
+    erpc_status_t err = kErpcStatus_Success;
+
+    uint32_t sid;
+    uint32_t ver;
+    psa_handle_t result;
+
+    // startReadMessage() was already called before this shim was invoked.
+
+    codec->read(&sid);
+
+    codec->read(&ver);
+
+    err = codec->getStatus();
+    if (err == kErpcStatus_Success)
+    {
+        // Invoke the actual served function.
+#if ERPC_NESTED_CALLS_DETECTION
+        nestingDetection = true;
+#endif
+        result = psa_connect(sid, ver);
+#if ERPC_NESTED_CALLS_DETECTION
+        nestingDetection = false;
+#endif
+
+        // preparing MessageBuffer for serializing data
+        err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
+    }
+
+    if (err == kErpcStatus_Success)
+    {
+        // preparing codec for serializing data
+        codec->reset();
+
+        // Build response message.
+        codec->startWriteMessage(kReplyMessage, kpsa_client_api_service_id, kpsa_client_api_psa_connect_id, sequence);
+
+        codec->write(result);
+
+        err = codec->getStatus();
+    }
+
+    return err;
+}
+
+// Server shim for psa_close of psa_client_api interface.
+erpc_status_t psa_client_api_service::psa_close_shim(Codec * codec, MessageBufferFactory *messageFactory, uint32_t sequence)
+{
+    erpc_status_t err = kErpcStatus_Success;
+
+    psa_handle_t handle;
+
+    // startReadMessage() was already called before this shim was invoked.
+
+    codec->read(&handle);
+
+    err = codec->getStatus();
+    if (err == kErpcStatus_Success)
+    {
+        // Invoke the actual served function.
+#if ERPC_NESTED_CALLS_DETECTION
+        nestingDetection = true;
+#endif
+        psa_close(handle);
+#if ERPC_NESTED_CALLS_DETECTION
+        nestingDetection = false;
+#endif
+
+        // preparing MessageBuffer for serializing data
+        err = messageFactory->prepareServerBufferForSend(codec->getBuffer());
+    }
+
+    if (err == kErpcStatus_Success)
+    {
+        // preparing codec for serializing data
+        codec->reset();
+
+        // Build response message.
+        codec->startWriteMessage(kReplyMessage, kpsa_client_api_service_id, kpsa_client_api_psa_close_id, sequence);
+
+        err = codec->getStatus();
+    }
 
     return err;
 }
diff --git a/erpc/generated_files/tfm_erpc_psa_client_api_server.h b/erpc/generated_files/tfm_erpc_server.h
similarity index 74%
rename from erpc/generated_files/tfm_erpc_psa_client_api_server.h
rename to erpc/generated_files/tfm_erpc_server.h
index 3146840..b8162a4 100644
--- a/erpc/generated_files/tfm_erpc_psa_client_api_server.h
+++ b/erpc/generated_files/tfm_erpc_server.h
@@ -1,26 +1,26 @@
 /*
- * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
  */
 
 /*
- * Generated by erpcgen 1.9.1 on Fri Dec 16 14:51:11 2022.
+ * Generated by erpcgen 1.9.1 on Fri Jul 21 17:28:31 2023.
  *
  * AUTOGENERATED - DO NOT EDIT
  */
 
 
-#if !defined(_tfm_erpc_psa_client_api_server_h_)
-#define _tfm_erpc_psa_client_api_server_h_
+#if !defined(_tfm_erpc_server_h_)
+#define _tfm_erpc_server_h_
 
 #ifdef __cplusplus
 #include "erpc_server.h"
 #include "erpc_codec.h"
 extern "C"
 {
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
 #include <stdint.h>
 #include <stdbool.h>
 }
@@ -50,11 +50,17 @@
 
     /*! @brief Server shim for erpc_psa_call of psa_client_api interface. */
     erpc_status_t erpc_psa_call_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
+
+    /*! @brief Server shim for psa_connect of psa_client_api interface. */
+    erpc_status_t psa_connect_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
+
+    /*! @brief Server shim for psa_close of psa_client_api interface. */
+    erpc_status_t psa_close_shim(erpc::Codec * codec, erpc::MessageBufferFactory *messageFactory, uint32_t sequence);
 };
 
 extern "C" {
 #else
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
 #endif // __cplusplus
 
 typedef void * erpc_service_t;
@@ -73,4 +79,4 @@
 }
 #endif // __cplusplus
 
-#endif // _tfm_erpc_psa_client_api_server_h_
+#endif // _tfm_erpc_server_h_
diff --git a/erpc/host_example/main.c b/erpc/host_example/main.c
index 1545525..c2d1357 100644
--- a/erpc/host_example/main.c
+++ b/erpc/host_example/main.c
@@ -10,7 +10,7 @@
 #include <string.h>
 #include "erpc_port.h"
 #include "erpc_client_start.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
 #include "tfm_crypto_defs.h"
 #include "psa/client.h"
 #include "psa/crypto.h"
diff --git a/erpc/server/CMakeLists.txt b/erpc/server/CMakeLists.txt
index 0562f7f..8e43295 100644
--- a/erpc/server/CMakeLists.txt
+++ b/erpc/server/CMakeLists.txt
@@ -37,8 +37,7 @@
         ${ERPC_REPO_PATH}/erpc_c/setup/erpc_setup_mbf_dynamic.cpp
         ${ERPC_REPO_PATH}/erpc_c/setup/erpc_server_setup.cpp
         # Generated files
-        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_client_api_server.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_psa_connection_api_server.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/../generated_files/tfm_erpc_server.cpp
 )
 
 target_include_directories(erpc_server
diff --git a/erpc/server/erpc_server_start.c b/erpc/server/erpc_server_start.c
index 4d27876..ca3b6e9 100644
--- a/erpc/server/erpc_server_start.c
+++ b/erpc/server/erpc_server_start.c
@@ -9,14 +9,12 @@
 
 #include "erpc_mbf_setup.h"
 #include "erpc_server_setup.h"
-#include "tfm_erpc_psa_client_api_server.h"
-#include "tfm_erpc_psa_connection_api_server.h"
+#include "tfm_erpc_server.h"
 
 void erpc_server_start(erpc_transport_t transport)
 {
     erpc_server_init(transport, erpc_mbf_dynamic_init());
     erpc_add_service_to_server(create_psa_client_api_service());
-    erpc_add_service_to_server(create_psa_connection_api_service());
 
     erpc_server_run();
 
diff --git a/erpc/server/erpc_server_wrapper.c b/erpc/server/erpc_server_wrapper.c
index 8215c9a..b27a1da 100644
--- a/erpc/server/erpc_server_wrapper.c
+++ b/erpc/server/erpc_server_wrapper.c
@@ -7,7 +7,7 @@
 
 #include <stddef.h>
 #include "psa/client.h"
-#include "tfm_erpc_psa_client_api.h"
+#include "tfm_erpc.h"
 
 psa_status_t erpc_psa_call(psa_handle_t handle, int32_t t,
                            const list_binary_1_t *erpc_in_vec,
diff --git a/erpc/tfm.erpc b/erpc/tfm.erpc
index 20a7d1e..ace775e 100644
--- a/erpc/tfm.erpc
+++ b/erpc/tfm.erpc
@@ -12,13 +12,10 @@
 @external type psa_handle_t = int32
 @external type psa_status_t = int32
 
-@group(psa_client_api) interface psa_client_api {
+interface psa_client_api {
     psa_framework_version() -> uint32
     psa_version(uint32 sid) -> uint32
     erpc_psa_call(psa_handle_t handle, int32 t, list<binary> erpc_in_vec, inout list<binary> erpc_out_vec) -> psa_status_t
-}
-
-@group(psa_connection_api) interface psa_connection_api {
     psa_connect(uint32 sid, uint32 ver) -> psa_handle_t
     psa_close(psa_handle_t handle) -> void
 }
