diff --git a/docs/partitions/dice_protection_environment.rst b/docs/partitions/dice_protection_environment.rst
index 12f4fe2..8f24291 100644
--- a/docs/partitions/dice_protection_environment.rst
+++ b/docs/partitions/dice_protection_environment.rst
@@ -78,8 +78,8 @@
 The DPE commands themselves are CBOR-encoded objects that the DPE decode layer
 decodes into calls to one of the following supported DICE functions.
 
-DeriveChild
------------
+DeriveContext
+-------------
 
 Adds a component context to the layer, consisting of:
 
@@ -120,7 +120,7 @@
 
 - Adds label (if supplied) to list of measurements.
 
-- Finalizes the layer (as for DeriveChild above).
+- Finalizes the layer (as for DeriveContext above).
 
 - Returns the certificate chain (collection of individual certificates) as a
   CBOR array with format [+COSE_Sign1, COSE_Key]. The (pre-provisioned) root
diff --git a/partitions/dice_protection_environment/dpe_boot_data.c b/partitions/dice_protection_environment/dpe_boot_data.c
index bdeaea9..8aa56dd 100644
--- a/partitions/dice_protection_environment/dpe_boot_data.c
+++ b/partitions/dice_protection_environment/dpe_boot_data.c
@@ -277,7 +277,7 @@
 }
 
 dpe_error_t derive_boot_data_contexts(int rot_ctx_handle,
-                                      int *child_ctx_handle)
+                                      int *new_ctx_handle)
 {
     int ret;
     dpe_error_t err;
@@ -295,14 +295,14 @@
     }
 
     /* Derive RoT layer */
-    err = derive_child_request(rot_ctx_handle,
-                               false,
-                               true,
-                               true, /* create certificate */
-                               &dice_inputs,
-                               0,
-                               &plat_ctx_handle,
-                               &invalid_ctx_handle);
+    err = derive_context_request(rot_ctx_handle,
+                                 false,
+                                 true,
+                                 true, /* create certificate */
+                                 &dice_inputs,
+                                 0,
+                                 &plat_ctx_handle,
+                                 &invalid_ctx_handle);
     if (err != DPE_NO_ERROR) {
         return err;
     }
@@ -316,14 +316,14 @@
     }
 
     /* Derive BL2 context */
-    err = derive_child_request(plat_ctx_handle,
-                               false, /* close parent context */
-                               true, /* allow BL2 child to derive further */
-                               false,
-                               &dice_inputs,
-                               0,
-                               &plat_ctx_handle,
-                               &invalid_ctx_handle);
+    err = derive_context_request(plat_ctx_handle,
+                                 false, /* close parent context */
+                                 true, /* allow BL2 to derive further */
+                                 false,
+                                 &dice_inputs,
+                                 0,
+                                 &plat_ctx_handle,
+                                 &invalid_ctx_handle);
     if (err != DPE_NO_ERROR) {
         return err;
     }
@@ -333,14 +333,14 @@
     while ((ret = get_measurement_for_slot_cond(&plat_cond, &itr,
                                                 &dice_inputs)) == 1) {
         /* Derive rest of platform contexts from retained BL2 context */
-        err = derive_child_request(plat_ctx_handle,
-                                   true, /* retain parent context */
-                                   false, /* do not allow child to derive */
-                                   false,
-                                   &dice_inputs,
-                                   0,
-                                   &invalid_ctx_handle,
-                                   &plat_ctx_handle);
+        err = derive_context_request(plat_ctx_handle,
+                                     true, /* retain parent context */
+                                     false, /* do not allow derived context to derive */
+                                     false,
+                                     &dice_inputs,
+                                     0,
+                                     &invalid_ctx_handle,
+                                     &plat_ctx_handle);
         if (err != DPE_NO_ERROR) {
             return err;
         }
@@ -359,15 +359,15 @@
         return DPE_INTERNAL_ERROR;
     }
 
-    /* Derive AP context, with the new child context handle returned to the
-     * caller in the child_ctx_handle output parameter.
+    /* Derive AP context, with the new derived context handle returned to the
+     * caller in the new_ctx_handle output parameter.
      */
-    return derive_child_request(plat_ctx_handle,
-                                false, /* close parent context */
-                                true, /* allow AP to derive */
-                                false,
-                                &dice_inputs,
-                                0,
-                                child_ctx_handle,
-                                &invalid_ctx_handle);
+    return derive_context_request(plat_ctx_handle,
+                                  false, /* close parent context */
+                                  true, /* allow AP to derive */
+                                  false,
+                                  &dice_inputs,
+                                  0,
+                                  new_ctx_handle,
+                                  &invalid_ctx_handle);
 }
diff --git a/partitions/dice_protection_environment/dpe_boot_data.h b/partitions/dice_protection_environment/dpe_boot_data.h
index 2864b2a..6d64a31 100644
--- a/partitions/dice_protection_environment/dpe_boot_data.h
+++ b/partitions/dice_protection_environment/dpe_boot_data.h
@@ -27,12 +27,12 @@
  *        area.
  *
  * \param[in]  rot_ctx_handle    Handle for the RoT context.
- * \param[out] child_ctx_handle  New handle for child context.
+ * \param[out] new_ctx_handle    New handle for the derived context.
  *
  * \return Returns error code of type dpe_error_t
  */
 dpe_error_t derive_boot_data_contexts(int rot_ctx_handle,
-                                      int *child_ctx_handle);
+                                      int *new_ctx_handle);
 
 #ifdef __cplusplus
 }
