diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c
index cc2860191af34fd80ebc78e8bb93e9a204a64ad2..001f7a47396b86106abb7b2684376c50694c83cb 100644
--- a/common/utils/nr/nr_common.c
+++ b/common/utils/nr/nr_common.c
@@ -196,6 +196,24 @@ uint32_t nr_get_code_rate(uint8_t Imcs, uint8_t table_idx) {
   }
 }
 
+int get_dmrs_port(int nl, uint16_t dmrs_ports) {
+
+  if (dmrs_ports == 0) return 0; // dci 1_0
+  int p = -1;
+  int found = -1;
+  for (int i=0; i<12; i++) { // loop over dmrs ports
+    if((dmrs_ports>>i)&0x01) { // check if current bit is 1
+      found++;
+      if (found == nl) { // found antenna port number corresponding to current layer
+        p = i;
+        break;
+      }
+    }
+  }
+  AssertFatal(p>-1,"No dmrs port corresponding to layer %d found\n",nl);
+  return p;
+}
+
 int get_subband_size(int NPRB,int size) {
   // implements table  5.2.1.4-2 from 36.214
   //
diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h
index 6389c2c09431071b43608e2229b0268773173ed3..b95fdd50463fc450d518282ee9a8a757ebd1e693 100644
--- a/common/utils/nr/nr_common.h
+++ b/common/utils/nr/nr_common.h
@@ -62,7 +62,7 @@ uint8_t nr_get_Qm(uint8_t Imcs, uint8_t table_idx);
 uint32_t nr_get_code_rate(uint8_t Imcs, uint8_t table_idx);
 int get_subband_size(int NPRB,int size);
 void SLIV2SL(int SLIV,int *S,int *L);
-
+int get_dmrs_port(int nl, uint16_t dmrs_ports);
 
 #define CEILIDIV(a,b) ((a+b-1)/b)
 #define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
index c0abf6acb041f7cfa4d0358c5e3daf0ffcdfabbf..4bdd3c24cb6b08cf1fe8ce081dd15a280c237681 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
@@ -465,7 +465,7 @@ typedef struct {
   uint8_t pucch_resource_id;
   uint8_t pdsch_to_harq_feedback_time_ind;
   uint8_t n_dmrs_cdm_groups;
-  uint8_t dmrs_ports[10];
+  uint16_t dmrs_ports;
   uint8_t n_front_load_symb;
   uint8_t tci_state;
   fapi_nr_dl_srs_config_t srs_config;
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index 75b48d5823f34f5e00a06936cfe0ec52583393a2..6e379fdf758b2a113c1ff92f06c50ea0974b522c 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -38,6 +38,7 @@
 #include "PHY/NR_REFSIG/ptrs_nr.h"
 #include "common/utils/LOG/vcd_signal_dumper.h"
 #include "LAYER2/NR_MAC_gNB/mac_proto.h"
+#include "common/utils/nr/nr_common.h"
 
 //#define DEBUG_DLSCH
 //#define DEBUG_DLSCH_MAPPING
@@ -279,11 +280,12 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
 	   start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers);
 #endif
     for (int nl=0; nl<rel15->nrOfLayers; nl++) {
-      
+
+      int dmrs_port = get_dmrs_port(nl,rel15->dmrsPorts);
       // DMRS params for this ap
-      get_Wt(Wt, nl, dmrs_Type);
-      get_Wf(Wf, nl, dmrs_Type);
-      delta = get_delta(nl, dmrs_Type);
+      get_Wt(Wt, dmrs_port, dmrs_Type);
+      get_Wf(Wf, dmrs_port, dmrs_Type);
+      delta = get_delta(dmrs_port, dmrs_Type);
       l_prime = 0; // single symbol nl 0
       l0 = get_l0(rel15->dlDmrsSymbPos);
       l_overline = l0;
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
index f3cca9e33db0a9a7aa38bf50f6f0e2c10d735fdb..9371c802f1eca2edd195df3219dff1b9df5ce06a 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
@@ -300,6 +300,8 @@ typedef struct {
   uint8_t dmrsConfigType;
   // Number of DMRS CDM groups with no data
   uint8_t n_dmrs_cdm_groups;
+  /// DMRS ports bitmap
+  uint16_t dmrs_ports;
   /// Starting Symbol number
   uint16_t start_symbol;
   /// Current subband PMI allocation
diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
index c276de847d1c1e677c56f64f863b3233e0935608..06975b026f52db155989d8a82c0be665eeb472c6 100644
--- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
@@ -116,6 +116,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
             dlsch0_harq->dlDmrsSymbPos = dlsch_config_pdu->dlDmrsSymbPos;
             dlsch0_harq->dmrsConfigType = dlsch_config_pdu->dmrsConfigType;
             dlsch0_harq->n_dmrs_cdm_groups = dlsch_config_pdu->n_dmrs_cdm_groups;
+            dlsch0_harq->dmrs_ports = dlsch_config_pdu->dmrs_ports;
             dlsch0_harq->mcs = dlsch_config_pdu->mcs;
             dlsch0_harq->rvidx = dlsch_config_pdu->rv;
             dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH;
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index e3d4c54f5aaa809c8de5985bf87131c8b3e38ba8..7ebba83408097adc6a6fb53f036248cd67adf50f 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -761,17 +761,18 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
     uint16_t s1             = dlsch0_harq->nb_symbols;
     bool is_SI              = dlsch0->rnti_type == _SI_RNTI_;
 
-    LOG_D(PHY,"[UE %d] PDSCH type %d active in nr_slot_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x\n",ue->Mod_id,pdsch,nr_slot_rx,harq_pid,dlsch0->harq_processes[harq_pid]->status,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0->harq_processes[harq_pid]->dlDmrsSymbPos);
+    LOG_D(PHY,"[UE %d] PDSCH type %d active in nr_slot_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x\n",
+          ue->Mod_id,pdsch,nr_slot_rx,harq_pid,dlsch0_harq->status,pdsch_start_rb,pdsch_nb_rb,s0,s1,dlsch0_harq->dlDmrsSymbPos);
 
     for (m = s0; m < (s0 +s1); m++) {
-      if (((1<<m)&dlsch0->harq_processes[harq_pid]->dlDmrsSymbPos) > 0) {
-        for (uint8_t aatx=0; aatx<dlsch0->harq_processes[harq_pid]->Nl; aatx++) {//for MIMO Config: it shall loop over no_layers
+      if (((1<<m)&dlsch0_harq->dlDmrsSymbPos) > 0) {
+        for (uint8_t aatx=0; aatx<dlsch0_harq->Nl; aatx++) {//for MIMO Config: it shall loop over no_layers
           nr_pdsch_channel_estimation(ue,
                                       proc,
                                       0 /*eNB_id*/,
                                       is_SI,
                                       nr_slot_rx,
-                                      aatx /*p*/,
+                                      get_dmrs_port(aatx,dlsch0_harq->dmrs_ports),
                                       m,
                                       BWPStart,
                                       ue->frame_parms.first_carrier_offset+(BWPStart + pdsch_start_rb)*12,
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_extern.h b/openair2/LAYER2/NR_MAC_UE/mac_extern.h
index e551790f7aa1bd8e67f6bf4924fd6c5237817240..3affa41d51e8234fc2951ab8dd9e4abdacc28aa8 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_extern.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_extern.h
@@ -57,12 +57,12 @@ extern const uint8_t table_7_3_1_1_2_21[19][4];
 extern const uint8_t table_7_3_1_1_2_22[6][5];
 extern const uint8_t table_7_3_1_1_2_23[5][6];
 extern const uint8_t table_7_3_2_3_3_1[12][5];
-extern const uint8_t table_7_3_2_3_3_2_oneCodeword[31][6];
+extern const uint8_t table_7_3_2_3_3_2_oneCodeword[31][10];
 extern const uint8_t table_7_3_2_3_3_2_twoCodeword[4][10];
-extern const uint8_t table_7_3_2_3_3_3_oneCodeword[24][5];
+extern const uint8_t table_7_3_2_3_3_3_oneCodeword[24][7];
 extern const uint8_t table_7_3_2_3_3_3_twoCodeword[2][7];
-extern const uint8_t table_7_3_2_3_3_4_oneCodeword[58][6];
-extern const uint8_t table_7_3_2_3_3_4_twoCodeword[6][10];
+extern const uint8_t table_7_3_2_3_3_4_oneCodeword[58][14];
+extern const uint8_t table_7_3_2_3_3_4_twoCodeword[6][14];
 
 extern const uint16_t table_7_2_1[16];
 
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_vars.c b/openair2/LAYER2/NR_MAC_UE/mac_vars.c
index 383267090f553b052db2ff2ced66f556edbb4cab..b435dd773f7435d0e46697d4b253cf0379182eaa 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_vars.c
+++ b/openair2/LAYER2/NR_MAC_UE/mac_vars.c
@@ -257,161 +257,161 @@ const uint8_t table_7_3_1_1_2_23[5][6] = {
 };
 
 const uint8_t table_7_3_2_3_3_1[12][5] = {
-  {1,0,0,0,0},
   {1,1,0,0,0},
   {1,0,1,0,0},
-  {2,0,0,0,0},
+  {1,1,1,0,0},
   {2,1,0,0,0},
-  {2,2,0,0,0},
-  {2,3,0,0,0},
   {2,0,1,0,0},
-  {2,2,3,0,0},
-  {2,0,1,2,0},
-  {2,0,1,2,3},
-  {2,0,2,0,0}
+  {2,0,0,1,0},
+  {2,0,0,0,1},
+  {2,1,1,0,0},
+  {2,0,0,1,1},
+  {2,1,1,1,0},
+  {2,1,1,1,1},
+  {2,1,0,1,0}
 };
 
-const uint8_t table_7_3_2_3_3_2_oneCodeword[31][6] = {
-  {1,0,0,0,0,1},
-  {1,1,0,0,0,1},
-  {1,0,1,0,0,1},
-  {2,0,0,0,0,1},
-  {2,1,0,0,0,1},
-  {2,2,0,0,0,1},
-  {2,3,0,0,0,1},
-  {2,0,1,0,0,1},
-  {2,2,3,0,0,1},
-  {2,0,1,2,0,1},
-  {2,0,1,2,3,1},
-  {2,0,2,0,0,1},
-  {2,0,0,0,0,2},
-  {2,1,0,0,0,2},
-  {2,2,0,0,0,2},
-  {2,3,0,0,0,2},
-  {2,4,0,0,0,2},
-  {2,5,0,0,0,2},
-  {2,6,0,0,0,2},
-  {2,7,0,0,0,2},
-  {2,0,1,0,0,2},
-  {2,2,3,0,0,2},
-  {2,4,5,0,0,2},
-  {2,6,7,0,0,2},
-  {2,0,4,0,0,2},
-  {2,2,6,0,0,2},
-  {2,0,1,4,0,2},
-  {2,2,3,6,0,2},
-  {2,0,1,4,5,2},
-  {2,2,3,6,7,2},
-  {2,0,2,4,6,2}
+const uint8_t table_7_3_2_3_3_2_oneCodeword[31][10] = {
+  {1,1,0,0,0,0,0,0,0,1},
+  {1,0,1,0,0,0,0,0,0,1},
+  {1,1,1,0,0,0,0,0,0,1},
+  {2,1,0,0,0,0,0,0,0,1},
+  {2,0,1,0,0,0,0,0,0,1},
+  {2,0,0,1,0,0,0,0,0,1},
+  {2,0,0,0,1,0,0,0,0,1},
+  {2,1,1,0,0,0,0,0,0,1},
+  {2,0,0,1,1,0,0,0,0,1},
+  {2,1,1,1,0,0,0,0,0,1},
+  {2,1,1,1,1,0,0,0,0,1},
+  {2,1,0,1,0,0,0,0,0,1},
+  {2,1,0,0,0,0,0,0,0,2},
+  {2,0,1,0,0,0,0,0,0,2},
+  {2,0,0,1,0,0,0,0,0,2},
+  {2,0,0,0,1,0,0,0,0,2},
+  {2,0,0,0,0,1,0,0,0,2},
+  {2,0,0,0,0,0,1,0,0,2},
+  {2,0,0,0,0,0,0,1,0,2},
+  {2,0,0,0,0,0,0,0,1,2},
+  {2,1,1,0,0,0,0,0,0,2},
+  {2,0,0,1,1,0,0,0,0,2},
+  {2,0,0,0,0,1,1,0,0,2},
+  {2,0,0,0,0,0,0,1,1,2},
+  {2,1,0,0,0,1,0,0,0,2},
+  {2,0,0,1,0,0,0,1,0,2},
+  {2,1,1,0,0,1,0,0,0,2},
+  {2,0,0,1,1,0,0,1,0,2},
+  {2,1,1,0,0,1,1,0,0,2},
+  {2,0,0,1,1,0,0,1,1,2},
+  {2,1,0,1,0,1,0,1,0,2}
 };
 
 const uint8_t table_7_3_2_3_3_2_twoCodeword[4][10] = {
-  {2,0,1,2,3,4,0,0,0,2},
-  {2,0,1,2,3,4,6,0,0,2},
-  {2,0,1,2,3,4,5,6,0,2},
-  {2,0,1,2,3,4,5,6,7,2}
+  {2,1,1,1,1,1,0,0,0,2},
+  {2,1,1,1,1,1,0,1,0,2},
+  {2,1,1,1,1,1,1,1,0,2},
+  {2,1,1,1,1,1,1,1,1,2}
 };
 
-const uint8_t table_7_3_2_3_3_3_oneCodeword[24][5] = {
-  {1,0,0,0,0},
-  {1,1,0,0,0},
-  {1,0,1,0,0},
-  {2,0,0,0,0},
-  {2,1,0,0,0},
-  {2,2,0,0,0},
-  {2,3,0,0,0},
-  {2,0,1,0,0},
-  {2,2,3,0,0},
-  {2,0,1,2,0},
-  {2,0,1,2,3},
-  {3,0,0,0,0},
-  {3,1,0,0,0},
-  {3,2,0,0,0},
-  {3,3,0,0,0},
-  {3,4,0,0,0},
-  {3,5,0,0,0},
-  {3,0,1,0,0},
-  {3,2,3,0,0},
-  {3,4,5,0,0},
-  {3,0,1,2,0},
-  {3,3,4,5,0},
-  {3,0,1,2,3},
-  {2,0,2,0,0}
+const uint8_t table_7_3_2_3_3_3_oneCodeword[24][7] = {
+  {1,1,0,0,0,0,0},
+  {1,0,1,0,0,0,0},
+  {1,1,1,0,0,0,0},
+  {2,1,0,0,0,0,0},
+  {2,0,1,0,0,0,0},
+  {2,0,0,1,0,0,0},
+  {2,0,0,0,1,0,0},
+  {2,1,1,0,0,0,0},
+  {2,0,0,1,1,0,0},
+  {2,1,1,1,0,0,0},
+  {2,1,1,1,1,0,0},
+  {3,1,0,0,0,0,0},
+  {3,0,1,0,0,0,0},
+  {3,0,0,1,0,0,0},
+  {3,0,0,0,1,0,0},
+  {3,0,0,0,0,1,0},
+  {3,0,0,0,0,0,1},
+  {3,1,1,0,0,0,0},
+  {3,0,0,1,1,0,0},
+  {3,0,0,0,0,1,1},
+  {3,1,1,1,0,0,0},
+  {3,0,0,0,1,1,1},
+  {3,1,1,1,1,0,0},
+  {3,1,0,1,0,0,0}
 };
 
 const uint8_t table_7_3_2_3_3_3_twoCodeword[2][7] = {
-  {3,0,1,2,3,4,0},
-  {3,0,1,2,3,4,5}
+  {3,1,1,1,1,1,0},
+  {3,1,1,1,1,1,1}
 };
 
-const uint8_t table_7_3_2_3_3_4_oneCodeword[58][6] = {
-  {1,0,0,0,0,1},
-  {1,1,0,0,0,1},
-  {1,0,1,0,0,1},
-  {2,0,0,0,0,1},
-  {2,1,0,0,0,1},
-  {2,2,0,0,0,1},
-  {2,3,0,0,0,1},
-  {2,0,1,0,0,1},
-  {2,2,3,0,0,1},
-  {2,0,1,2,0,1},
-  {2,0,1,2,3,1},
-  {3,0,0,0,0,1},
-  {3,1,0,0,0,1},
-  {3,2,0,0,0,1},
-  {3,3,0,0,0,1},
-  {3,4,0,0,0,1},
-  {3,5,0,0,0,1},
-  {3,0,1,0,0,1},
-  {3,2,3,0,0,1},
-  {3,4,5,0,0,1},
-  {3,0,1,2,0,1},
-  {3,3,4,5,0,1},
-  {3,0,1,2,3,1},
-  {2,0,2,0,0,1},
-  {3,0,0,0,0,2},
-  {3,1,0,0,0,2},
-  {3,2,0,0,0,2},
-  {3,3,0,0,0,2},
-  {3,4,0,0,0,2},
-  {3,5,0,0,0,2},
-  {3,6,0,0,0,2},
-  {3,7,0,0,0,2},
-  {3,8,0,0,0,2},
-  {3,9,0,0,0,2},
-  {3,10,0,0,0,2},
-  {3,11,0,0,0,2},
-  {3,0,1,0,0,2},
-  {3,2,3,0,0,2},
-  {3,4,5,0,0,2},
-  {3,6,7,0,0,2},
-  {3,8,9,0,0,2},
-  {3,10,11,0,0,2},
-  {3,0,1,6,0,2},
-  {3,2,3,8,0,2},
-  {3,4,5,10,0,2},
-  {3,0,1,6,7,2},
-  {3,2,3,8,9,2},
-  {3,4,5,10,11,2},
-  {1,0,0,0,0,2},
-  {1,1,0,0,0,2},
-  {1,6,0,0,0,2},
-  {1,7,0,0,0,2},
-  {1,0,1,0,0,2},
-  {1,6,7,0,0,2},
-  {2,0,1,0,0,2},
-  {2,2,3,0,0,2},
-  {2,6,7,0,0,2},
-  {2,8,9,0,0,2}
+const uint8_t table_7_3_2_3_3_4_oneCodeword[58][14] = {
+  {1,1,0,0,0,0,0,0,0,0,0,0,0,1},
+  {1,0,1,0,0,0,0,0,0,0,0,0,0,1},
+  {1,1,1,0,0,0,0,0,0,0,0,0,0,1},
+  {2,1,0,0,0,0,0,0,0,0,0,0,0,1},
+  {2,0,1,0,0,0,0,0,0,0,0,0,0,1},
+  {2,0,0,1,0,0,0,0,0,0,0,0,0,1},
+  {2,0,0,0,1,0,0,0,0,0,0,0,0,1},
+  {2,1,1,0,0,0,0,0,0,0,0,0,0,1},
+  {2,0,0,1,1,0,0,0,0,0,0,0,0,1},
+  {2,1,1,1,0,0,0,0,0,0,0,0,0,1},
+  {2,1,1,1,1,0,0,0,0,0,0,0,0,1},
+  {3,1,0,0,0,0,0,0,0,0,0,0,0,1},
+  {3,0,1,0,0,0,0,0,0,0,0,0,0,1},
+  {3,0,0,1,0,0,0,0,0,0,0,0,0,1},
+  {3,0,0,0,1,0,0,0,0,0,0,0,0,1},
+  {3,0,0,0,0,1,0,0,0,0,0,0,0,1},
+  {3,0,0,0,0,0,1,0,0,0,0,0,0,1},
+  {3,1,1,0,0,0,0,0,0,0,0,0,0,1},
+  {3,0,0,1,1,0,0,0,0,0,0,0,0,1},
+  {3,0,0,0,0,1,1,0,0,0,0,0,0,1},
+  {3,1,1,1,0,0,0,0,0,0,0,0,0,1},
+  {3,0,0,0,1,1,1,0,0,0,0,0,0,1},
+  {3,1,1,1,1,0,0,0,0,0,0,0,0,1},
+  {2,1,0,1,0,0,0,0,0,0,0,0,0,1},
+  {3,1,0,0,0,0,0,0,0,0,0,0,0,2},
+  {3,0,1,0,0,0,0,0,0,0,0,0,0,2},
+  {3,0,0,1,0,0,0,0,0,0,0,0,0,2},
+  {3,0,0,0,1,0,0,0,0,0,0,0,0,2},
+  {3,0,0,0,0,1,0,0,0,0,0,0,0,2},
+  {3,0,0,0,0,0,1,0,0,0,0,0,0,2},
+  {3,0,0,0,0,0,0,1,0,0,0,0,0,2},
+  {3,0,0,0,0,0,0,0,1,0,0,0,0,2},
+  {3,0,0,0,0,0,0,0,0,1,0,0,0,2},
+  {3,0,0,0,0,0,0,0,0,0,1,0,0,2},
+  {3,0,0,0,0,0,0,0,0,0,0,1,0,2},
+  {3,0,0,0,0,0,0,0,0,0,0,0,1,2},
+  {3,1,1,0,0,0,0,0,0,0,0,0,0,2},
+  {3,0,0,1,1,0,0,0,0,0,0,0,0,2},
+  {3,0,0,0,0,1,1,0,0,0,0,0,0,2},
+  {3,0,0,0,0,0,0,1,1,0,0,0,0,2},
+  {3,0,0,0,0,0,0,0,0,1,1,0,0,2},
+  {3,0,0,0,0,0,0,0,0,0,0,1,1,2},
+  {3,1,1,0,0,0,0,1,0,0,0,0,0,2},
+  {3,0,0,1,1,0,0,0,0,1,0,0,0,2},
+  {3,0,0,0,0,1,1,0,0,0,0,1,0,2},
+  {3,1,1,0,0,0,0,1,1,0,0,0,0,2},
+  {3,0,0,1,1,0,0,0,0,1,1,0,0,2},
+  {3,0,0,0,0,1,1,0,0,0,0,1,1,2},
+  {1,1,0,0,0,0,0,0,0,0,0,0,0,2},
+  {1,0,1,0,0,0,0,0,0,0,0,0,0,2},
+  {1,0,0,0,0,0,0,1,0,0,0,0,0,2},
+  {1,0,0,0,0,0,0,0,1,0,0,0,0,2},
+  {1,1,1,0,0,0,0,0,0,0,0,0,0,2},
+  {1,0,0,0,0,0,0,1,1,0,0,0,0,2},
+  {2,1,1,0,0,0,0,0,0,0,0,0,0,2},
+  {2,0,0,1,1,0,0,0,0,0,0,0,0,2},
+  {2,0,0,0,0,0,0,1,1,0,0,0,0,2},
+  {2,0,0,0,0,0,0,0,0,1,1,0,0,2}
 };
 
-const uint8_t table_7_3_2_3_3_4_twoCodeword[6][10] = {
-  {3,0,1,2,3,4,0,0,0,1},
-  {3,0,1,2,3,4,5,0,0,1},
-  {2,0,1,2,3,6,0,0,0,2},
-  {2,0,1,2,3,6,8,0,0,2},
-  {2,0,1,2,3,6,7,8,0,2},
-  {2,0,1,2,3,6,7,8,9,2}
+const uint8_t table_7_3_2_3_3_4_twoCodeword[6][14] = {
+  {3,1,1,1,1,1,0,0,0,0,0,0,0,1},
+  {3,1,1,1,1,1,1,0,0,0,0,0,0,1},
+  {2,1,1,1,1,0,0,1,0,0,0,0,0,2},
+  {2,1,1,1,1,0,0,1,0,1,0,0,0,2},
+  {2,1,1,1,1,0,0,1,1,1,0,0,0,2},
+  {2,1,1,1,1,0,0,1,1,1,1,0,0,2},
 };
 
 // table 7.2-1 TS 38.321
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index 2bac03fc4f4b246cc1664a9e5e4092fad301bf8d..1a1c8920c0979e04ab02d88f1ca1fe81d577d077 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -698,6 +698,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
       dlsch_config_pdu_1_0->n_dmrs_cdm_groups = 1;
     else
       dlsch_config_pdu_1_0->n_dmrs_cdm_groups = 2;
+    dlsch_config_pdu_1_0->dmrs_ports = 0;
     /* VRB_TO_PRB_MAPPING */
     dlsch_config_pdu_1_0->vrb_to_prb_mapping = (dci->vrb_to_prb_mapping.val == 0) ? vrb_to_prb_mapping_non_interleaved:vrb_to_prb_mapping_interleaved;
     /* MCS TABLE INDEX */
@@ -974,31 +975,35 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
     if ((dmrs_type == NULL) && (max_length == NULL)){
       // Table 7.3.1.2.2-1: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=1
       dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_1[dci->antenna_ports.val][0];
-      dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_1[dci->antenna_ports.val][1];
-      dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_1[dci->antenna_ports.val][2];
-      dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_1[dci->antenna_ports.val][3];
-      dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_1[dci->antenna_ports.val][4];
+      dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_1[dci->antenna_ports.val][1] +
+                                          (table_7_3_2_3_3_1[dci->antenna_ports.val][2]<<1) +
+                                          (table_7_3_2_3_3_1[dci->antenna_ports.val][2]<<2) +
+                                          (table_7_3_2_3_3_1[dci->antenna_ports.val][4]<<3));
     }
     if ((dmrs_type == NULL) && (max_length != NULL)){
       // Table 7.3.1.2.2-2: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=2
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][4];
-	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][5];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][6]<<5) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][7]<<6) +
+                                            (table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][8]<<7));
+	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_2_oneCodeword[dci->antenna_ports.val][9];
       }
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][4];
-	dlsch_config_pdu_1_1->dmrs_ports[4]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][5];
-	dlsch_config_pdu_1_1->dmrs_ports[5]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][6];
-	dlsch_config_pdu_1_1->dmrs_ports[6]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][7];
-	dlsch_config_pdu_1_1->dmrs_ports[7]     = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][8];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][6]<<5) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][7]<<6) +
+                                            (table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][8]<<7));
 	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_2_twoCodeword[dci->antenna_ports.val][9];
       }
     }
