diff --git a/src/smf_app/smf_context.cpp b/src/smf_app/smf_context.cpp
index 79dc584f800d58560e96aaa1ac5d30d5cfe8677e..afdb2249aa15230865c0d07f2f53be5eb0c448ee 100644
--- a/src/smf_app/smf_context.cpp
+++ b/src/smf_app/smf_context.cpp
@@ -48,6 +48,7 @@ extern "C" {
 #include "Ngap_PDUSessionResourceSetupResponseTransfer.h"
 #include "Ngap_PDUSessionResourceModifyResponseTransfer.h"
 #include "Ngap_PDUSessionResourceReleaseResponseTransfer.h"
+#include "Ngap_PDUSessionResourceSetupUnsuccessfulTransfer.h"
 #include "Ngap_GTPTunnel.h"
 #include "Ngap_AssociatedQosFlowItem.h"
 #include "Ngap_QosFlowAddOrModifyResponseList.h"
@@ -1069,7 +1070,6 @@ void smf_context::handle_pdu_session_create_sm_context_request(
   }
 
   //pending session??
-  //Step 4. check if supi is authenticated
 
   //TODO: if "Integrity Protection is required", check UE Integrity Protection Maximum Data Rate
   //TODO: (Optional) Secondary authentication/authorization
@@ -1956,6 +1956,48 @@ void smf_context::handle_pdu_session_update_sm_context_request(
       }
         break;
 
+        //PDU Session Establishment procedure
+        //PDU Session Resource Setup Unsuccessful Transfer
+      case n2_sm_info_type_e::PDU_RES_SETUP_FAIL: {
+        Logger::smf_app().info("PDU Session Resource Setup Unsuccessful Transfer");
+
+        //Ngap_PDUSessionResourceSetupUnsuccessfulTransfer
+        std::shared_ptr<Ngap_PDUSessionResourceSetupUnsuccessfulTransfer_t> decoded_msg =
+            std::make_shared<Ngap_PDUSessionResourceSetupUnsuccessfulTransfer_t>();
+        int decode_status = smf_n1_n2_inst.decode_n2_sm_information(
+            decoded_msg, n2_sm_information);
+
+        if (decode_status == RETURNerror) {
+          Logger::smf_app().warn(
+              "Decode N2 SM (Ngap_PDUSessionResourceSetupUnsuccessfulTransfer) failed!");
+          problem_details.setCause(
+              pdu_session_application_error_e2str[PDU_SESSION_APPLICATION_ERROR_N2_SM_ERROR]);
+          smContextUpdateError.setError(problem_details);
+          smf_n11_inst->send_pdu_session_update_sm_context_response(
+              smreq->http_response, smContextUpdateError,
+              Pistache::Http::Code::Forbidden);
+          return;
+        }
+
+        //Logger::smf_app().info("PDU Session Resource Setup Unsuccessful Transfer cause %d",decoded_msg->cause );
+        problem_details.setCause(
+              pdu_session_application_error_e2str[PDU_SESSION_APPLICATION_ERROR_UE_NOT_RESPONDING]);
+        smContextUpdateError.setError(problem_details);
+          refToBinaryData.setContentId(N1_SM_CONTENT_ID);
+          smContextUpdateError.setN1SmMsg(refToBinaryData);
+          //PDU Session Establishment Reject, 24.501 cause "#26 Insufficient resources"
+          smf_n1_n2_inst.create_n1_sm_container(
+              smreq->req, PDU_SESSION_ESTABLISHMENT_REJECT, n1_sm_msg,
+              cause_value_5gsm_e::CAUSE_26_INSUFFICIENT_RESOURCES);
+          smf_app_inst->convert_string_2_hex(n1_sm_msg, n1_sm_msg_hex);
+          smf_n11_inst->send_pdu_session_update_sm_context_response(
+              smreq->http_response, smContextUpdateError,
+              Pistache::Http::Code::Forbidden, n1_sm_msg_hex);
+          //TODO: Need release established resources?
+          return;
+      }
+        break;
+
         //PDU Session Modification procedure (UE-initiated, Section 4.3.3.2@3GPP TS 23.502 or SMF-Requested)(Step 2)
       case n2_sm_info_type_e::PDU_RES_MOD_RSP: {
         Logger::smf_app().info(
diff --git a/src/smf_app/smf_n1_n2.cpp b/src/smf_app/smf_n1_n2.cpp
index 6b663d40dd21cfce78da811bbbfc8ca2bf53f722..8e0087183450b3f09870f8158cf23628412e9e93 100644
--- a/src/smf_app/smf_n1_n2.cpp
+++ b/src/smf_app/smf_n1_n2.cpp
@@ -1684,3 +1684,34 @@ int smf_n1_n2::decode_n2_sm_information(
 
 }
 
+
+
+//---------------------------------------------------------------------------------------------
+int smf_n1_n2::decode_n2_sm_information(
+    std::shared_ptr<Ngap_PDUSessionResourceSetupUnsuccessfulTransfer_t> &ngap_IE,
+    std::string &n2_sm_info) {
+  Logger::smf_app().info(
+      "Decode NGAP message (Ngap_PDUSessionResourceSetupUnsuccessfulTransfer) from N2 SM Information");
+
+  unsigned int data_len = n2_sm_info.length();
+  unsigned char *data = (unsigned char*) malloc(data_len + 1);
+  memset(data, 0, data_len + 1);
+  memcpy((void*) data, (void*) n2_sm_info.c_str(), data_len);
+
+  //Ngap_PDUSessionResourceSetupUnsuccessfulTransfer
+  asn_dec_rval_t rc = asn_decode(
+      nullptr, ATS_ALIGNED_CANONICAL_PER,
+      &asn_DEF_Ngap_PDUSessionResourceSetupUnsuccessfulTransfer,
+      (void**) &ngap_IE, (void*) data, data_len);
+
+  //free memory
+  free_wrapper((void**) &data);
+
+  if (rc.code != RC_OK) {
+    Logger::smf_app().warn("asn_decode failed with code %d", rc.code);
+
+    return RETURNerror ;
+  }
+  return RETURNok ;
+
+}
diff --git a/src/smf_app/smf_n1_n2.hpp b/src/smf_app/smf_n1_n2.hpp
index e864c32a17e18f907f5c5510af1b95aea11f1f90..037200647fe609eff9957628c29d458eead48675 100644
--- a/src/smf_app/smf_n1_n2.hpp
+++ b/src/smf_app/smf_n1_n2.hpp
@@ -57,6 +57,7 @@ extern "C" {
 #include "Ngap_PDUSessionResourceSetupResponseTransfer.h"
 #include "Ngap_PDUSessionResourceModifyResponseTransfer.h"
 #include "Ngap_PDUSessionResourceReleaseResponseTransfer.h"
+#include "Ngap_PDUSessionResourceSetupUnsuccessfulTransfer.h"
 }
 
 namespace smf {
@@ -132,6 +133,17 @@ class smf_n1_n2 {
       std::shared_ptr<Ngap_PDUSessionResourceReleaseResponseTransfer_t> &ngap_IE,
       std::string &n2_sm_info);
 
+  /*
+   * Decode N2 SM Information Ngap_PDUSessionResourceSetupUnsuccessfulTransfer
+   * @param [std::shared_ptr<Ngap_PDUSessionResourceSetupUnsuccessfulTransfer_t>&] ngap_IE Store decoded NGAP message
+   * @param [std::string&] n2_sm_info N2 SM Information
+   * @return status of the decode process
+   */
+  int decode_n2_sm_information(
+      std::shared_ptr<Ngap_PDUSessionResourceSetupUnsuccessfulTransfer_t> &ngap_IE,
+      std::string &n2_sm_info);
+
+
 };
 
 }  // namespace smf