diff --git a/partitions/dice_protection_environment/dpe_cmd_decode.c b/partitions/dice_protection_environment/dpe_cmd_decode.c
index 5aec24e..b6dda5a 100644
--- a/partitions/dice_protection_environment/dpe_cmd_decode.c
+++ b/partitions/dice_protection_environment/dpe_cmd_decode.c
@@ -25,7 +25,7 @@
 
     /* The DICE inputs are encoded as a map wrapped into a byte string */
     QCBORDecode_EnterBstrWrappedFromMapN(decode_ctx,
-                                         DPE_DERIVE_CHILD_INPUT_DATA,
+                                         DPE_DERIVE_CONTEXT_INPUT_DATA,
                                          QCBOR_TAG_REQUIREMENT_NOT_A_TAG, NULL);
     QCBORDecode_EnterMap(decode_ctx, NULL);
 
@@ -103,38 +103,38 @@
     return DPE_NO_ERROR;
 }
 
-static dpe_error_t decode_derive_child(QCBORDecodeContext *decode_ctx,
-                                       QCBOREncodeContext *encode_ctx,
-                                       int32_t client_id)
+static dpe_error_t decode_derive_context(QCBORDecodeContext *decode_ctx,
+                                         QCBOREncodeContext *encode_ctx,
+                                         int32_t client_id)
 {
     dpe_error_t dpe_err;
     QCBORError qcbor_err;
     UsefulBufC out;
     int context_handle;
     bool retain_parent_context;
-    bool allow_child_to_derive;
+    bool allow_new_context_to_derive;
     bool create_certificate;
     DiceInputValues dice_inputs;
-    int new_child_context_handle;
+    int new_context_handle;
     int new_parent_context_handle;
 
-    /* Decode DeriveChild command */
+    /* Decode DeriveContext command */
     QCBORDecode_EnterMap(decode_ctx, NULL);
 
-    QCBORDecode_GetByteStringInMapN(decode_ctx, DPE_DERIVE_CHILD_CONTEXT_HANDLE,
+    QCBORDecode_GetByteStringInMapN(decode_ctx, DPE_DERIVE_CONTEXT_CONTEXT_HANDLE,
                                     &out);
     if (out.len != sizeof(context_handle)) {
         return DPE_INVALID_COMMAND;
     }
     memcpy(&context_handle, out.ptr, out.len);
 
-    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CHILD_RETAIN_PARENT_CONTEXT,
+    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CONTEXT_RETAIN_PARENT_CONTEXT,
                               &retain_parent_context);
 
-    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CHILD_ALLOW_CHILD_TO_DERIVE,
-                              &allow_child_to_derive);
+    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CONTEXT_ALLOW_NEW_CONTEXT_TO_DERIVE,
+                              &allow_new_context_to_derive);
 
-    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CHILD_CREATE_CERTIFICATE,
+    QCBORDecode_GetBoolInMapN(decode_ctx, DPE_DERIVE_CONTEXT_CREATE_CERTIFICATE,
                               &create_certificate);
 
     dpe_err = decode_dice_inputs(decode_ctx, &dice_inputs);
@@ -153,11 +153,11 @@
         return DPE_INVALID_COMMAND;
     }
 
-    dpe_err = derive_child_request(context_handle, retain_parent_context,
-                                   allow_child_to_derive, create_certificate,
-                                   &dice_inputs, client_id,
-                                   &new_child_context_handle,
-                                   &new_parent_context_handle);
+    dpe_err = derive_context_request(context_handle, retain_parent_context,
+                                     allow_new_context_to_derive, create_certificate,
+                                     &dice_inputs, client_id,
+                                     &new_context_handle,
+                                     &new_parent_context_handle);
     if (dpe_err != DPE_NO_ERROR) {
         return dpe_err;
     }
@@ -167,11 +167,11 @@
     QCBOREncode_AddInt64(encode_ctx, DPE_NO_ERROR);
 
     QCBOREncode_OpenMap(encode_ctx);
-    QCBOREncode_AddBytesToMapN(encode_ctx, DPE_DERIVE_CHILD_NEW_CONTEXT_HANDLE,
-                               (UsefulBufC){ &new_child_context_handle,
-                                             sizeof(new_child_context_handle) });
+    QCBOREncode_AddBytesToMapN(encode_ctx, DPE_DERIVE_CONTEXT_NEW_CONTEXT_HANDLE,
+                               (UsefulBufC){ &new_context_handle,
+                                             sizeof(new_context_handle) });
     QCBOREncode_AddBytesToMapN(encode_ctx,
-                               DPE_DERIVE_CHILD_PARENT_CONTEXT_HANDLE,
+                               DPE_DERIVE_CONTEXT_PARENT_CONTEXT_HANDLE,
                                (UsefulBufC){ &new_parent_context_handle,
                                              sizeof(new_parent_context_handle) });
     QCBOREncode_CloseMap(encode_ctx);
