diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h
index 6f66fb647f9931e2377f62cc4f188fef81b39ca9..bdbd73b609769171f81c3bbc223d1ac0cc43a70a 100644
--- a/openair2/COMMON/rrc_messages_def.h
+++ b/openair2/COMMON/rrc_messages_def.h
@@ -7,6 +7,7 @@
 
 //-------------------------------------------------------------------------------------------//
 // Messages for RRC logging
+#if defined(DISABLE_ITTI_XER_PRINT)
 MESSAGE_DEF(RRC_DL_BCCH_MESSAGE,        MESSAGE_PRIORITY_MED_PLUS,  RrcDlBcchMessage,           rrc_dl_bcch_message)
 MESSAGE_DEF(RRC_DL_CCCH_MESSAGE,        MESSAGE_PRIORITY_MED_PLUS,  RrcDlCcchMessage,           rrc_dl_ccch_message)
 MESSAGE_DEF(RRC_DL_DCCH_MESSAGE,        MESSAGE_PRIORITY_MED_PLUS,  RrcDlDcchMessage,           rrc_dl_dcch_message)
@@ -15,6 +16,7 @@ MESSAGE_DEF(RRC_UE_EUTRA_CAPABILITY,    MESSAGE_PRIORITY_MED_PLUS,  RrcUeEutraCa
 
 MESSAGE_DEF(RRC_UL_CCCH_MESSAGE,        MESSAGE_PRIORITY_MED_PLUS,  RrcUlCcchMessage,           rrc_ul_ccch_message)
 MESSAGE_DEF(RRC_UL_DCCH_MESSAGE,        MESSAGE_PRIORITY_MED_PLUS,  RrcUlDcchMessage,           rrc_ul_dcch_message)
+#endif
 
 //-------------------------------------------------------------------------------------------//
 // Messages between NAS and RRC layers
diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h
index 2f48582636fbd43293fcb883a61fe093e8906c3a..252e71d3df2d762539b0ef1017d87983041aa896 100644
--- a/openair2/COMMON/rrc_messages_types.h
+++ b/openair2/COMMON/rrc_messages_types.h
@@ -12,6 +12,7 @@
 
 //-------------------------------------------------------------------------------------------//
 // Messages for RRC logging
+#if defined(DISABLE_ITTI_XER_PRINT)
 #include "BCCH-DL-SCH-Message.h"
 #include "DL-CCCH-Message.h"
 #include "DL-DCCH-Message.h"
@@ -25,6 +26,7 @@ typedef DL_DCCH_Message_t       RrcDlDcchMessage;
 typedef UE_EUTRA_Capability_t   RrcUeEutraCapability;
 typedef UL_CCCH_Message_t       RrcUlCcchMessage;
 typedef UL_DCCH_Message_t       RrcUlDcchMessage;
+#endif
 
 //-------------------------------------------------------------------------------------------//
 // Defines to access message fields.
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index b2f2ce7a54f334664aff39fbfb1778888f7ac90c..f73d04ca96b1ab596086b1c95b4f69fecc373cac 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -114,6 +114,29 @@ uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8},    // CellI
 				                      {8,0,5,9,17,12},  // CellId 7
 				                      {15,1,0,7,12,10}};// CellId 8
 
+/*
+ * This is a helper function for xer_sprint, which directs all incoming data
+ * into the provided string.
+ */
+static int xer__print2s (const void *buffer, size_t size, void *app_key)
+{
+    char *string = (char *) app_key;
+
+    strncat(string, buffer, size);
+
+    return 0;
+}
+
+int xer_sprint (char *string, asn_TYPE_descriptor_t *td, void *sptr)
+{
+    asn_enc_rval_t er;
+
+    er = xer_encode(td, sptr, XER_F_BASIC, xer__print2s, string);
+    if (er.encoded == -1)
+        return -1;
+
+    return 0;
+}
 
 uint16_t get_adjacent_cell_id(uint8_t Mod_id,uint8_t index) {
   return(two_tier_hexagonal_adjacent_cellIds[Mod_id][index]);
@@ -1982,7 +2005,7 @@ OAI_UECapability_t *fill_ue_capability() {
   				   MAX_UE_CAPABILITY_SIZE);
 
 #if defined(ENABLE_ITTI)
-  /* Test code */
+# if defined(DISABLE_XER_SPRINT)
   {
     MessageDef *message_p;
 
@@ -1991,6 +2014,27 @@ OAI_UECapability_t *fill_ue_capability() {
 
     itti_send_msg_to_task (TASK_UNKNOWN, NB_eNB_INST, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(10000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_UE_EUTRA_Capability, (void *)UE_EUTRA_Capability) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_UE, 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);
+    }
+  }
+# endif
 #endif
 
   UECapability.sdu_size = (enc_rval.encoded + 7) / 8;
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
index e3e70b6b45e09a33b5419fe4b186b98402346373..a3a5adfefe5df661ffb6a1aa7da0d17b57fe1a38 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
@@ -53,6 +53,16 @@
 
 #include "RRC/LITE/defs.h"
 
+/*
+ * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC)
+ * output into the chosen string buffer.
+ * RETURN VALUES:
+ *       0: The structure is printed.
+ *      -1: Problem printing the structure.
+ * WARNING: No sensible errno value is returned.
+ */
+int xer_sprint(char *string, struct asn_TYPE_descriptor_s *td, void *sptr);
+
 uint16_t get_adjacent_cell_id(uint8_t Mod_id,uint8_t index);
 
 u8 get_adjacent_cell_mod_id(uint16_t phyCellId);
diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c
index 529e002f792548dbf4607a0c0eb1cd29a288408c..cb97ffd426b3a2e9beb8c9b7ed94c11670231ca8 100644
--- a/openair2/RRC/LITE/rrc_UE.c
+++ b/openair2/RRC/LITE/rrc_UE.c
@@ -332,6 +332,7 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){
 #endif
 
 #if defined(ENABLE_ITTI)
+# if defined(DISABLE_ITTI_XER_PRINT)
   {
     MessageDef *message_p;
 
@@ -340,6 +341,27 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){
 
     itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(10000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_DL_CCCH_Message, (void *)dl_ccch_msg) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, 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);
+    }
+  }
+# endif
 #endif
 
   if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) {
@@ -1337,6 +1359,7 @@ void  rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index)
 #endif
 
 #if defined(ENABLE_ITTI)
