diff --git a/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
new file mode 100644
index 0000000000000000000000000000000000000000..53261ec32de1b7b5bed2316fd7bdc08445257f4e
--- /dev/null
+++ b/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf
@@ -0,0 +1,418 @@
+Active_eNBs = ( "eNB-Eurecom-LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB-Eurecom-LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code = 1;
+    plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
+
+    tr_s_preference     = "local_mac"
+
+    ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "3GPP_eNODEB";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2680000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 25;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      pbch_repetition                                 = "FALSE";
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 0;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 0;
+      pdsch_referenceSignalPower 			      = -27;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+      ue_TransmissionMode                                    = 1;
+
+      //Parameters for SIB18
+      rxPool_sc_CP_Len                                       = "normal";
+      rxPool_sc_Period                                       = "sf40";
+      rxPool_data_CP_Len                                     = "normal";
+      rxPool_ResourceConfig_prb_Num                          = 20;
+      rxPool_ResourceConfig_prb_Start                        = 5;
+      rxPool_ResourceConfig_prb_End                          = 44;
+      rxPool_ResourceConfig_offsetIndicator_present          = "prSmall";
+      rxPool_ResourceConfig_offsetIndicator_choice           = 0;
+      rxPool_ResourceConfig_subframeBitmap_present           = "prBs40";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_buf              = "00000000000000000000";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_size             = 5;
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused      = 0;
+/*    rxPool_dataHoppingConfig_hoppingParameter                       = 0;
+      rxPool_dataHoppingConfig_numSubbands                            = "ns1";
+      rxPool_dataHoppingConfig_rbOffset                               = 0;
+      rxPool_commTxResourceUC-ReqAllowed                              = "TRUE";
+*/
+      // Parameters for SIB19
+      discRxPool_cp_Len                                               = "normal"
+      discRxPool_discPeriod                                           = "rf32"
+      discRxPool_numRetx                                              = 1;
+      discRxPool_numRepetition                                        = 2;
+      discRxPool_ResourceConfig_prb_Num                               = 5;
+      discRxPool_ResourceConfig_prb_Start                             = 3;
+      discRxPool_ResourceConfig_prb_End                               = 21;
+      discRxPool_ResourceConfig_offsetIndicator_present               = "prSmall";
+      discRxPool_ResourceConfig_offsetIndicator_choice                = 0;
+      discRxPool_ResourceConfig_subframeBitmap_present                = "prBs40";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf          = "f0ffffffff";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_size         = 5;
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused  = 0;
+
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "CI_MME_IP_ADDR";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    enable_measurement_reports = "no";
+
+    ///X2
+    enable_x2 = "no";
+    t_reloc_prep      = 1000;      /* unit: millisecond */
+    tx2_reloc_overall = 2000;      /* unit: millisecond */
+
+ ////////// MCE parameters:
+    target_mce_m2_ip_address      = ( { ipv4       = "127.0.0.7";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    ///M2
+    enable_enb_m2 = "yes";
+   
+
+    mbms_configuration_data_list = (
+                {
+                        mbsfn_sync_area = 0x0001;
+                        mbms_service_area_list=(
+                                {
+                                        mbms_service_area=0x0001;
+                                }
+                        );
+                }
+
+    );
+
+
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "CI_ENB_IP_ADDR";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+
+        ENB_IPV4_ADDRESS_FOR_M2C                 = "127.0.0.2/24";
+        ENB_PORT_FOR_M2C                         = 36443; # Spec 36443
+    };
+  }
+);
+
+MACRLCs = (
+	{
+	num_cc = 1;
+	tr_s_preference = "local_L1";
+	tr_n_preference = "local_RRC";
+	phy_test_mode = 0;
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
+        }
+);
+
+L1s = (
+      {
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+      }
+);
+
+MCEs = (
+        {
+            MCE_ID    =  0xe00;
+
+            MCE_name  =  "MCE-Vicomtech-LTEBox";
+
+            //M2
+            enable_mce_m2 = "yes";
+
+            //M3
+            enable_mce_m3 = "yes";
+
+            target_mme_m3_ip_address      = ( { ipv4       = "127.0.0.18";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+
+
+            NETWORK_INTERFACES :
+            {
+                MCE_INTERFACE_NAME_FOR_M2_ENB            = "lo";
+                MCE_IPV4_ADDRESS_FOR_M2C                 = "127.0.0.7/24";
+                MCE_PORT_FOR_M2C                         = 36443; # Spec 36443
+
+                MCE_INTERFACE_NAME_FOR_M3_MME            = "lo";
+                MCE_IPV4_ADDRESS_FOR_M3C                 = "127.0.0.3/24";
+                MCE_PORT_FOR_M3C                         = 36444; # Spec 36444
+            };
+
+            plnm:
+            {
+                mcc = 208;
+                mnc = 93;
+                mnc_length = 2;
+            };
+
+            mbms_sched_info :
+            {
+                mcch_update_time = 10;
+                mbms_area_config_list = (
+                {
+                   common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
+                   mbms_area_id = 0;
+                   pmch_config_list = (
+                   {
+                        allocated_sf_end=32;
+                        data_mcs=14;
+                        mch_scheduling_period = 0; #rf8(0)
+                        mbms_session_list = (
+                        {
+                                #plnm + service_id ->tmgi
+                               plnm:
+                                {
+                                    mcc = 208;
+                                    mnc = 93;
+                                    mnc_length = 2;
+                                }
+                                service_id=0; #keep this allways as 0 (workaround for TUN if)
+                                lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
+                        }
+                        );
+                   }
+                   );
+
+                   mbms_sf_config_list = (
+                   {
+                        radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
+                        radioframe_alloocation_offset=0;
+                        num_frame="oneFrame";
+                        subframe_allocation=57; #xx111001
+                        //num_frame="fourFrame";
+                        //subframe_allocation=14548987; #
+                   }
+                   );
+
+                }
+                );
+            };
+
+
+            mcch_config_per_mbsfn_area = (
+            {
+                mbsfn_area                = 0;
+                pdcch_length              = 1; #s1(0), s2(1)
+                repetition_period         = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
+                offset                    = 0;
+                modification_period       = 0; #rf512(0; rf1024(1)
+                subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
+                mcs                       = 1; #n2(0), n7(1), n13(2), n19(3)
+            }
+            );
+
+                  #);  #end mbms_scheduling_info
+
+        }
+);
+
+MMEs = (
+        {
+            MME_ID    =  0xe00;
+
+            MME_name  =  "MME-MBMS-Vicomtech-LTEBox";
+
+            //M3
+            enable_mme_m3 = "yes";
+            NETWORK_INTERFACES :
+            {
+                MME_INTERFACE_NAME_FOR_M3_MCE            = "lo";
+                MME_IPV4_ADDRESS_FOR_M3C                 = "127.0.0.18/24";
+                MME_PORT_FOR_M3C                         = 36444; # Spec 36444
+
+            };
+        }
+);
+
+
+RUs = (
+    {
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [7];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 125;
+         eNB_instances  = [0];
+
+    }
+);
+
+THREAD_STRUCT = (
+  {
+    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+    parallel_config    = "PARALLEL_SINGLE_THREAD";
+    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+    worker_config      = "WORKER_ENABLE";
+  }
+);
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "ens3";
+    FLEXRAN_IPV4_ADDRESS   = "CI_FLEXRAN_CTL_IP_ADDR";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
+
+     log_config :
+     {
+       global_log_level                      ="info";
+       global_log_verbosity                  ="medium";
+       hw_log_level                          ="info";
+       hw_log_verbosity                      ="medium";
+       phy_log_level                         ="info";
+       phy_log_verbosity                     ="medium";
+       mac_log_level                         ="info";
+       mac_log_verbosity                     ="high";
+       rlc_log_level                         ="info";
+       rlc_log_verbosity                     ="medium";
+       pdcp_log_level                        ="info";
+       pdcp_log_verbosity                    ="medium";
+       rrc_log_level                         ="info";
+       rrc_log_verbosity                     ="medium";
+    };
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
index 412cd3fbef11030d2a14b69c14c217d417c807ee..2fd84f563cce242bff6367c7849ade59866adbdd 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
@@ -547,10 +547,10 @@ int rx_pdsch(PHY_VARS_UE *ue,
                                pdsch_vars[eNB_id]->log2_maxh,
                                measurements); // log2_maxh+I0_shift
 
-    if (symbol == 5) {
-      LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-    }
-
+//    if (symbol == 5) {
+//      LOG_M("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
+//    }
+//
     if ((rx_type==rx_IC_single_stream) &&
         (eNB_id_i<ue->n_connected_eNB)) {
       dlsch_channel_compensation(pdsch_vars[eNB_id_i]->rxdataF_ext,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index 2d308430a5ebeae5633b438b0ebd1f880a0e6d69..e351b69bb0980e8905941e303da62a90146781fb 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -48,11 +48,11 @@
 #include "pdcp.h"
 #include "assertions.h"
 
-#if defined(ENABLE_ITTI)
-  #include "intertask_interface.h"
-#endif
-
-#include "SIMULATION/TOOLS/sim.h" // for taus
+//#if defined(ENABLE_ITTI)
+//#include "intertask_interface.h"
+//#endif
+//
+#include "SIMULATION/TOOLS/sim.h"	// for taus
 
 #define ENABLE_MAC_PAYLOAD_DEBUG
 #define DEBUG_eNB_SCHEDULER 1
@@ -60,37 +60,38 @@
 
 extern RAN_CONTEXT_t RC;
 
-
-int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id, uint8_t mbsfn_sync_area) {
-  // currently there is one-to-one mapping between sf allocation pattern and sync area
-  if (mbsfn_sync_area >= MAX_MBSFN_AREA) {
-    LOG_W(MAC,
-          "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
-          module_idP, CC_id, mbsfn_sync_area);
-    return -1;
-  } else if (RC.mac[module_idP]->
-             common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
-             != NULL) {
-    return mbsfn_sync_area;
-  } else {
-    LOG_W(MAC,
-          "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
-          module_idP, CC_id, mbsfn_sync_area);
-    return -1;
-  }
+int8_t
+get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
+		       uint8_t mbsfn_sync_area)
+{
+    // currently there is one-to-one mapping between sf allocation pattern and sync area
+    if (mbsfn_sync_area > MAX_MBSFN_AREA) {
+	LOG_W(MAC,
+	      "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
+	      module_idP, CC_id, mbsfn_sync_area);
+	return -1;
+    } else if (RC.mac[module_idP]->
+	       common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
+	       != NULL) {
+	return mbsfn_sync_area;
+    } else {
+	LOG_W(MAC,
+	      "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
+	      module_idP, CC_id, mbsfn_sync_area);
+	return -1;
+    }
 }
 
 static uint32_t bytes_in_buffer=0;
-static uint8_t msi_pmch_stop=0;
+static uint32_t msi_pmch_stop=0;
 //static uint8_t msi_active=0;
 //static uint8_t msi_pmch_stop2=0;
 uint16_t mbms_rab_id = 2047;
-static uint8_t msi_sfs=0;
+static uint32_t msi_sfs=0;
 
 
 //MSI_ELEMENT * ptr =NULL;
 
-
 int
 schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	      sub_frame_t subframeP)
@@ -121,8 +122,9 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
     int mcch_mcs = -1;
     uint16_t TBS, j = -1, padding = 0, post_padding = 0;
     mac_rlc_status_resp_t rlc_status;
+    //mac_rlc_status_resp_t rlc_status2;
     int num_mtch;
-    int msi_length, i, k;
+    int msi_length=0, i, k;
     //uint8_t l =0;
     unsigned char sdu_lcids[11], num_sdus = 0, offset = 0;
     uint16_t sdu_lengths[11], sdu_length_total = 0;
@@ -511,9 +513,11 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
     // 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC
 
     // there is MSI (MCH Scheduling Info)
+    uint16_t msi_control_element[29], *msi_ptr;
+    char *buffer_pointer=NULL;
     if (msi_flag == 1) {
 	// Create MSI here
-	uint16_t msi_control_element[29], *msi_ptr;
+	//uint16_t msi_control_element[29], *msi_ptr;
 
 	msi_ptr = &msi_control_element[0];
 	//((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID;	//MCCH
@@ -543,9 +547,11 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	    	msi_pmch_stop = msi_sfs-1;
 	    else 
 		msi_pmch_stop = msi_sfs;
+	
+    	    msi_pmch_stop = msi_sfs;
 
-	    if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
-		   LOG_W(MAC,"e-MBMS Buffer Overflow\n"); 
+	    //if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
+		   //LOG_W(MAC,"e-MBMS Buffer Overflow\n"); 
 
 	    if(msi_pmch_stop>=num_sf_alloc /*&& msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9*/)  {
 	        ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;	// last subframeP of this mtch (only one mtch now) & stop_sf limited to 256
@@ -584,6 +590,8 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	memcpy((char *) &mch_buffer[sdu_length_total],
 	       msi_control_element, msi_length);
 
+	buffer_pointer = (char *) &mch_buffer[sdu_length_total];
+
 	sdu_lcids[num_sdus] = MCH_SCHDL_INFO;
 	sdu_lengths[num_sdus] = msi_length;
 	sdu_length_total += sdu_lengths[num_sdus];
@@ -594,12 +602,26 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
     }
     // there is MCCH
     if (mcch_flag == 1) {
+
+		//LOG_E(MAC,
+	      //"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE COUNTING (mod %d)\n",module_idP, CC_id, frameP, subframeP,frameP%2==0);
+	if(1/*frameP%2==0*/){
 	LOG_D(MAC,
 	      "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n",
 	      module_idP, CC_id, frameP, subframeP, i, j);
 
-	mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0], 
+		mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 0xFFFC, 1, &cc->MCCH_pdu.payload[0], 
 					   i);	// this is the mbsfn sync area index
+	}
+	else{
+		LOG_E(MAC,
+	      "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE COUNTING (area %d, sfAlloc %d)\n",
+	      module_idP, CC_id, frameP, subframeP, i, j);
+
+//
+//		mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH_COUNTING, 0xFFFC, 1, &cc->MCCH_pdu.payload[0], 
+//					   i);	// this is the mbsfn sync area index
+	}
 
         mcch_sdu_length+=1; //RLC ?
 
@@ -629,6 +651,15 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	    sdu_lcids[num_sdus] = MCCH_LCHANID;
 	    sdu_lengths[num_sdus] = mcch_sdu_length;
 
+	   // LOG_W(MAC,"MCCH RLC %x:",(unsigned char)mch_buffer[sdu_length_total]);
+	   // for (int kk = 7; kk >= 0; kk--)
+	   // {
+    	   //     printf("%d",(((unsigned char)mch_buffer[sdu_length_total]) >> kk) & 1 ? '1' : '0');
+	   // }
+	   // printf("\n");
+	    //mch_buffer[sdu_length_total] = (unsigned char)0;
+
+
 	    if (sdu_lengths[num_sdus] > 128) {
 		header_len_mcch = 3;
 	    }
@@ -641,6 +672,7 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	}
     }
 