@@ -353,8 +353,8 @@
 
     if (qcbor_err == QCBOR_SUCCESS) {
         switch (command_id) {
-        case DPE_DERIVE_CHILD:
-            dpe_err = decode_derive_child(&decode_ctx, &encode_ctx, client_id);
+        case DPE_DERIVE_CONTEXT:
+            dpe_err = decode_derive_context(&decode_ctx, &encode_ctx, client_id);
             break;
         case DPE_CERTIFY_KEY:
             dpe_err = decode_certify_key(&decode_ctx, &encode_ctx);
diff --git a/partitions/dice_protection_environment/dpe_context_mngr.c b/partitions/dice_protection_environment/dpe_context_mngr.c
index 6823fd5..4e05da3 100644
--- a/partitions/dice_protection_environment/dpe_context_mngr.c
+++ b/partitions/dice_protection_environment/dpe_context_mngr.c
@@ -47,11 +47,6 @@
     return i;
 }
 
-static inline void invalidate_handle(int *handle)
-{
-    *handle = INVALID_HANDLE;
-}
-
 static dpe_error_t renew_nonce(int *handle)
 {
     uint16_t nonce;
@@ -65,19 +60,6 @@
     return DPE_NO_ERROR;
 }
 
-static dpe_error_t generate_new_handle(int *out_handle)
-{
-    /* Find the free component array element */
-    int free_component_idx = get_free_component_context_index();
-    if (free_component_idx < 0) {
-        return DPE_INSUFFICIENT_MEMORY;
-    }
-
-    *out_handle = SET_IDX(*out_handle, free_component_idx);
-
-    return renew_nonce(out_handle);
-}
-
 static void set_context_to_default(int i)
 {
     component_ctx_array[i].in_use = false;
@@ -361,18 +343,18 @@
      * has some context data and certificate buffer of 3k, it is
      * causing RAM overflow. Hence until resoluton is reached, once all
      * layers are opened, link new compenents to the last layer.
-     * ISSUE DESCRIPTION: We derive AP_BL31 as child of AP BL2 with create_certificate
-     * as true. Hence we finalize Platform layer. Then we derive AP_SPM as child of
-     * AP BL2, but since AP BL2 is finalised, we open new layer (Hypervisor layer).
-     * Then we derive AP SPx as child of AP BL2. Again, since AP BL2 is finalised,
+     * ISSUE DESCRIPTION: AP BL2 derives AP_BL31 with create_certificate
+     * as true. Hence we finalize Platform layer. Then AP BL2 derives AP_SPM,
+     * but since AP BL2 is finalised, we open new layer (Hypervisor layer).
+     * AP BL2 further derives AP SPx. Again, since AP BL2 is finalised,
      * we open new layer! Here AP SPx should belong to same layer as AP SPM.
      */
     return MAX_NUM_OF_LAYERS - 1;
 }
 
-static inline void link_layer(uint16_t child_layer, uint16_t parent_layer)
+static inline void link_layer(uint16_t derived_ctx_layer, uint16_t parent_ctx_layer)
 {
-    layer_ctx_array[child_layer].parent_layer_idx = parent_layer;
+    layer_ctx_array[derived_ctx_layer].parent_layer_idx = parent_ctx_layer;
 }
 
 static inline bool is_input_client_id_valid(int32_t client_id)
@@ -391,7 +373,7 @@
     assert(parent_layer_idx < MAX_NUM_OF_LAYERS);
 
     if (layer_ctx_array[parent_layer_idx].state == LAYER_STATE_FINALISED) {
-        /* Parent comp's layer of new child is finalised; open a new layer */
+        /* Parent comp's layer of new derived context is finalised; open a new layer */
         new_layer_idx = open_new_layer();
         if (new_layer_idx == INVALID_LAYER_IDX) {
             return DPE_INTERNAL_ERROR;
@@ -432,7 +414,7 @@
 
     /* Open RoT layer */
     rot_layer_ctx->state = LAYER_STATE_OPEN;
-    /* Parent is same as child for RoT layer */
+    /* Parent layer for RoT context's layer is same */
     rot_layer_ctx->parent_layer_idx = DPE_ROT_LAYER_IDX;
 
 #ifndef DPE_TEST_MODE
@@ -452,10 +434,9 @@
         return DPE_INTERNAL_ERROR;
     }
 
-    /* Init RoT context, ready to be derived in next call to DeriveChild */
-    rot_comp_ctx->in_use = true;
+    /* Init RoT context, ready to be derived in next call to DeriveContext */
     rot_comp_ctx->nonce = 0;
-    /* Parent is same as child for RoT context */
+    /* Parent component index for derived RoT context is same */
     rot_comp_ctx->parent_idx = 0;
     /* Link context to RoT Layer */
     rot_comp_ctx->linked_layer_idx = DPE_ROT_LAYER_IDX;
@@ -480,25 +461,27 @@
     return create_rot_context(rot_ctx_handle);
 }
 
-dpe_error_t derive_child_request(int input_ctx_handle,
-                                 bool retain_parent_context,
-                                 bool allow_child_to_derive,
-                                 bool create_certificate,
-                                 const DiceInputValues *dice_inputs,
-                                 int32_t client_id,
-                                 int *new_child_ctx_handle,
-                                 int *new_parent_ctx_handle)
+dpe_error_t derive_context_request(int input_ctx_handle,
+                                   bool retain_parent_context,
+                                   bool allow_new_context_to_derive,
+                                   bool create_certificate,
+                                   const DiceInputValues *dice_inputs,
+                                   int32_t client_id,
+                                   int *new_context_handle,
+                                   int *new_parent_context_handle)
 {
     dpe_error_t err;
-    struct component_context_t *child_ctx, *parent_ctx, *new_ctx;
-    uint16_t input_child_idx, input_parent_idx;
+    struct component_context_t *parent_ctx, *derived_ctx;
+    uint16_t parent_ctx_idx;
+    int free_component_idx;
 
-    log_derive_child(input_ctx_handle, retain_parent_context,
-                     allow_child_to_derive, create_certificate, dice_inputs,
-                     client_id);
+    log_derive_context(input_ctx_handle, retain_parent_context,
+                       allow_new_context_to_derive, create_certificate, dice_inputs,
+                       client_id);
 
 #ifdef DPE_TEST_MODE
-    if (input_ctx_handle == 0) {
+    if ((input_ctx_handle == 0) &&
+        (layer_ctx_array[DPE_ROT_LAYER_IDX].state != LAYER_STATE_FINALISED)) {
         /* Deriving RoT context for tests */
         err = create_rot_context(&input_ctx_handle);
         if (err != DPE_NO_ERROR) {
@@ -516,90 +499,81 @@
     if (!is_input_handle_valid(input_ctx_handle)) {
         return DPE_INVALID_ARGUMENT;
     }
-    /* Get child component index from the input handle */
-    input_child_idx = GET_IDX(input_ctx_handle);
-    /* Get parent index of input referenced child component */
-    input_parent_idx = component_ctx_array[input_child_idx].parent_idx;
+    /* Get parent component index from the input handle */
+    parent_ctx_idx = GET_IDX(input_ctx_handle);
 
     /* Below check is for safety only; It should not happen
-     * input_child_idx is already checked above in is_input_handle_valid()
+     * parent_ctx_idx is already checked above in is_input_handle_valid()
      */
-    assert(input_parent_idx < MAX_NUM_OF_COMPONENTS);
+    assert(parent_ctx_idx < MAX_NUM_OF_COMPONENTS);
 
-    child_ctx = &component_ctx_array[input_child_idx];
-    parent_ctx = &component_ctx_array[input_parent_idx];
+    parent_ctx = &component_ctx_array[parent_ctx_idx];
 
     //TODO:  Question: how to get mhu id of incoming request?
     if (!is_input_client_id_valid(client_id)) {
         return DPE_INVALID_ARGUMENT;
     }
 
-    /* Copy dice input to the child component context */
-    err = copy_dice_input(child_ctx, dice_inputs);
+    /* Get next free component index to add new derived context */
+    free_component_idx = get_free_component_context_index();
+    if (free_component_idx < 0) {
+        return DPE_INSUFFICIENT_MEMORY;
+    }
+
+    derived_ctx = &component_ctx_array[free_component_idx];
+    /* Copy dice input to the new derived component context */
+    err = copy_dice_input(derived_ctx, dice_inputs);
     if (err != DPE_NO_ERROR) {
         return err;
     }
 
-    if (create_certificate) {
-        err = create_layer_certificate(child_ctx->linked_layer_idx);
-        if (err != DPE_NO_ERROR) {
-            return err;
-        }
-    }
-
-    /* Renew nonce of child context so it cannot be used again */
-    child_ctx->nonce = INVALID_NONCE_VALUE;
-
-    if (allow_child_to_derive) {
-        /* Generate new handle for child for subsequent requests */
-        if (generate_new_handle(new_child_ctx_handle) != DPE_NO_ERROR) {
-            return DPE_INTERNAL_ERROR;
-        }
-        /* Update the component context array element as pointed by newly generated handle */
-        new_ctx = &component_ctx_array[GET_IDX(*new_child_ctx_handle)];
-        /* Update nonce in new child component context */
-        new_ctx->nonce = GET_NONCE(*new_child_ctx_handle);
-        /* Update parent idx in new child component context */
-        new_ctx->parent_idx = input_child_idx;
-        /* Mark new child component index as in use */
-        new_ctx->in_use = true;
-        err = assign_layer_to_context(new_ctx);
-        if (err != DPE_NO_ERROR) {
-            return err;
-        }
-    } else {
-        /* Child not deriving any children */
-        /* Tag this component as a leaf */
-        child_ctx->is_leaf = true;
-        invalidate_handle(new_child_ctx_handle);
+    /* Update parent idx in new derived component context */
+    derived_ctx->parent_idx = parent_ctx_idx;
+    /* Mark new derived component index as in use */
+    derived_ctx->in_use = true;
+    err = assign_layer_to_context(derived_ctx);
+    if (err != DPE_NO_ERROR) {
+        return err;
     }
 
     if (retain_parent_context) {
-        /* Parent deriving multiple children */
-        /* Generate new handle for child for the same parent for subsequent requests */
-        if (generate_new_handle(new_parent_ctx_handle) != DPE_NO_ERROR) {
-            return DPE_INTERNAL_ERROR;
-        }
-        /* Update the component context array element as pointed by newly generated handle */
-        new_ctx = &component_ctx_array[GET_IDX(*new_parent_ctx_handle)];
-        /* Update nonce in new child component context */
-        new_ctx->nonce = GET_NONCE(*new_parent_ctx_handle);
-        /* Update parent idx in new child component context */
-        new_ctx->parent_idx = input_parent_idx;
-        /* Mark new child component index as in use */
-        new_ctx->in_use = true;
-        err = assign_layer_to_context(new_ctx);
+        /* Retain and return parent handle with renewed nonce */
+        *new_parent_context_handle = input_ctx_handle;
+        err = renew_nonce(new_parent_context_handle);
         if (err != DPE_NO_ERROR) {
             return err;
         }
+        parent_ctx->nonce = GET_NONCE(*new_parent_context_handle);
+
     } else {
-        /* Parent not deriving any more children */
-        /* No need to return parent handle */
-        invalidate_handle(new_parent_ctx_handle);
-        /* Renew nonce of parent context so it cannot be used again */
+        /* Return invalid handle */
+        *new_parent_context_handle = INVALID_HANDLE;
         parent_ctx->nonce = INVALID_NONCE_VALUE;
     }
 
+    if (allow_new_context_to_derive) {
+        /* Return handle to derived context */
+        *new_context_handle = SET_IDX(*new_context_handle, free_component_idx);
+        err = renew_nonce(new_context_handle);
+        if (err != DPE_NO_ERROR) {
+            return err;
+        }
+        /* Update nonce in new derived component context */
+        derived_ctx->nonce = GET_NONCE(*new_context_handle);
+
+    } else {
+        /* Return invalid handle */
+        *new_context_handle = INVALID_HANDLE;
+        derived_ctx->nonce = INVALID_NONCE_VALUE;
+    }
+
+    if (create_certificate) {
+        err = create_layer_certificate(derived_ctx->linked_layer_idx);
+        if (err != DPE_NO_ERROR) {
+            return err;
+        }
+    }
+
     return DPE_NO_ERROR;
 }
 
@@ -612,7 +586,7 @@
 
     log_destroy_context(input_ctx_handle, destroy_recursively);
 
-    /* Get child component index and linked layer from the input handle */
+    /* Get component index and linked layer from the input handle */
     input_ctx_idx = GET_IDX(input_ctx_handle);
 
     /* Validate input handle */
@@ -749,7 +723,7 @@
     }
 
     /* Correct layer should already be assigned in last call of
-     * derive child command
+     * derive context command
      */
     /* Finalise the current layer & create leaf certificate */
     err = create_layer_certificate(input_layer_idx);
diff --git a/partitions/dice_protection_environment/dpe_context_mngr.h b/partitions/dice_protection_environment/dpe_context_mngr.h
index fc9a7e8..df6cafd 100644
--- a/partitions/dice_protection_environment/dpe_context_mngr.h
+++ b/partitions/dice_protection_environment/dpe_context_mngr.h
@@ -102,34 +102,34 @@
 dpe_error_t initialise_context_mngr(int *rot_ctx_handle);
 
 /**
- * \brief Derives a child component context and optionally creates certificate
+ * \brief Derives a component context and optionally creates certificate
  *        chain.
  *
- * \param[in]  input_context_handle      Input handle to child component context
- * \param[in]  retain_parent_context     Flag to indicate if parent context need
- *                                       to be retained. TRUE only if a client
- *                                       is calling DPE commands multiple times
- * \param[in]  allow_child_to_derive     Flag to indicate if requested child can
- *                                       derive further.
- * \param[in]  create_certificate        Flag to indicate if certificate needs
- *                                       to be created. TRUE only if it is the
- *                                       last component in the layer.
- * \param[in]  dice_inputs               Pointer to dice_input buffer.
- * \param[in]  client_id                 Identifier of the client calling the
- *                                       service.
- * \param[out] new_child_context_handle  A new handle for child context.
- * \param[out] new_parent_context_handle A new handle for parent context.
+ * \param[in]  input_context_handle        Input handle to parent component context
+ * \param[in]  retain_parent_context       Flag to indicate if parent context need
+ *                                         to be retained. TRUE only if a client
+ *                                         is calling DPE commands multiple times
+ * \param[in]  allow_new_context_to_derive Flag to indicate if derived context can
+ *                                         derive further.
+ * \param[in]  create_certificate          Flag to indicate if certificate needs
+ *                                         to be created. TRUE only if it is the
+ *                                         last component in the layer.
+ * \param[in]  dice_inputs                 Pointer to dice_input buffer.
+ * \param[in]  client_id                   Identifier of the client calling the
+ *                                         service.
+ * \param[out] new_context_handle          A new handle for derived context.
+ * \param[out] new_parent_context_handle   A new handle for parent context.
  *
  * \return Returns error code of type dpe_error_t
  */
-dpe_error_t derive_child_request(int input_context_handle,
-                                 bool retain_parent_context,
-                                 bool allow_child_to_derive,
-                                 bool create_certificate,
-                                 const DiceInputValues *dice_inputs,
-                                 int32_t client_id,
-                                 int *new_child_context_handle,
-                                 int *new_parent_context_handle);
+dpe_error_t derive_context_request(int input_context_handle,
+                                   bool retain_parent_context,
+                                   bool allow_new_context_to_derive,
+                                   bool create_certificate,
+                                   const DiceInputValues *dice_inputs,
+                                   int32_t client_id,
+                                   int *new_context_handle,
+                                   int *new_parent_context_handle);
 
 /**
  * \brief Destroys a component context and optionally depending on argument
diff --git a/partitions/dice_protection_environment/dpe_log.c b/partitions/dice_protection_environment/dpe_log.c
index d81674c..1b57613 100644
--- a/partitions/dice_protection_environment/dpe_log.c
+++ b/partitions/dice_protection_environment/dpe_log.c
@@ -57,18 +57,18 @@
     log_dice_inputs(dice_inputs);
 }
 
-void log_derive_child(int context_handle,
-                      bool retain_parent_context,
-                      bool allow_child_to_derive,
-                      bool create_certificate,
-                      const DiceInputValues *dice_inputs,
-                      int32_t client_id)
+void log_derive_context(int context_handle,
+                        bool retain_parent_context,
+                        bool allow_new_context_to_derive,
+                        bool create_certificate,
+                        const DiceInputValues *dice_inputs,
+                        int32_t client_id)
 {
-    LOG_DBGFMT("DPE DeriveChild:\r\n");
+    LOG_DBGFMT("DPE DeriveContext:\r\n");
     LOG_DBGFMT(" - context_handle index = %d\r\n", GET_IDX(context_handle));
     LOG_DBGFMT(" - context_handle nonce = %d\r\n", GET_NONCE(context_handle));
     LOG_DBGFMT(" - retain_parent_context = %d\r\n", retain_parent_context);
-    LOG_DBGFMT(" - allow_child_to_derive = %d\r\n", allow_child_to_derive);
+    LOG_DBGFMT(" - allow_new_context_to_derive = %d\r\n", allow_new_context_to_derive);
     LOG_DBGFMT(" - create_certificate = %d\r\n", create_certificate);
     log_dice_inputs(dice_inputs);
     LOG_DBGFMT(" - client_id = %d\r\n", client_id);
diff --git a/partitions/dice_protection_environment/dpe_log.h b/partitions/dice_protection_environment/dpe_log.h
index 9061e27..1f08e94 100644
--- a/partitions/dice_protection_environment/dpe_log.h
+++ b/partitions/dice_protection_environment/dpe_log.h
@@ -23,14 +23,14 @@
 void log_derive_rot_context(const DiceInputValues *dice_inputs);
 
 /**
- * \brief Log the derive child command parameters.
+ * \brief Log the derive context command parameters.
  */
-void log_derive_child(int context_handle,
-                      bool retain_parent_context,
-                      bool allow_child_to_derive,
-                      bool create_certificate,
-                      const DiceInputValues *dice_inputs,
-                      int32_t client_id);
+void log_derive_context(int context_handle,
+                        bool retain_parent_context,
+                        bool allow_new_context_to_derive,
+                        bool create_certificate,
+                        const DiceInputValues *dice_inputs,
+                        int32_t client_id);
 
 /**
  * \brief Log the destroy context command parameters.
@@ -64,7 +64,7 @@
 #else /* TFM_PARTITION_LOG_LEVEL */
 
 #define log_derive_rot_context(...)
-#define log_derive_child(...)
+#define log_derive_context(...)
 #define log_destroy_context(...)
 #define log_certify_key(...)
 #define log_intermediate_certificate(...)
diff --git a/partitions/dice_protection_environment/interface/include/dice_protection_environment.h b/partitions/dice_protection_environment/interface/include/dice_protection_environment.h
index f1e0ef0..952bcd3 100644
--- a/partitions/dice_protection_environment/interface/include/dice_protection_environment.h
+++ b/partitions/dice_protection_environment/interface/include/dice_protection_environment.h
@@ -36,36 +36,36 @@
 #define DPE_ERR_CBOR_FORMATTING       ((dpe_error_t)129)
 
 /**
- * \brief Performs the DICE computation to derive a child context and optionally
+ * \brief Performs the DICE computation to derive a new context and optionally
  *        creates an intermediate certificate. Software component measurement
  *        must be provided in dice_inputs.
  *
- * \param[in]  context_handle             Input context handle for the DPE
- *                                        context.
- * \param[in]  retain_parent_context      Flag to indicate whether to retain the
- *                                        parent context. True only if a client
- *                                        will call further DPE commands on the
- *                                        same context.
- * \param[in]  allow_child_to_derive      Flag to indicate whether child context
- *                                        can derive further. True only if the
- *                                        child will load further components.
- * \param[in]  create_certificate         Flag to indicate whether to create an
- *                                        intermediate certificate. True only if
- *                                        it is the last component in the layer.
- * \param[in]  dice_inputs                DICE input values.
- * \param[out] new_child_context_handle   New handle for the child context.
- * \param[out] new_parent_context_handle  New handle for the parent context.
+ * \param[in]  context_handle              Input context handle for the DPE
+ *                                         context.
+ * \param[in]  retain_parent_context       Flag to indicate whether to retain the
+ *                                         parent context. True only if a client
+ *                                         will call further DPE commands on the
+ *                                         same context.
+ * \param[in]  allow_new_context_to_derive Flag to indicate whether derived context
+ *                                         can derive further. True only if the
+ *                                         new context will load further components.
+ * \param[in]  create_certificate          Flag to indicate whether to create an
+ *                                         intermediate certificate. True only if
+ *                                         it is the last component in the layer.
+ * \param[in]  dice_inputs                 DICE input values.
+ * \param[out] new_context_handle          New handle for the derived context.
+ * \param[out] new_parent_context_handle   New handle for the parent context.
  *
  * \return Returns error code of type dpe_error_t
  */
 dpe_error_t
-dpe_derive_child(int                    context_handle,
-                 bool                   retain_parent_context,
-                 bool                   allow_child_to_derive,
-                 bool                   create_certificate,
-                 const DiceInputValues *dice_inputs,
-                 int                   *new_child_context_handle,
-                 int                   *new_parent_context_handle);
+dpe_derive_context(int                    context_handle,
+                   bool                   retain_parent_context,
+                   bool                   allow_new_context_to_derive,
+                   bool                   create_certificate,
+                   const DiceInputValues *dice_inputs,
+                   int                   *new_context_handle,
+                   int                   *new_parent_context_handle);
 
 /**
  * \brief Destroys a DPE context.
diff --git a/partitions/dice_protection_environment/interface/include/dpe_client.h b/partitions/dice_protection_environment/interface/include/dpe_client.h
index ef4e376..eebef48 100644
--- a/partitions/dice_protection_environment/interface/include/dpe_client.h
+++ b/partitions/dice_protection_environment/interface/include/dpe_client.h
@@ -26,7 +26,7 @@
     DPE_EXPORT_SESSION = 5,
     DPE_IMPORT_SESSION = 6,
     DPE_INITIALIZE_CONTEXT = 7,
-    DPE_DERIVE_CHILD = 8,
+    DPE_DERIVE_CONTEXT = 8,
     DPE_CERTIFY_KEY = 9,
     DPE_SIGN = 10,
     DPE_SEAL = 11,
@@ -48,15 +48,15 @@
     DICE_HIDDEN = 9,
 };
 
-enum dpe_derive_child_input_labels_t {
-    DPE_DERIVE_CHILD_CONTEXT_HANDLE = 1,
-    DPE_DERIVE_CHILD_RETAIN_PARENT_CONTEXT = 2,
-    DPE_DERIVE_CHILD_ALLOW_CHILD_TO_DERIVE = 3,
-    DPE_DERIVE_CHILD_CREATE_CERTIFICATE = 4,
-    DPE_DERIVE_CHILD_NEW_SESSION_INITIATOR_HANDSHAKE = 5,
-    DPE_DERIVE_CHILD_NEW_SESSION_IS_MIGRATABLE = 6,
-    DPE_DERIVE_CHILD_INPUT_DATA = 7,
-    DPE_DERIVE_CHILD_INTERNAL_INPUTS = 8,
+enum dpe_derive_context_input_labels_t {
+    DPE_DERIVE_CONTEXT_CONTEXT_HANDLE = 1,
+    DPE_DERIVE_CONTEXT_RETAIN_PARENT_CONTEXT = 2,
+    DPE_DERIVE_CONTEXT_ALLOW_NEW_CONTEXT_TO_DERIVE = 3,
+    DPE_DERIVE_CONTEXT_CREATE_CERTIFICATE = 4,
+    DPE_DERIVE_CONTEXT_NEW_SESSION_INITIATOR_HANDSHAKE = 5,
+    DPE_DERIVE_CONTEXT_NEW_SESSION_IS_MIGRATABLE = 6,
+    DPE_DERIVE_CONTEXT_INPUT_DATA = 7,
+    DPE_DERIVE_CONTEXT_INTERNAL_INPUTS = 8,
 };
 
 enum dpe_destroy_context_input_labels_t {
@@ -64,10 +64,10 @@
     DPE_DESTROY_CONTEXT_RECURSIVELY = 2,
 };
 
-enum dpe_derive_child_output_labels_t {
-    DPE_DERIVE_CHILD_NEW_CONTEXT_HANDLE = 1,
-    DPE_DERIVE_CHILD_NEW_SESSION_RESPONDER_HANDSHAKE = 2,
-    DPE_DERIVE_CHILD_PARENT_CONTEXT_HANDLE = 3,
+enum dpe_derive_context_output_labels_t {
+    DPE_DERIVE_CONTEXT_NEW_CONTEXT_HANDLE = 1,
+    DPE_DERIVE_CONTEXT_NEW_SESSION_RESPONDER_HANDSHAKE = 2,
+    DPE_DERIVE_CONTEXT_PARENT_CONTEXT_HANDLE = 3,
 };
 
 enum dpe_certify_key_input_labels_t {
diff --git a/partitions/dice_protection_environment/interface/src/dpe_cmd_encode.c b/partitions/dice_protection_environment/interface/src/dpe_cmd_encode.c
index 8abf30f..2c4757d 100644
--- a/partitions/dice_protection_environment/interface/src/dpe_cmd_encode.c
+++ b/partitions/dice_protection_environment/interface/src/dpe_cmd_encode.c
@@ -12,16 +12,16 @@
 #include "qcbor/qcbor_decode.h"
 #include "qcbor/qcbor_spiffy_decode.h"
 
-struct derive_child_input_t {
+struct derive_context_input_t {
     int context_handle;
     bool retain_parent_context;
-    bool allow_child_to_derive;
+    bool allow_new_context_to_derive;
     bool create_certificate;
     const DiceInputValues *dice_inputs;
 };
 
-struct derive_child_output_t {
-    int new_child_context_handle;
+struct derive_context_output_t {
+    int new_context_handle;
     int new_parent_context_handle;
 };
 
@@ -51,7 +51,7 @@
                                const DiceInputValues *input)
 {
     /* Wrap the DICE inputs into a byte string */
-    QCBOREncode_BstrWrapInMapN(encode_ctx, DPE_DERIVE_CHILD_INPUT_DATA);
+    QCBOREncode_BstrWrapInMapN(encode_ctx, DPE_DERIVE_CONTEXT_INPUT_DATA);
 
     /* Inside the byte string the DICE inputs are encoded as a map */
     QCBOREncode_OpenMap(encode_ctx);
@@ -95,27 +95,27 @@
     QCBOREncode_CloseBstrWrap2(encode_ctx, true, NULL);
 }
 
-static QCBORError encode_derive_child(const struct derive_child_input_t *args,
-                                      UsefulBuf buf,
-                                      UsefulBufC *encoded_buf)
+static QCBORError encode_derive_context(const struct derive_context_input_t *args,
+                                        UsefulBuf buf,
+                                        UsefulBufC *encoded_buf)
 {
     QCBOREncodeContext encode_ctx;
 
     QCBOREncode_Init(&encode_ctx, buf);
 
     QCBOREncode_OpenArray(&encode_ctx);
-    QCBOREncode_AddUInt64(&encode_ctx, DPE_DERIVE_CHILD);
+    QCBOREncode_AddUInt64(&encode_ctx, DPE_DERIVE_CONTEXT);
 
-    /* Encode DeriveChild command */
+    /* Encode DeriveContext command */
     QCBOREncode_OpenMap(&encode_ctx);
-    QCBOREncode_AddBytesToMapN(&encode_ctx, DPE_DERIVE_CHILD_CONTEXT_HANDLE,
+    QCBOREncode_AddBytesToMapN(&encode_ctx, DPE_DERIVE_CONTEXT_CONTEXT_HANDLE,
                                (UsefulBufC){ &args->context_handle,
                                              sizeof(args->context_handle) });
-    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CHILD_RETAIN_PARENT_CONTEXT,
+    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CONTEXT_RETAIN_PARENT_CONTEXT,
                               args->retain_parent_context);
-    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CHILD_ALLOW_CHILD_TO_DERIVE,
-                              args->allow_child_to_derive);
-    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CHILD_CREATE_CERTIFICATE,
+    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CONTEXT_ALLOW_NEW_CONTEXT_TO_DERIVE,
+                              args->allow_new_context_to_derive);
+    QCBOREncode_AddBoolToMapN(&encode_ctx, DPE_DERIVE_CONTEXT_CREATE_CERTIFICATE,
                               args->create_certificate);
     encode_dice_inputs(&encode_ctx, args->dice_inputs);
     QCBOREncode_CloseMap(&encode_ctx);
@@ -150,9 +150,9 @@
     return QCBOREncode_Finish(&encode_ctx, encoded_buf);
 }
 
-static QCBORError decode_derive_child_response(UsefulBufC encoded_buf,
-                                               struct derive_child_output_t *args,
-                                               dpe_error_t *dpe_err)
+static QCBORError decode_derive_context_response(UsefulBufC encoded_buf,
+                                                 struct derive_context_output_t *args,
+                                                 dpe_error_t *dpe_err)
 {
     QCBORDecodeContext decode_ctx;
     UsefulBufC out;
@@ -166,20 +166,20 @@
     QCBORDecode_GetInt64(&decode_ctx, &response_dpe_err);
     *dpe_err = (dpe_error_t)response_dpe_err;
 
-    /* Decode DeriveChild response if successful */
+    /* Decode DeriveContext response if successful */
     if (*dpe_err == DPE_NO_ERROR) {
         QCBORDecode_EnterMap(&decode_ctx, NULL);
 
         QCBORDecode_GetByteStringInMapN(&decode_ctx,
-                                        DPE_DERIVE_CHILD_NEW_CONTEXT_HANDLE,
+                                        DPE_DERIVE_CONTEXT_NEW_CONTEXT_HANDLE,
                                         &out);
-        if (out.len != sizeof(args->new_child_context_handle)) {
+        if (out.len != sizeof(args->new_context_handle)) {
             return QCBORDecode_Finish(&decode_ctx);
         }
-        memcpy(&args->new_child_context_handle, out.ptr, out.len);
+        memcpy(&args->new_context_handle, out.ptr, out.len);
 
         QCBORDecode_GetByteStringInMapN(&decode_ctx,
-                                        DPE_DERIVE_CHILD_PARENT_CONTEXT_HANDLE,
+                                        DPE_DERIVE_CONTEXT_PARENT_CONTEXT_HANDLE,
                                         &out);
         if (out.len != sizeof(args->new_parent_context_handle)) {
             return QCBORDecode_Finish(&decode_ctx);
@@ -291,13 +291,13 @@
     return QCBORDecode_Finish(&decode_ctx);
 }
 
-dpe_error_t dpe_derive_child(int context_handle,
-                             bool retain_parent_context,
-                             bool allow_child_to_derive,
-                             bool create_certificate,
-                             const DiceInputValues *dice_inputs,
-                             int *new_child_context_handle,
-                             int *new_parent_context_handle)
+dpe_error_t dpe_derive_context(int context_handle,
+                               bool retain_parent_context,
+                               bool allow_new_context_to_derive,
+                               bool create_certificate,
+                               const DiceInputValues *dice_inputs,
+                               int *new_context_handle,
+                               int *new_parent_context_handle)
 {
     int32_t service_err;
     dpe_error_t dpe_err;
@@ -305,16 +305,16 @@
     UsefulBufC encoded_buf;
     UsefulBuf_MAKE_STACK_UB(cmd_buf, 512);
 
-    const struct derive_child_input_t in_args = {
+    const struct derive_context_input_t in_args = {
         context_handle,
         retain_parent_context,
-        allow_child_to_derive,
+        allow_new_context_to_derive,
         create_certificate,
         dice_inputs,
     };
-    struct derive_child_output_t out_args;
+    struct derive_context_output_t out_args;
 
-    qcbor_err = encode_derive_child(&in_args, cmd_buf, &encoded_buf);
+    qcbor_err = encode_derive_context(&in_args, cmd_buf, &encoded_buf);
     if (qcbor_err != QCBOR_SUCCESS) {
         return DPE_INTERNAL_ERROR;
     }
@@ -325,8 +325,8 @@
         return DPE_INTERNAL_ERROR;
     }
 
-    qcbor_err = decode_derive_child_response(UsefulBuf_Const(cmd_buf),
-                                             &out_args, &dpe_err);
+    qcbor_err = decode_derive_context_response(UsefulBuf_Const(cmd_buf),
+                                               &out_args, &dpe_err);
     if (qcbor_err != QCBOR_SUCCESS) {
         return DPE_INTERNAL_ERROR;
     } else if (dpe_err != DPE_NO_ERROR) {
@@ -334,7 +334,7 @@
     }
 
     /* Copy returned values into caller's memory */
-    *new_child_context_handle = out_args.new_child_context_handle;
+    *new_context_handle = out_args.new_context_handle;
     *new_parent_context_handle = out_args.new_parent_context_handle;
 
     return DPE_NO_ERROR;