+# if defined(DISABLE_ITTI_XER_PRINT)
   {
     MessageDef *message_p;
 
@@ -1345,6 +1368,27 @@ void  rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index)
 
     itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(20000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_DL_DCCH_Message, (void *)dl_dcch_msg) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_UE, 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);
+    }
+  }
+# endif
 #endif
 
   if (dl_dcch_msg->message.present == DL_DCCH_MessageType_PR_c1) {
@@ -1506,6 +1550,7 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le
     //  xer_fprint(stdout,  &asn_DEF_BCCH_DL_SCH_Message, (void*)&bcch_message);
 
 #if defined(ENABLE_ITTI)
+# if defined(DISABLE_ITTI_XER_PRINT)
   {
     MessageDef *message_p;
 
@@ -1514,6 +1559,27 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le
 
     itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(10000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_UE, 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);
+    }
+  }
+# endif
 #endif
 
     if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) {
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index 63fe56420d3b99685371773e31f59007b2484be6..a96514b211e58095eabfbc9f0ceb1055d8e204f3 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -2504,6 +2504,7 @@ int rrc_eNB_decode_ccch (u8 Mod_id, u32 frame, SRB_INFO * Srb_info)
                  (uint8_t *) Srb_info->Rx_buffer.Payload, 100, 0, 0);
 
 #if defined(ENABLE_ITTI)
+# if defined(DISABLE_ITTI_XER_PRINT)
   {
     MessageDef *message_p;
 
@@ -2512,6 +2513,27 @@ int rrc_eNB_decode_ccch (u8 Mod_id, u32 frame, SRB_INFO * Srb_info)
 
     itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(10000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_UL_CCCH_Message, (void *)ul_ccch_msg) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, 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);
+    }
+  }
+# endif
 #endif
 
 for (i = 0; i < 8; i++)
@@ -2699,6 +2721,7 @@ int rrc_eNB_decode_dcch (u8 Mod_id, u32 frame, u8 Srb_id, u8 UE_index,
                           (void **) &ul_dcch_msg, Rx_sdu, sdu_size, 0, 0);
 
 #if defined(ENABLE_ITTI)
+# if defined(DISABLE_ITTI_XER_PRINT)
   {
     MessageDef *message_p;
 
@@ -2707,6 +2730,27 @@ int rrc_eNB_decode_dcch (u8 Mod_id, u32 frame, u8 Srb_id, u8 UE_index,
 
     itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p);
   }
+# else
+  {
+    char       *message_string = NULL;
+
+    message_string = calloc(10000, sizeof(char));
+
+    if (xer_sprint(message_string, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg) >= 0)
+    {
+      MessageDef *message_p;
+      size_t      message_string_size;
+
+      message_string_size = strlen(message_string);
+      message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, 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);
+    }
+  }
+# endif
 #endif
 
   for (i = 0; i < sdu_size; i++)
diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.h b/openair2/RRC/LITE/rrc_eNB_S1AP.h
index 9f4045b60c56aac000852d494934c2c135643654..f84176ad0cb9dde3d7c9a362e6cb3d555d3e56b6 100644
--- a/openair2/RRC/LITE/rrc_eNB_S1AP.h
+++ b/openair2/RRC/LITE/rrc_eNB_S1AP.h
@@ -12,6 +12,8 @@
 
 # if defined(ENABLE_USE_MME)
 
+#include "UL-DCCH-Message.h"
+
 /* Up link procedures */
 
 #   if defined(ENABLE_ITTI)
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index 34e53aa74301723993d0cd6cd7b3f41f19658c72..6ba183ec48fa895ef9fe73fb02e3113fd8450a5f 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -403,6 +403,7 @@ int itti_create_task_successful(void){
 #endif  
   return 1;
 }
+
 /*
  * later, the enb task will be moved from here
  */
@@ -430,7 +431,7 @@ void *eNB_app_task(void *args_p) {
       //note:  there is an implicit relationship between the data struct and the message name
       message_p = itti_alloc_new_message(TASK_ENB_APP, S1AP_REGISTER_ENB);
       
-      s1ap_register_eNB = &message_p->msg.s1ap_register_eNB;
+      s1ap_register_eNB = &message_p->ittiMsg.s1ap_register_eNB;
       
       hash = s1ap_generate_eNB_id();
 
@@ -489,6 +490,7 @@ void *eNB_app_task(void *args_p) {
 #endif
 return NULL;
 }
+
 void *l2l1_task(void *args_p) {
   // Framing variables
   s32 slot, last_slot, next_slot;