@@ -1006,41 +1011,55 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
       // Table 7.3.1.2.2-3: Antenna port(s) (1000 + DMRS port), dmrs-Type=2, maxLength=1
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][4];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_3_oneCodeword[dci->antenna_ports.val][6]<<5));
       }
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][4];
-	dlsch_config_pdu_1_1->dmrs_ports[4]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][5];
-	dlsch_config_pdu_1_1->dmrs_ports[5]     = table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][6];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_3_twoCodeword[dci->antenna_ports.val][6]<<5));
       }
     }
     if ((dmrs_type != NULL) && (max_length != NULL)){
       // Table 7.3.1.2.2-4: Antenna port(s) (1000 + DMRS port), dmrs-Type=2, maxLength=2
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][4];
-	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][5];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][6]<<5) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][7]<<6) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][8]<<7) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][9]<<8) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][10]<<9) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][11]<<10) +
+                                            (table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][12]<<11));
+	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_4_oneCodeword[dci->antenna_ports.val][13];
       }
       if (n_codewords == 1) {
 	dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][0];
-	dlsch_config_pdu_1_1->dmrs_ports[0]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][1];
-	dlsch_config_pdu_1_1->dmrs_ports[1]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][2];
-	dlsch_config_pdu_1_1->dmrs_ports[2]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][3];
-	dlsch_config_pdu_1_1->dmrs_ports[3]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][4];
-	dlsch_config_pdu_1_1->dmrs_ports[4]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][5];
-	dlsch_config_pdu_1_1->dmrs_ports[5]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][6];
-	dlsch_config_pdu_1_1->dmrs_ports[6]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][7];
-	dlsch_config_pdu_1_1->dmrs_ports[7]     = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][8];
+        dlsch_config_pdu_1_1->dmrs_ports = (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][1] +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][2]<<1) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][2]<<2) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][4]<<3) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][5]<<4) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][6]<<5) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][7]<<6) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][8]<<7) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][9]<<8) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][10]<<9) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][11]<<10) +
+                                            (table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][12]<<11));
 	dlsch_config_pdu_1_1->n_front_load_symb = table_7_3_2_3_3_4_twoCodeword[dci->antenna_ports.val][9];
       }
     }
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index 8fcb544f18f5138fc35b003ce4a461b265f92d2b..36e1ff773589052dacc438b3c9f101bb3e5d48a4 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -694,8 +694,7 @@ void pf_dl(module_id_t module_id,
     const long f = sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats;
     const uint8_t num_dmrs_cdm_grps_no_data = sched_ctrl->active_bwp ? (f ? 1 : (ps->nrOfSymbols == 2 ? 1 : 2)) : (ps->nrOfSymbols == 2 ? 1 : 2);
     if (ps->time_domain_allocation != tda || ps->numDmrsCdmGrpsNoData != num_dmrs_cdm_grps_no_data)
-      nr_set_pdsch_semi_static(
-          scc, UE_info->CellGroup[UE_id], sched_ctrl->active_bwp, tda, num_dmrs_cdm_grps_no_data, ps);
+      nr_set_pdsch_semi_static(scc, UE_info->CellGroup[UE_id], sched_ctrl->active_bwp, tda, num_dmrs_cdm_grps_no_data, ps);
     sched_pdsch->Qm = nr_get_Qm_dl(sched_pdsch->mcs, ps->mcsTableIdx);
     sched_pdsch->R = nr_get_code_rate_dl(sched_pdsch->mcs, ps->mcsTableIdx);
     sched_pdsch->pucch_allocation = alloc;