diff --git a/openair-cn/S1AP/s1ap_mme_decoder.c b/openair-cn/S1AP/s1ap_mme_decoder.c
index 156757b00f458d36db37f01d663d6e0d9330bf0b..4f77763f893d96430cb447edfd67c998ef86e4f7 100644
--- a/openair-cn/S1AP/s1ap_mme_decoder.c
+++ b/openair-cn/S1AP/s1ap_mme_decoder.c
@@ -55,89 +55,175 @@ static int s1ap_mme_decode_initiating(
 {
     int ret = -1;
 
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
     DevAssert(initiating_p != NULL);
 
+    message_string = calloc(10000, sizeof(char));
+    s1ap_string_total_size = 0;
+
     message->procedureCode = initiating_p->procedureCode;
     message->criticality   = initiating_p->criticality;
 
     switch(initiating_p->procedureCode) {
-//         case S1ap_ProcedureCode_id_downlinkNASTransport:
-//             return s1ap_decode_downlinknastransporties(&message->msg.downlinkNASTransportIEs, &initiating_p->value);
         case S1ap_ProcedureCode_id_uplinkNASTransport: {
             ret = s1ap_decode_s1ap_uplinknastransporties(
-                &message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value);
-        } break;
+                      &message->msg.s1ap_UplinkNASTransportIEs, &initiating_p->value);
+            s1ap_xer_print_s1ap_uplinknastransport(s1ap_xer__print2sp, message_string,
+                                                   message);
+        }
+        break;
+
         case S1ap_ProcedureCode_id_S1Setup: {
             ret = s1ap_decode_s1ap_s1setuprequesties(&message->msg.s1ap_S1SetupRequestIEs,
-                                                &initiating_p->value);
-//             s1ap_xer_print_s1ap_s1setuprequest(stdout, message);
-        } break;
+                    &initiating_p->value);
+            s1ap_xer_print_s1ap_s1setuprequest(s1ap_xer__print2sp, message_string, message);
+        }
+        break;
+
         case S1ap_ProcedureCode_id_initialUEMessage: {
-            ret = s1ap_decode_s1ap_initialuemessageies(&message->msg.s1ap_InitialUEMessageIEs,
-                                                  &initiating_p->value);
-//             s1ap_xer_print_s1ap_initialuemessage(stdout, message);
-        } break;
+            ret = s1ap_decode_s1ap_initialuemessageies(
+                      &message->msg.s1ap_InitialUEMessageIEs,
+                      &initiating_p->value);
+            s1ap_xer_print_s1ap_initialuemessage(s1ap_xer__print2sp, message_string,
+                                                 message);
+        }
+        break;
+
         case S1ap_ProcedureCode_id_UEContextReleaseRequest: {
             ret = s1ap_decode_s1ap_uecontextreleaserequesties(
-                &message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value);
-//             s1ap_xer_print_s1ap_uecontextreleaserequest(stdout, message);
-        } break;
+                      &message->msg.s1ap_UEContextReleaseRequestIEs, &initiating_p->value);
+            s1ap_xer_print_s1ap_uecontextreleaserequest(s1ap_xer__print2sp, message_string,
+                    message);
+        }
+        break;
+
         case S1ap_ProcedureCode_id_UECapabilityInfoIndication: {
             ret = s1ap_decode_s1ap_uecapabilityinfoindicationies(
-                &message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value);
-//             s1ap_xer_print_s1ap_uecapabilityinfoindication(stdout, message);
-        } break;
-//         case S1ap_ProcedureCode_id_InitialContextSetup:
-//             return s1ap_decode_initialcontextsetuprequesties(&message->msg.initialContextSetupRequestIEs, &initiating_p->value);
-        default:
+                      &message->msg.s1ap_UECapabilityInfoIndicationIEs, &initiating_p->value);
+            s1ap_xer_print_s1ap_uecapabilityinfoindication(s1ap_xer__print2sp,
+                    message_string, message);
+        }
+        break;
+
+        default: {
             S1AP_ERROR("Unknown procedure ID (%d) for initiating message\n",
                        (int)initiating_p->procedureCode);
-            break;
+        }
+        break;
     }
