diff --git a/interface/src/tfm_sst_api.c b/interface/src/tfm_sst_api.c
index 260dbc2..0da82d0 100644
--- a/interface/src/tfm_sst_api.c
+++ b/interface/src/tfm_sst_api.c
@@ -9,8 +9,11 @@
 
 #include "tfm_ns_lock.h"
 #include "tfm_veneers.h"
+#include "tfm_sst_defs.h"
 
 #define IOVEC_LEN(x) (uint32_t)(sizeof(x)/sizeof(x[0]))
+/* FixMe: Check if PSA framework header would provide similar macro. */
+#define TFM_PSA_HANDLE_IS_VALID(handle)  ((handle) > (psa_handle_t)0)
 
 psa_ps_status_t psa_ps_set(psa_ps_uid_t uid,
                            uint32_t data_length,
@@ -19,6 +22,9 @@
 {
     psa_status_t status;
     psa_ps_status_t err;
+#ifdef TFM_PSA_API
+    psa_handle_t handle;
+#endif
 
     psa_invec in_vec[] = {
         { .base = &uid,   .len = sizeof(uid) },
@@ -30,12 +36,32 @@
         { .base = &err , .len = sizeof(err) }
     };
 
+#ifdef TFM_PSA_API
+    if (p_data == NULL) {
+        return PSA_PS_ERROR_INVALID_ARGUMENT;
+    }
+
+    handle = psa_connect(TFM_SST_SET_SID, TFM_SST_SET_MIN_VER);
+    if (!TFM_PSA_HANDLE_IS_VALID(handle)) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+
+    status = psa_call(handle, in_vec, IOVEC_LEN(in_vec), out_vec,
+                      IOVEC_LEN(out_vec));
+
+    psa_close(handle);
+
+    if (status != PSA_SUCCESS) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+#else
     status = tfm_ns_lock_dispatch((veneer_fn)tfm_tfm_sst_set_req_veneer,
                                   (uint32_t)in_vec,  IOVEC_LEN(in_vec),
                                   (uint32_t)out_vec, IOVEC_LEN(out_vec));
     if (status != PSA_SUCCESS) {
         return PSA_PS_ERROR_OPERATION_FAILED;
     }
+#endif
 
     return err;
 }
@@ -47,6 +73,9 @@
 {
     psa_status_t status;
     psa_ps_status_t err;
+#ifdef TFM_PSA_API
+    psa_handle_t handle;
+#endif
 
     psa_invec in_vec[] = {
         { .base = &uid, .len = sizeof(uid) },
@@ -58,6 +87,25 @@
         { .base = p_data, .len = data_length }
     };
 
+#ifdef TFM_PSA_API
+    if (p_data == NULL) {
+        return PSA_PS_ERROR_INVALID_ARGUMENT;
+    }
+
+    handle = psa_connect(TFM_SST_GET_SID, TFM_SST_GET_MIN_VER);
+    if (!TFM_PSA_HANDLE_IS_VALID(handle)) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+
+    status = psa_call(handle, in_vec, IOVEC_LEN(in_vec), out_vec,
+                      IOVEC_LEN(out_vec));
+
+    psa_close(handle);
+
+    if (status != PSA_SUCCESS) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+#else
     status = tfm_ns_lock_dispatch((veneer_fn)tfm_tfm_sst_get_req_veneer,
                                   (uint32_t)in_vec,  IOVEC_LEN(in_vec),
                                   (uint32_t)out_vec, IOVEC_LEN(out_vec));
@@ -65,6 +113,7 @@
     if (status != PSA_SUCCESS) {
         return PSA_PS_ERROR_OPERATION_FAILED;
     }
+#endif
 
     return err;
 }
@@ -73,6 +122,9 @@
 {
     psa_status_t status;
     psa_ps_status_t err;
+#ifdef TFM_PSA_API
+    psa_handle_t handle;
+#endif
 
     psa_invec in_vec[] = {
         { .base = &uid, .len = sizeof(uid) }
@@ -83,6 +135,21 @@
         { .base = p_info, .len = sizeof(*p_info) }
     };
 
+#ifdef TFM_PSA_API
+    handle = psa_connect(TFM_SST_GET_INFO_SID, TFM_SST_GET_INFO_MIN_VER);
+    if (!TFM_PSA_HANDLE_IS_VALID(handle)) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+
+    status = psa_call(handle, in_vec, IOVEC_LEN(in_vec), out_vec,
+                      IOVEC_LEN(out_vec));
+
+    psa_close(handle);
+
+    if (status != PSA_SUCCESS) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+#else
     status = tfm_ns_lock_dispatch((veneer_fn)tfm_tfm_sst_get_info_req_veneer,
                                   (uint32_t)in_vec,  IOVEC_LEN(in_vec),
                                   (uint32_t)out_vec, IOVEC_LEN(out_vec));
@@ -90,6 +157,7 @@
     if (status != PSA_SUCCESS) {
         return PSA_PS_ERROR_OPERATION_FAILED;
     }
+#endif
 
     return err;
 }
@@ -98,6 +166,9 @@
 {
     psa_status_t status;
     psa_ps_status_t err;
+#ifdef TFM_PSA_API
+    psa_handle_t handle;
+#endif
 
     psa_invec in_vec[] = {
         { .base = &uid, .len = sizeof(uid) }
@@ -107,6 +178,21 @@
         { .base = &err, .len = sizeof(err) }
     };
 
+#ifdef TFM_PSA_API
+    handle = psa_connect(TFM_SST_REMOVE_SID, TFM_SST_REMOVE_MIN_VER);
+    if (!TFM_PSA_HANDLE_IS_VALID(handle)) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+
+    status = psa_call(handle, in_vec, IOVEC_LEN(in_vec), out_vec,
+                      IOVEC_LEN(out_vec));
+
+    psa_close(handle);
+
+    if (status != PSA_SUCCESS) {
+        return PSA_PS_ERROR_OPERATION_FAILED;
+    }
+#else
     status = tfm_ns_lock_dispatch((veneer_fn)tfm_tfm_sst_remove_req_veneer,
                                   (uint32_t)in_vec,  IOVEC_LEN(in_vec),
                                   (uint32_t)out_vec, IOVEC_LEN(out_vec));
@@ -114,6 +200,7 @@
     if (status != PSA_SUCCESS) {
         return PSA_PS_ERROR_OPERATION_FAILED;
     }
+#endif
 
     return err;
 }
@@ -145,6 +232,9 @@
      * uninitialised value in case the secure function fails.
      */
     uint32_t support_flags = 0;
+#ifdef TFM_PSA_API
+    psa_handle_t handle;
+#endif
 
     psa_outvec out_vec[] = {
         { .base = &support_flags, .len = sizeof(support_flags) }
@@ -153,9 +243,20 @@
     /* The PSA API does not return an error, so any error from TF-M is
      * ignored.
      */
+#ifdef TFM_PSA_API
+    handle = psa_connect(TFM_SST_GET_SUPPORT_SID, TFM_SST_GET_SUPPORT_MIN_VER);
+    if (!TFM_PSA_HANDLE_IS_VALID(handle)) {
+        return support_flags;
+    }
+
+    (void)psa_call(handle, NULL, 0, out_vec, IOVEC_LEN(out_vec));
+
+    psa_close(handle);
+#else
     (void)tfm_ns_lock_dispatch((veneer_fn)tfm_tfm_sst_get_support_req_veneer,
                                (uint32_t)NULL,  0,
                                (uint32_t)out_vec, IOVEC_LEN(out_vec));
+#endif
 
     return support_flags;
 }
