diff --git a/interface/src/tfm_id_mngr_dummy.c b/interface/src/tfm_id_mngr_dummy.c
deleted file mode 100644
index 69fb4b7..0000000
--- a/interface/src/tfm_id_mngr_dummy.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2017-2018, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-/* FIXME: this TFM ID manager is only a stub implementation. It is system
- * integrators responsibility to define a way of identifying the app id and
- * based on their non secure side of the threat model. The secure side only
- * checks if this is an ID belonging to NS side entities. The secure side
- * doesn't make any attempt to challenge the app id value, this is left for NS
- * side privileged code to implement.
- */
-
-#include "tfm_id_mngr.h"
-
-#include <string.h>
-#include "cmsis_os2.h"
-
-#define INVALID_CLIENT_ID  0
-
-/* FIXME: following two functions are meant to be internally
- * available to RTX. The header file containing prototype of
- * these functions has complex header inclusion which leads
- * to compiler specific paths in CMSIS, which currently doesn't have
- * clang variant. To simplify this, following functions are directly
- * declared here (as opposed to header inclusion). After clear
- * separation of S and NS builds this will require to be revisited
- */
-extern osThreadId_t svcRtxThreadGetId(void);
-extern const char *svcRtxThreadGetName(osThreadId_t thread_id);
-
-/* Translation table pair between OS threads and SST client IDs */
-struct thread_sst_clientid_pair {
-    const char* t_name;     /*!< Task/Thread name */
-    int32_t     client_id;  /*!< Client ID used in assets definition */
-};
-
-static struct thread_sst_clientid_pair sst_ns_policy_table[] =
-{
-    {"Thread_A", -9},
-    {"Thread_B", -10},
-    {"Thread_C", -11},
-    {"Thread_D", -12},
-};
-
-static const char* get_active_task_name(void)
-{
-    const char* thread_name;
-
-    thread_name = svcRtxThreadGetName(svcRtxThreadGetId());
-
-    return thread_name;
-}
-
-int32_t tfm_sst_get_cur_id(void)
-{
-    uint32_t i;
-    static uint32_t sst_table_size = (sizeof(sst_ns_policy_table) /
-                                      sizeof(sst_ns_policy_table[0]));
-    const char* p_thread_name;
-
-    p_thread_name = get_active_task_name();
-
-    for (i = 0; i < sst_table_size; i++) {
-        if (strcmp(sst_ns_policy_table[i].t_name, p_thread_name) == 0) {
-                return sst_ns_policy_table[i].client_id;
-        }
-    }
-
-    return INVALID_CLIENT_ID;
-}
diff --git a/interface/src/tfm_sst_api.c b/interface/src/tfm_sst_api.c
index 8a3fec8..317032c 100644
--- a/interface/src/tfm_sst_api.c
+++ b/interface/src/tfm_sst_api.c
@@ -8,25 +8,25 @@
 #include "tfm_sst_veneers.h"
 #include "tfm_sst_defs.h"
 #include "tfm_ns_lock.h"
-#include "tfm_id_mngr.h"
+
+/* This define uses the TF-M invalid client ID to specify a direct client read,
+ * as that it can not be used to identify a client.
+ */
+#define SST_DIRECT_CLIENT_READ  TFM_INVALID_CLIENT_ID
 
 enum psa_sst_err_t psa_sst_create(uint32_t asset_uuid, const uint8_t *token,
                                   uint32_t token_size)
 {
     struct tfm_sst_token_t s_token;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_create,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                0);
+                                0, 0);
 }
 
 enum psa_sst_err_t psa_sst_get_info(uint32_t asset_uuid,
@@ -35,19 +35,16 @@
                                     struct psa_sst_asset_info_t *info)
 {
     struct tfm_sst_token_t s_token;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_info,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                (uint32_t)info);
+                                (uint32_t)info,
+                                0);
 }
 
 enum psa_sst_err_t psa_sst_get_attributes(uint32_t asset_uuid,
@@ -56,19 +53,16 @@
                                           struct psa_sst_asset_attrs_t *attrs)
 {
     struct tfm_sst_token_t s_token;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_attributes,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                (uint32_t)attrs);
+                                (uint32_t)attrs,
+                                0);
 }
 
 enum psa_sst_err_t psa_sst_set_attributes(uint32_t asset_uuid,
@@ -77,19 +71,16 @@
                                       const struct psa_sst_asset_attrs_t *attrs)
 {
     struct tfm_sst_token_t s_token;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_set_attributes,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                (uint32_t)attrs);
+                                (uint32_t)attrs,
+                                0);
 }
 
 enum psa_sst_err_t psa_sst_read(uint32_t asset_uuid,
@@ -101,7 +92,6 @@
 {
     struct tfm_sst_token_t s_token;
     struct tfm_sst_buf_t   s_data;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
@@ -112,10 +102,8 @@
     s_data.offset = offset;
     s_data.data = data;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_read,
-                                client_id,
+                                SST_DIRECT_CLIENT_READ,
                                 asset_uuid,
                                 (uint32_t)&s_token,
                                 (uint32_t)&s_data);
@@ -130,7 +118,6 @@
 {
     struct tfm_sst_token_t s_token;
     struct tfm_sst_buf_t   s_data;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
@@ -141,13 +128,11 @@
     s_data.offset = offset;
     s_data.data = (uint8_t *)data;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_write,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                (uint32_t)&s_data);
+                                (uint32_t)&s_data,
+                                0);
 }
 
 enum psa_sst_err_t psa_sst_delete(uint32_t asset_uuid,
@@ -155,17 +140,13 @@
                                   uint32_t token_size)
 {
     struct tfm_sst_token_t s_token;
-    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    client_id = tfm_sst_get_cur_id();
-
     return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_delete,
-                                client_id,
                                 asset_uuid,
                                 (uint32_t)&s_token,
-                                0);
+                                0, 0);
 }