+
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG,
+                message_string_size);
+    memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
     return ret;
 }
 
 static int s1ap_mme_decode_successfull_outcome(
     s1ap_message *message, S1ap_SuccessfulOutcome_t *successfullOutcome_p)
 {
+    int ret = -1;
+
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
     DevAssert(successfullOutcome_p != NULL);
 
+    message_string = calloc(10000, sizeof(char));
+    s1ap_string_total_size = 0;
+
     message->procedureCode = successfullOutcome_p->procedureCode;
     message->criticality   = successfullOutcome_p->criticality;
 
     switch(successfullOutcome_p->procedureCode) {
-        case S1ap_ProcedureCode_id_InitialContextSetup:
-            return s1ap_decode_s1ap_initialcontextsetupresponseies(
-                       &message->msg.s1ap_InitialContextSetupResponseIEs, &successfullOutcome_p->value);
-        case S1ap_ProcedureCode_id_UEContextRelease:
-            return s1ap_decode_s1ap_uecontextreleasecompleteies(
-                       &message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value);
-        default:
-            S1AP_ERROR("Unknown procedure ID (%d) for successfull outcome message\n",
-                       (int)successfullOutcome_p->procedureCode);
-            break;
+        case S1ap_ProcedureCode_id_InitialContextSetup: {
+            ret = s1ap_decode_s1ap_initialcontextsetupresponseies(
+                      &message->msg.s1ap_InitialContextSetupResponseIEs,
+                      &successfullOutcome_p->value);
+            s1ap_xer_print_s1ap_initialcontextsetupresponse(s1ap_xer__print2sp,
+                    message_string, message);
+        }
+        break;
+        case S1ap_ProcedureCode_id_UEContextRelease: {
+            ret = s1ap_decode_s1ap_uecontextreleasecompleteies(
+                      &message->msg.s1ap_UEContextReleaseCompleteIEs, &successfullOutcome_p->value);
+            s1ap_xer_print_s1ap_uecontextreleasecomplete(s1ap_xer__print2sp,
+                    message_string, message);
+        }
+        break;
+        default: {
+            S1AP_ERROR("Unknown procedure ID (%ld) for successfull outcome message\n",
+                       successfullOutcome_p->procedureCode);
+        }
+        break;
     }
-    return -1;
+
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG,
+                message_string_size);
+    memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
+    return ret;
 }
 
 static int s1ap_mme_decode_unsuccessfull_outcome(
     s1ap_message *message, S1ap_UnsuccessfulOutcome_t *unSuccessfulOutcome_p)
 {
+    int ret = -1;
+
+    MessageDef *message_p;
+    char       *message_string = NULL;
+    size_t      message_string_size;
+
     DevAssert(unSuccessfulOutcome_p != NULL);
 
+    message_string = calloc(10000, sizeof(char));
+    s1ap_string_total_size = 0;
+
     message->procedureCode = unSuccessfulOutcome_p->procedureCode;
     message->criticality   = unSuccessfulOutcome_p->criticality;
 
     switch(unSuccessfulOutcome_p->procedureCode) {
-        case S1ap_ProcedureCode_id_InitialContextSetup:
-            return s1ap_decode_s1ap_initialcontextsetupfailureies(
-                       &message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfulOutcome_p->value);
-        default:
+        case S1ap_ProcedureCode_id_InitialContextSetup: {
+            ret = s1ap_decode_s1ap_initialcontextsetupfailureies(
+                      &message->msg.s1ap_InitialContextSetupFailureIEs, &unSuccessfulOutcome_p->value);
+            s1ap_xer_print_s1ap_initialcontextsetupfailure(s1ap_xer__print2sp,
+                    message_string, message);
+        }
+        break;
+        default: {
             S1AP_ERROR("Unknown procedure ID (%d) for unsuccessfull outcome message\n",
                        (int)unSuccessfulOutcome_p->procedureCode);
-            break;
+        }
+        break;
     }
-    return -1;
+
+    message_string_size = strlen(message_string);
+
+    message_p = itti_alloc_new_message_sized(TASK_S1AP, GENERIC_LOG,
+                message_string_size);
+    memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size);
+
+    itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p);
+
+    free(message_string);
+
+    return ret;
 }
 
 int s1ap_mme_decode_pdu(s1ap_message *message, uint8_t *buffer, uint32_t len)