diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index a1a8b713ccce1523dd0129c3f2e00420861d78aa..8ae6b957dc089e99b43159d162b96a911f0e72f6 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -392,7 +392,7 @@ void schedule_ue_spec(module_id_t   module_idP,
   uint8_t               dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
   unsigned char         rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX];
   uint16_t              pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
-  int                   mcs;
+  int                   mcs,mcs2;
   uint16_t              min_rb_unit[MAX_NUM_CCs];
   short                 ta_update        = 0;
   eNB_MAC_INST         *eNB      = &eNB_mac_inst[module_idP];
@@ -1093,6 +1093,122 @@ void schedule_ue_spec(module_id_t   module_idP,
 	      }
 	    }
 	    break;
+	  case 3:
+	    if (frame_parms[CC_id]->frame_type == TDD) {
+	      switch (frame_parms[CC_id]->N_RB_DL) {
+	      case 6:
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0;
+
+		// deactivate TB2
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1;
+
+		((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->dai      = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3;
+		break;
+	      case 25:
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->dai      = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3;
+
+		// deactivate TB2
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1;
+
+		LOG_D(MAC,"Format1 DCI: harq_pid %d, ndi %d\n",harq_pid,((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1);
+		break;
+	      case 50:
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0;
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->dai      = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3;
+
+		// deactivate TB2
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      case 100:
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0;
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->dai      = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3;
+
+		// deactivate TB2
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      default:
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->dai      = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3;
+
+		// deactivate TB2
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      }
+	    }
+	    else {
+	      switch (frame_parms[CC_id]->N_RB_DL) {
+	      case 6:
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0;
+
+		// deactivate TB2
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      case 25:
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0;
+
+		// deactivate TB2
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      case 50:
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0;
+		// deactivate TB2
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      case 100:
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0;
+		// deactivate TB2
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      default:
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs1 = mcs;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0;
+
+		// deactivate TB2
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0;
+		((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1;
+		break;
+	      }
+	    }
+	    break;
 	  case 4:
 	    //  if (nb_rb>10) {
 	    ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs;
@@ -1860,6 +1976,91 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
 			  0);
 
 	  break;
+
+	case 3:
+	  LOG_D(MAC,"[eNB %d] Adding Format 2A UE %d spec DCI for %d PRBS (rb alloc: %x) \n",module_idP, UE_id, nb_rb,rballoc);
+	  if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) {
+	    switch (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+	    case 6:
+	      ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes = sizeof(DCI2A_1_5MHz_2A_TDD_t);
+	      size_bits  = sizeof_DCI2A_1_5MHz_2A_TDD_t;
+	      break;
+	    case 25:
+	      ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes = sizeof(DCI2A_5MHz_2A_TDD_t);
+	      size_bits  = sizeof_DCI2A_5MHz_2A_TDD_t;
+	      break;
+	    case 50:
+	      ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes = sizeof(DCI2A_10MHz_2A_TDD_t);
+	      size_bits  = sizeof_DCI2A_10MHz_2A_TDD_t;
+	      break;
+	    case 100:
+	      ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes = sizeof(DCI2A_20MHz_2A_TDD_t);
+	      size_bits  = sizeof_DCI2A_20MHz_2A_TDD_t;
+	      break;
+	    default:
+	      ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes = sizeof(DCI2A_5MHz_2A_TDD_t);
+	      size_bits  = sizeof_DCI2A_5MHz_2A_TDD_t;
+	      break;
+	    }
+
+
+	  }
+	  else {
+	    switch(PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.N_RB_DL) {
+	    case 6:
+	      ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes=sizeof(DCI2A_1_5MHz_2A_FDD_t);
+	      size_bits=sizeof_DCI2A_1_5MHz_2A_FDD_t;
+	      break;
+	    case 25:
+	      ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes=sizeof(DCI2A_5MHz_2A_FDD_t);
+	      size_bits=sizeof_DCI2A_5MHz_2A_FDD_t;
+	      break;
+	    case 50:
+	      ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes=sizeof(DCI2A_10MHz_2A_FDD_t);
+	      size_bits=sizeof_DCI2A_10MHz_2A_FDD_t;
+	      break;
+	    case 100:
+	      ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes=sizeof(DCI2A_20MHz_2A_FDD_t);
+	      size_bits=sizeof_DCI2A_20MHz_2A_FDD_t;
+	      break;
+	    default:
+	      ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub);
+	      ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rah = 0;
+	      size_bytes=sizeof(DCI2A_5MHz_2A_FDD_t);
+	      size_bits=sizeof_DCI2A_5MHz_2A_FDD_t;
+	      break;
+	    }
+	  }
+
+	  add_ue_spec_dci(DCI_pdu,
+			  DLSCH_dci,
+			  rnti,
+			  size_bytes,
+			  process_ue_cqi (module_idP,UE_id),//aggregation,
+			  size_bits,
+			  format2A,
+			  0);
+
+	  break;
+
 	case 4:
 
 	  //if (nb_rb>10) {
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index f1812e072962e2f67567d4a62f1af2ef35fccd39..67577174461f1246490c5f17bc6853681c081c30 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -432,7 +432,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_
   mac_xface->get_transmission_mode     = get_transmission_mode;
   mac_xface->get_rballoc               = get_rballoc;
   mac_xface->get_nb_rb                 = conv_nprb;
-  mac_xface->get_SB_size               = Get_SB_size;
+//  mac_xface->get_SB_size               = Get_SB_size;
   mac_xface->get_subframe_direction    = get_subframe_direction;
   mac_xface->Msg3_transmitted          = Msg3_tx;
   mac_xface->Msg1_transmitted          = Msg1_tx;
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index d18c8826dfdd44d2c7d2a029501fd243698e6d68..52cb6f433d4b5cc9e222e8945eb5e597af177446 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -1530,6 +1530,9 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
   case 2:
     physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode=     AntennaInfoDedicated__transmissionMode_tm2;
     break;
+  case 3:
+    physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode=     AntennaInfoDedicated__transmissionMode_tm3;
+    break;
   case 4:
     physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode=     AntennaInfoDedicated__transmissionMode_tm4;
     break;
@@ -1932,7 +1935,7 @@ uint8_t do_RRCConnectionRelease(uint8_t                             Mod_id,
   memset(&dl_dcch_msg,0,sizeof(DL_DCCH_Message_t));
 
   dl_dcch_msg.message.present           = DL_DCCH_MessageType_PR_c1;
-  dl_dcch_msg.message.choice.c1.present = DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration;
+  dl_dcch_msg.message.choice.c1.present = DL_DCCH_MessageType__c1_PR_rrcConnectionRelease;
   rrcConnectionRelease                  = &dl_dcch_msg.message.choice.c1.choice.rrcConnectionRelease;
 
   // RRCConnectionRelease
@@ -1950,6 +1953,8 @@ uint8_t do_RRCConnectionRelease(uint8_t                             Mod_id,
                                    (void*)&dl_dcch_msg,
                                    buffer,
                                    RRC_BUF_SIZE); 
+
+  return((enc_rval.encoded+7)/8);
 }
 
 uint8_t TMGI[5] = {4,3,2,1,0};//TMGI is a string of octet, ref. TS 24.008 fig. 10.5.4a
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index c78658d074aa2c8030ccce496a5a665e32407e17..7a2b7a94ea9ebe01aed9a372e8dbaf92226410ac 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -2577,7 +2577,7 @@ void rrc_eNB_generate_RRCConnectionSetup(
     eNB_rrc_inst[enb_mod_idP].Srb0.Tx_buffer.payload_size =
         do_RRCConnectionSetup(enb_mod_idP,
                               (uint8_t *) eNB_rrc_inst[enb_mod_idP].Srb0.Tx_buffer.Payload,
-			      (mac_xface->lte_frame_parms->nb_antennas_tx==2)?2:1,
+			      (mac_xface->lte_frame_parms->nb_antennas_tx==2)?3:1,
 			      ue_mod_idP,
                               rrc_eNB_get_next_transaction_identifier(enb_mod_idP),
                               mac_xface->lte_frame_parms,