diff --git a/src/smf_app/smf_context.cpp b/src/smf_app/smf_context.cpp
index e14696eb8d6366e5a0a740c335de7e18975ecaca..6aa10fde6401ed2b71b5e98eda924c9df637167c 100644
--- a/src/smf_app/smf_context.cpp
+++ b/src/smf_app/smf_context.cpp
@@ -1495,6 +1495,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
               }
             }
 
+            Logger::smf_app().debug("Add new QoS Flow with new QRI");
             //mark this rule to be synchronised with the UE
             qos_flow.update_qos_rule(qos_rules_ie[i]);
             //Add new QoS flow
@@ -1508,7 +1509,8 @@ void smf_context::handle_pdu_session_update_sm_context_request(
             qcu.set_qos_profile(qos_flow.qos_profile);
             sm_context_resp_pending->res.add_qos_flow_context_updated(qcu);
 
-          } else { //update existing QRI
+          } else {  //update existing QRI
+            Logger::smf_app().debug("Update existing QRI");
             qfi.qfi = qos_rules_ie[i].qosflowidentifer;
             sp.get()->get_qos_flow(qfi, qos_flow);
             qos_flow.update_qos_rule(qos_rules_ie[i]);
@@ -1611,6 +1613,14 @@ void smf_context::handle_pdu_session_update_sm_context_request(
         procedure_type =
             session_management_procedures_type_e::PDU_SESSION_MODIFICATION_UE_INITIATED_STEP3;
 
+        /* ExtendedProtocolDiscriminator extendedprotocoldiscriminator;
+        PDUSessionIdentity pdusessionidentity;
+        ProcedureTransactionIdentity proceduretransactionidentity;
+        MessageType messagetype;
+        uint8_t presence;
+        ExtendedProtocolConfigurationOptions extendedprotocolconfigurationoptions;
+        */
+
         /* see section 6.3.2.3@3GPP TS 24.501 V16.1.0
          Upon receipt of a PDU SESSION MODIFICATION COMPLETE message, the SMF shall stop timer T3591 and shall
          consider the PDU session as modified. If the selected SSC mode of the PDU session is "SSC mode 3" and the PDU
@@ -1674,7 +1684,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
           sp.get()->set_pdu_session_status(
               pdu_session_status_e::PDU_SESSION_INACTIVE);
           //TODO: Release locally the existing PDU Session (see section 6.3.2.5@3GPP TS 24.501)
-        } else {
+        } else if (sp.get()->get_pdu_session_status() == pdu_session_status_e::PDU_SESSION_MODIFICATION_PENDING){
           //Update PDU Session status -> ACTIVE
           sp.get()->set_pdu_session_status(
               pdu_session_status_e::PDU_SESSION_ACTIVE);
@@ -1806,7 +1816,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
         std::vector<smf_qos_flow> qos_flows;
         sp.get()->get_qos_flows(qos_flows);
         for (auto i : qos_flows) {
-          sm_context_req_msg.add_qfi(i.qfi.qfi);
+          smreq->req.add_qfi(i.qfi.qfi);
         }
 
         //need to update UPF accordingly
@@ -1982,7 +1992,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
         Logger::smf_app().debug("uPTransportLayerInformation IP Addr %s",
                                 conv::toString(dl_teid.ipv4_address).c_str());
 
-        sm_context_req_msg.set_dl_fteid(dl_teid);
+        smreq->req.set_dl_fteid(dl_teid);
 
         for (int i = 0;
             i
@@ -1991,7 +2001,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
           pfcp::qfi_t qfi(
               (uint8_t) (decoded_msg->dLQosFlowPerTNLInformation
                   .associatedQosFlowList.list.array[i])->qosFlowIdentifier);
-          sm_context_req_msg.add_qfi(qfi);
+          smreq->req.add_qfi(qfi);
           Logger::smf_app().debug(
               "QoSFlowPerTNLInformation, AssociatedQosFlowList, QFI %d",
               (decoded_msg->dLQosFlowPerTNLInformation.associatedQosFlowList
@@ -2040,7 +2050,16 @@ void smf_context::handle_pdu_session_update_sm_context_request(
 
         }
 
-        //if dL_NGU_UP_TNLInformation is included, it shall be considered as the new DL transfort layer addr for the PDU session (should be verified)
+        /*
+         struct Ngap_UPTransportLayerInformation *dL_NGU_UP_TNLInformation;
+         struct Ngap_UPTransportLayerInformation *uL_NGU_UP_TNLInformation;
+         struct Ngap_QosFlowAddOrModifyResponseList  *qosFlowAddOrModifyResponseList;
+         struct Ngap_QosFlowPerTNLInformationList  *additionalDLQosFlowPerTNLInformation;
+         struct Ngap_QosFlowListWithCause  *qosFlowFailedToAddOrModifyList;
+         struct Ngap_ProtocolExtensionContainer  *iE_Extensions;
+         */
+        //see section 8.2.3 (PDU Session Resource Modify) @3GPP TS 38.413
+        //if dL_NGU_UP_TNLInformation is included, it shall be considered as the new DL transport layer addr for the PDU session (should be verified)
         fteid_t dl_teid;
         memcpy(
             &dl_teid.ipv4_address,
@@ -2052,11 +2071,12 @@ void smf_context::handle_pdu_session_update_sm_context_request(
             decoded_msg->dL_NGU_UP_TNLInformation->choice.gTPTunnel
                 ->transportLayerAddress.buf,
             4);
-        sm_context_req_msg.set_dl_fteid(dl_teid);
+        smreq->req.set_dl_fteid(dl_teid);
+
         //list of Qos Flows which have been successfully setup or modified
         for (int i = 0;
             i < decoded_msg->qosFlowAddOrModifyResponseList->list.count; i++) {
-          sm_context_req_msg.add_qfi(
+          smreq->req.add_qfi(
               (decoded_msg->qosFlowAddOrModifyResponseList->list.array[i])
                   ->qosFlowIdentifier);
         }
@@ -2144,7 +2164,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
     std::vector<smf_qos_flow> qos_flows = { };
     sp.get()->get_qos_flows(qos_flows);
     for (auto i : qos_flows) {
-      sm_context_req_msg.add_qfi(i.qfi.qfi);
+      smreq->req.add_qfi(i.qfi.qfi);
     }
     //need update UPF
     update_upf = true;
@@ -2166,7 +2186,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
     std::vector<smf_qos_flow> qos_flows = { };
     sp.get()->get_qos_flows(qos_flows);
     for (auto i : qos_flows) {
-      sm_context_req_msg.add_qfi(i.qfi.qfi);
+      smreq->req.add_qfi(i.qfi.qfi);
     }
     //need update UPF
     update_upf = true;
@@ -2179,7 +2199,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
     std::shared_ptr<smf_procedure> sproc = std::shared_ptr<smf_procedure>(proc);
     proc->session_procedure_type = procedure_type;
 
-    smreq->req = sm_context_req_msg;
+    //smreq->req = sm_context_req_msg;
     insert_procedure(sproc);
     if (proc->run(smreq, sm_context_resp_pending, shared_from_this())) {
       // error !
diff --git a/src/smf_app/smf_msg.hpp b/src/smf_app/smf_msg.hpp
index 56fc4ff91071ceb26d9c3aa774a391d6ea3c0a15..e7728af08640a7649b774cc2382b923b8a232b96 100644
--- a/src/smf_app/smf_msg.hpp
+++ b/src/smf_app/smf_msg.hpp
@@ -56,9 +56,20 @@ typedef enum {
 
 namespace smf {
 
-//QoS flow created or modified
+//QoS flow to be created/modified/removed
 class qos_flow_context_updated {
  public:
+  qos_flow_context_updated()
+      :
+      cause_value(),
+      qfi(),
+      ul_fteid(),
+      dl_fteid(),
+      qos_rule(),
+      qos_profile(),
+      to_be_removed(false) {
+  }
+
   void set_cause(const uint8_t cause);
   void set_qfi(const pfcp::qfi_t &q);
   void set_ul_fteid(const fteid_t &teid);
@@ -72,6 +83,7 @@ class qos_flow_context_updated {
   fteid_t dl_fteid;
   QOSRulesIE qos_rule;
   qos_profile_t qos_profile;
+  bool to_be_removed;
 };
 
 //---------------------------------------------------------------------------------------
diff --git a/src/smf_app/smf_n11.cpp b/src/smf_app/smf_n11.cpp
index 952567aa684c93c3a3c1ef81bb0e709fe34581fc..e0118f4d91dfc784abce8db90efe62a67192aef8 100644
--- a/src/smf_app/smf_n11.cpp
+++ b/src/smf_app/smf_n11.cpp
@@ -389,7 +389,7 @@ void smf_n11::send_pdu_session_update_sm_context_response(
       break;
 
     case session_management_procedures_type_e::PDU_SESSION_MODIFICATION_UE_INITIATED_STEP1: {
-      Logger::smf_n11().info("PDU_SESSION_MODIFICATION_UE_INITIATED");
+      Logger::smf_n11().info("PDU_SESSION_MODIFICATION_UE_INITIATED (step 1)");
 
       std::string boundary = "----Boundary";
       std::string json_part =
@@ -409,8 +409,20 @@ void smf_n11::send_pdu_session_update_sm_context_response(
     }
       break;
 
+    case session_management_procedures_type_e::PDU_SESSION_MODIFICATION_UE_INITIATED_STEP2: {
+      Logger::smf_n11().info("PDU_SESSION_MODIFICATION_UE_INITIATED (step 2)");
+      sm_context_res->http_response.send(Pistache::Http::Code::No_Content);
+    }
+      break;
+
+    case session_management_procedures_type_e::PDU_SESSION_MODIFICATION_UE_INITIATED_STEP3: {
+      Logger::smf_n11().info("PDU_SESSION_MODIFICATION_UE_INITIATED (step 3)");
+      sm_context_res->http_response.send(Pistache::Http::Code::No_Content);
+    }
+      break;
+
     case session_management_procedures_type_e::SERVICE_REQUEST_UE_TRIGGERED_STEP1: {
-      Logger::smf_n11().debug("SERVICE_REQUEST_UE_TRIGGERED Step 1");
+      Logger::smf_n11().info("SERVICE_REQUEST_UE_TRIGGERED (step 1)");
 
       std::string boundary = "----Boundary";
       std::string json_part =
@@ -430,7 +442,7 @@ void smf_n11::send_pdu_session_update_sm_context_response(
       break;
 
     case session_management_procedures_type_e::SERVICE_REQUEST_UE_TRIGGERED_STEP2: {
-      Logger::smf_n11().debug("SERVICE_REQUEST_UE_TRIGGERED Step2");
+      Logger::smf_n11().info("SERVICE_REQUEST_UE_TRIGGERED (step 2)");
       std::string json_part =
           sm_context_res->res.sm_context_updated_data.dump();
       sm_context_res->http_response.headers()
@@ -443,7 +455,7 @@ void smf_n11::send_pdu_session_update_sm_context_response(
       break;
 
     case session_management_procedures_type_e::PDU_SESSION_RELEASE_UE_REQUESTED_STEP1: {
-      Logger::smf_n11().debug("PDU_SESSION_RELEASE_UE_REQUESTED_STEP1");
+      Logger::smf_n11().info("PDU_SESSION_RELEASE_UE_REQUESTED (step 1)");
 
       std::string boundary = "----Boundary";
       std::string json_part =
diff --git a/src/smf_app/smf_procedure.cpp b/src/smf_app/smf_procedure.cpp
index 5e09805a73474db9007b5cc0847bd2965ba1c1d6..7e4ea8af5d21a383a1b1148b81073dd4f7024996 100644
--- a/src/smf_app/smf_procedure.cpp
+++ b/src/smf_app/smf_procedure.cpp
@@ -1207,7 +1207,6 @@ void session_update_sm_context_procedure::handle_itti_msg(
     case session_management_procedures_type_e::PDU_SESSION_MODIFICATION_UE_INITIATED_STEP2: {
       //No need to create N1/N2 Container
       Logger::smf_app().info("PDU Session Modification UE-initiated (Step 2)");
-      //TODO: To be completed
     }
       break;