+
     TBS =
 	get_TBS_DL(/*cc->pmch_Config[0]->dataMCS_r9*/cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth));
     // do not let mcch and mtch multiplexing when relaying is active
@@ -686,7 +718,7 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	mbms_rab_id = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9;
 
 	rlc_status =
-	    mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
+	    mac_rlc_status_ind(module_idP, 0/*0xfffd*/, frameP, subframeP,
 			       module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
 				cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9,
 			       //MTCH,
@@ -697,36 +729,77 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	bytes_in_buffer = rlc_status.bytes_in_buffer;
 
 
-	msi_sfs = rlc_status.bytes_in_buffer/TBS+(rlc_status.bytes_in_buffer%TBS?1:0);
+	if( !(mcch_flag==1 || msi_flag==1) )
+		msi_sfs = rlc_status.bytes_in_buffer/(TBS- header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)+(rlc_status.bytes_in_buffer%(TBS- header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)?1:0);
+	//uint16_t msi_control_element[29], *msi_ptr;
+	//
+	//
+       uint16_t TBS_MTCH =
+	get_TBS_DL(cc->pmch_Config[0]->dataMCS_r9, to_prb(cc->mib->message.dl_Bandwidth));
+	if(msi_flag==1 && buffer_pointer!=NULL){
+		msi_ptr = &msi_control_element[0];
+
+	    //memcpy(buffer_pointer,
+	     //  msi_control_element, msi_length);
+
+	   // msi_pmch_stop = rlc_status.bytes_in_buffer/TBS+(rlc_status.bytes_in_buffer%TBS?1:0);
+	    msi_pmch_stop = (rlc_status.bytes_in_buffer - header_len_mcch - header_len_msi -sdu_length_total - header_len_mtch)/(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)+((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0);
+
+	    if( msi_pmch_stop > cc->pmch_Config[0]->sf_AllocEnd_r9)
+		   LOG_E(MAC,"e-MBMS Buffer Overflow\n"); 
+	    if(msi_pmch_stop>=num_sf_alloc /*&& msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9*/)  {
+	        ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0;	// last subframeP of this mtch (only one mtch now) & stop_sf limited to 256
+	    	//((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = msi_pmch_stop;
+	    	((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
+	        msi_pmch_stop = (msi_pmch_stop <=cc->pmch_Config[0]->sf_AllocEnd_r9 ? msi_pmch_stop: cc->pmch_Config[0]->sf_AllocEnd_r9);
+	    }else{
+	    	((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7;	// last subframeP of this mtch (only one mtch now)
+	    	((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xFF; 
+	        msi_pmch_stop=0;
+	    }
+	    LOG_I(MAC,"frameP %d, subframeP %d rlc_status.bytes_in_buffer %d stop_sf_LSB %d\n",frameP,subframeP,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB);
+	    //LOG_W(MAC,"frameP %d, subframeP %d rlc_status.bytes_in_buffer %d stop_sf_LSB %d msi_calc:%d remainder %d\n",frameP,subframeP,rlc_status.bytes_in_buffer,((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB,rlc_status.bytes_in_buffer/(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)+((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0),((rlc_status.bytes_in_buffer-TBS-header_len_mcch - header_len_msi -sdu_length_total)%(TBS_MTCH/*- header_len_mcch - header_len_msi -sdu_length_total*/ - header_len_mtch)?0:0));
+
+	    memcpy(buffer_pointer,
+	       msi_control_element, msi_length);
+
+	}
 
 	LOG_D(MAC,
-	      "e-MBMS log channel %u frameP %d, subframeP %d,  rlc_status.bytes_in_buffer is %d TBS %d pmch_stop %d msi_sfs %d\n",
-	      MTCH, frameP, subframeP, rlc_status.bytes_in_buffer,TBS,msi_pmch_stop,msi_sfs);
+	      "e-MBMS log channel %u frameP %d, subframeP %d,  rlc_status.bytes_in_buffer is %d TBS_MTCH %d pmch_stop %d msi_sfs %d\n",
+	      MTCH, frameP, subframeP, rlc_status.bytes_in_buffer,TBS_MTCH,msi_pmch_stop,msi_sfs);
 
-	if (rlc_status.bytes_in_buffer > 0 ||  msi_pmch_stop > 0  /*msi_pmch_stop>=num_sf_alloc*/ ) {
+	if ((rlc_status.bytes_in_buffer > 0 &&  msi_pmch_stop > 0) && ((msi_flag!=1 || mcch_flag!=1)) /*|| (rlc_status.bytes_in_buffer > 0 && (msi_flag==1 || mcch_flag==1))*//*|| msi_sfs > cc->pmch_Config[0]->sf_AllocEnd_r9 */ /*msi_pmch_stop>=num_sf_alloc*/ ) {
 	    //if(rlc_status.bytes_in_buffer > 0){
-	    LOG_I(MAC,
+	    LOG_D(MAC,
 		  "[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d) rlc_status.bytes_in_buffer %d\n",
 		  module_idP, CC_id, frameP,
 		  TBS - header_len_mcch - header_len_msi -
 		  sdu_length_total - header_len_mtch, header_len_mtch, rlc_status.bytes_in_buffer);
 
-	    sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0,	//not used
+	    sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0/*0xfffd*/, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0,	//not used
 						     (char *)
 						     &mch_buffer[sdu_length_total]
                                 ,0,
                                  0
                                  );
+
+	   // LOG_I(MAC,"RLC %x:",(unsigned char)mch_buffer[sdu_length_total]);
+	   // for (int kk = 7; kk >= 0; kk--)
+	   // {
+    	   //     printf("%d",(((unsigned char)mch_buffer[sdu_length_total]) >> kk) & 1 ? '1' : '0');
+	   // }
+	   // printf("\n");
 	
 	    //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO,  MTCH+(MAX_NUM_RB*(MAX_MOBILES_PER_ENB+1)), (char*)&mch_buffer[sdu_length_total]);
-	    LOG_I(MAC,
+	    LOG_D(MAC,
 		  "[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d msi_pmch_stop %d msi_sfs %d sdu_lengths[num_sdus] %d\n",
 		  module_idP, CC_id, sdu_lengths[num_sdus], MTCH,msi_pmch_stop,msi_sfs, sdu_lengths[num_sdus]);
 	    cc->mtch_active = 1;
 	    sdu_lcids[num_sdus] = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9/*MTCH*/;
 	    sdu_length_total += sdu_lengths[num_sdus];
 
-	    if (msi_pmch_stop != 0)
+	    if (msi_pmch_stop != 0 && msi_flag !=1)
 	    	msi_pmch_stop--;
 
 
@@ -833,14 +906,14 @@ schedule_MBMS_NFAPI(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	}
 
 	/* Tracing of PDU is done on UE side */
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff,	// M_RNTI = 6 in wirehsark
+	//if (opt_enabled == 1) {
+	    trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xfffd,	// M_RNTI = 6 in wirehsark
 		      RC.mac[module_idP]->frame,
 		      RC.mac[module_idP]->subframe, 0, 0);
 	    LOG_D(OPT,
 		  "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
 		  module_idP, CC_id, frameP, TBS);
-	}
+	//}
 
        	eNB_MAC_INST *eNB = RC.mac[module_idP];
     	dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
@@ -1370,7 +1443,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	    header_len_msi = 3;
 	}
 
-	LOG_D(MAC,
+	LOG_W(MAC,
 	      "[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes TBS %d, bytes in buffer %d stop_sf_LSB %d msi_sfs %d cc->pmch_Config[0]->sf_AllocEnd_r9 %ld\n",
 	      module_idP, CC_id, frameP, msi_length,TBS, bytes_in_buffer,msi_pmch_stop,msi_sfs,cc->pmch_Config[0]->sf_AllocEnd_r9);
 	    
@@ -1485,7 +1558,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	mbms_rab_id = cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9;
 
 	rlc_status =
-	    mac_rlc_status_ind(module_idP, 0, frameP, subframeP,
+	    mac_rlc_status_ind(module_idP, 0/*0xfffd*/, frameP, subframeP,
 			       module_idP, ENB_FLAG_YES, MBMS_FLAG_YES,
 				cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9,
 			       //MTCH,
@@ -1510,7 +1583,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 		  TBS - header_len_mcch - header_len_msi -
 		  sdu_length_total - header_len_mtch, header_len_mtch, rlc_status.bytes_in_buffer);
 
-	    sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0,	//not used
+	    sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0/*0xfffd*/, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES,cc->mbms_SessionList[0]->list.array[0]->logicalChannelIdentity_r9, 0,	//not used
 						     (char *)
 						     &mch_buffer[sdu_length_total]
                                 ,0,
@@ -1632,14 +1705,14 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	}
 
 	/* Tracing of PDU is done on UE side */
-	if (opt_enabled == 1) {
+	//if (opt_enabled == 1) {
 	    trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff,	// M_RNTI = 6 in wirehsark
 		      RC.mac[module_idP]->frame,
 		      RC.mac[module_idP]->subframe, 0, 0);
 	    LOG_D(OPT,
 		  "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n",
 		  module_idP, CC_id, frameP, TBS);
-	}
+	//}
 
 	/*
 	   for (j=0;j<sdu_length_total;j++)
@@ -1669,12 +1742,12 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
      */
 }
 
-
 MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
-                     sub_frame_t subframeP) {
-  //  RC.mac[module_idP]->MCH_pdu.mcs=0;
-  //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
-  //#warning "MCH pdu should take the CC_id index"
-  return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
+		     sub_frame_t subframeP)
+{
+    //  RC.mac[module_idP]->MCH_pdu.mcs=0;
+    //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
+//#warning "MCH pdu should take the CC_id index"
+    return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
 }
 
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index d4277917ebe6f60bf0ad88b8b11c69611b26c1c8..1244125bb683c9573eab6663cf5929454c53ae13 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -746,6 +746,9 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
   LOG_D(MAC, "[UE %d] parse_mch_header, found %d sdus\n", module_idP,
         num_sdu);
 
+  if(sdu[0]==0 && sdu[1]==0)
+        num_sdu=0;
+
   for (i = 0; i < num_sdu; i++) {
     if (rx_lcids[i] == MCH_SCHDL_INFO) {
       if (rx_lengths[i] & 0x01) {