diff --git a/common/utils/time_meas.h b/common/utils/time_meas.h
index fded7f1a9c9a3195535f8c5b279d0124c8ed1c1c..eb81d09434cefab1879c28aad1c286eaee15d45a 100644
--- a/common/utils/time_meas.h
+++ b/common/utils/time_meas.h
@@ -62,7 +62,7 @@ typedef struct time_stats {
   oai_cputime_t in;          /*!< \brief time at measure starting point */
   oai_cputime_t diff;        /*!< \brief average difference between time at starting point and time at endpoint*/
   oai_cputime_t p_time;      /*!< \brief absolute process duration */
-  oai_cputime_t diff_square; /*!< \brief process duration square */
+  double diff_square;        /*!< \brief process duration square */
   oai_cputime_t max;         /*!< \brief maximum difference between time at starting point and time at endpoint*/
   int trials;                /*!< \brief number of start point - end point iterations */
   int meas_flag;             /*!< \brief 1: stop_meas not called (consecutive calls of start_meas) */
@@ -156,7 +156,7 @@ static inline void stop_meas(time_stats_t *ts) {
     ts->diff += (out-ts->in);
     /// process duration is the difference between two clock points
     ts->p_time = (out-ts->in);
-    ts->diff_square += (out-ts->in)*(out-ts->in);
+    ts->diff_square += ((double)out-ts->in)*((double)out-ts->in);
 
     if ((out-ts->in) > ts->max)
       ts->max = out-ts->in;
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 fd9af0172091531ad9451a51736f675df6a39f6d..10f881bae69055d5ebfb06b5dc8c8c1dc3b58832 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
@@ -87,7 +87,7 @@ typedef struct {
   // N_CCE is L, or number of CCEs for DCI
   int N_CCE;
   uint8_t payloadSize;
-  uint8_t payloadBits[16];
+  uint8_t payloadBits[16] __attribute__((aligned(16))); // will be cast as uint64
   //fapi_nr_dci_pdu_rel15_t dci;
 } fapi_nr_dci_indication_pdu_t;
 
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
index 8b564a5e3743be1a3ccf14ff2c53581eb7ceb11d..0e393066c865bf564e6b74ed2d73569fcb80a626 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
@@ -738,7 +738,7 @@ typedef struct {
   // The total DCI length (in bits) including padding bits [TS38.212 sec 7.3.1] Range 0->DCI_PAYLOAD_BYTE_LEN*8
   uint16_t PayloadSizeBits;
   // DCI payload, where the actual size is defined by PayloadSizeBits. The bit order is as following bit0-bit7 are mapped to first byte of MSB - LSB
-  uint8_t Payload[DCI_PAYLOAD_BYTE_LEN];
+  uint8_t Payload[DCI_PAYLOAD_BYTE_LEN] __attribute__((aligned(32)));
 
 } nfapi_nr_dl_dci_pdu_t;
 
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
index 264b25deca4520b0d7ea910c35d9b2b2da9e8cd6..af02a1605475b1600d97ecb20c791e57494307f3 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
@@ -814,7 +814,7 @@ uint8_t phy_threegpplte_turbo_decoder8(int16_t *y,
   llr_t *s1,*s2,*yp1,*yp2,*yp;
   unsigned int i,j,iind;//,pi;
   unsigned char iteration_cnt=0;
-  unsigned int crc,oldcrc,crc_len;
+  unsigned int crc, crc_len;
   uint8_t temp;
 #if defined(__x86_64__) || defined(__i386__)
   __m128i *yp128;
@@ -1233,8 +1233,8 @@ uint8_t phy_threegpplte_turbo_decoder8(int16_t *y,
       }
 
       // check the CRC
-      oldcrc= *((unsigned int *)(&decoded_bytes[(n>>3)-crc_len]));
-
+      uint32_t oldcrc;
+      memcpy(&oldcrc, &decoded_bytes[(n >> 3) - crc_len], crc_len);
       switch (crc_type) {
         case CRC24_A:
           oldcrc&=0x00ffffff;
diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c
index 9ad18cc1a6336c5a542182813ea7f7b66a1c523e..471b26fe2434cffa82713a72b76d3515434bce2c 100644
--- a/openair1/PHY/CODING/crc_byte.c
+++ b/openair1/PHY/CODING/crc_byte.c
@@ -244,11 +244,11 @@ crc16 (unsigned char * inptr, int bitlen)
 
   while (octetlen-- > 0) {
 
-    crc = (crc << 8) ^ (crc16Table[(*inptr++) ^ (crc >> 24)] << 16);
+    crc = (crc << 8) ^ (((uint32_t)crc16Table[(*inptr++) ^ (crc >> 24)]) << 16);
   }
 
   if (resbit > 0)
-    crc = (crc << resbit) ^ (crc16Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))] << 16);
+    crc = (crc << resbit) ^ (((uint32_t)crc16Table[(*inptr) >> (8 - resbit) ^ (crc >> (32 - resbit))]) << 16);
 
   return crc;
 }
diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
index f4ea4a9434047e30d80f9c43371832adb5c47fed..f792f993e9c78066328ff859bb14afd9eaa69ca7 100644
--- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
+++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h
@@ -961,7 +961,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1028,7 +1029,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1096,7 +1098,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1163,7 +1166,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1230,7 +1234,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1297,7 +1302,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1364,7 +1370,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1431,7 +1438,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1498,7 +1506,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1593,7 +1602,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1660,7 +1670,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1727,7 +1738,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1794,7 +1806,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1861,7 +1874,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
@@ -1928,7 +1942,8 @@ static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBu
 
         // If no error pcRes should be 0
         // Only use valid CNs
-        pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
+        if (Mrem)
+          pcResSum |= (pcRes&(0xFFFFFFFF>>(32-Mrem)));
 
         // If PC failed we can stop here
         if (pcResSum > 0)
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
index 64e74ebfbf80341dd7d1b70d74240769b90858dd..cb2f19038455ebfb76bc5937210bbf048bfde236 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c
@@ -562,9 +562,9 @@ uint32_t get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap) {
   case 15:
     if (vrb<12) {
       if ((vrb&3) < 2)     // even: 0->0, 1->4, 4->1, 5->5, 8->2, 9->6 odd: 0->7, 1->11
-  return(((7*odd_slot) + 4*(vrb&3) + (vrb>>2))%14) + 14*(vrb/14);
+        return(((7*odd_slot) + 4*(vrb&3) + (vrb>>2))%14) + 14*(vrb/14);
       else if (vrb < 12) // even: 2->7, 3->11, 6->8, 7->12, 10->9, 11->13
-  return (((7*odd_slot) + 4*(vrb&3) + (vrb>>2) +13 )%14) + 14*(vrb/14);
+        return (((7*odd_slot) + 4*(vrb&3) + (vrb>>2) +13 )%14) + 14*(vrb/14);
     }
     if (vrb==12)
       return (3+(7*odd_slot)) % 14;
@@ -573,6 +573,8 @@ uint32_t get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap) {
     return 14;
     break;
 
+    // Formula in TS 36.211, chap 6.2.3.2
+    // Fix me: returns a PRB number > 24 when vrb is 24
   case 25:
     return (((12*odd_slot) + 6*(vrb&3) + (vrb>>2))%24) + 24*(vrb/24);
     break;
@@ -581,43 +583,44 @@ uint32_t get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap) {
     if (Ngap==0) {
       // Nrow=12,Nnull=2,NVRBDL=46,Ngap1= 27
       if (vrb>=23)
-  offset=4;
+        offset=4;
       else
-  offset=0;
+        offset=0;
       if (vrb<44) {
-  if ((vrb&3)>=2)
-    return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2) + 45)%46;
-  else
-    return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2))%46;
+        if ((vrb&3)>=2)
+          return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2) + 45)%46;
+        else
+          return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2))%46;
       }
       if (vrb==44)  // even: 44->11, odd: 45->34
-  return offset+((23*odd_slot) + 22-12+1);
+        return offset+((23*odd_slot) + 22-12+1);
       if (vrb==45)  // even: 45->10, odd: 45->33
-  return offset+((23*odd_slot) + 22+12);
+        return offset+((23*odd_slot) + 22+12);
       if (vrb==46)
-  return offset+46+((23*odd_slot) + 23-12+1) % 46;
+        return offset+46+((23*odd_slot) + 23-12+1) % 46;
       if (vrb==47)
-  return offset+46+((23*odd_slot) + 23+12) % 46;
+        return offset+46+((23*odd_slot) + 23+12) % 46;
       if (vrb==48)
-  return offset+46+((23*odd_slot) + 23-12+1) % 46;
+        return offset+46+((23*odd_slot) + 23-12+1) % 46;
       if (vrb==49)
-  return offset+46+((23*odd_slot) + 23+12) % 46;
+        return offset+46+((23*odd_slot) + 23+12) % 46;
     }
     else {
       // Nrow=6,Nnull=6,NVRBDL=18,Ngap1= 27
       if (vrb>=9)
-  offset=18;
+        offset=18;
       else
-  offset=0;
+        offset=0;
 
       if (vrb<12) {
-  if ((vrb&3)>=2)
-    return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2) + 17)%18;
-  else
-    return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2))%18;
+        if ((vrb&3)>=2)
+          return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2) + 17)%18;
+        else
+          return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2))%18;
       }
       else {
-  return offset+((9*odd_slot) + 12*(vrb&1)+(vrb>>1) )%18 + 18*(vrb/18);
+        // Same issue as for 25 PRB: returns larger than 0..49
+        return ((9*odd_slot) + 12*(vrb&1) + (vrb>>1))%18 + 18*(vrb/18);
       }
     }
     break;
@@ -677,7 +680,7 @@ void generate_RIV_tables(void)
 
       //      printf("RIV %d (%d) : first_rb %d NBRB %d\n",RIV,localRIV2alloc_LUT25[RIV],RBstart,Lcrbs);
       localRIV2alloc_LUT6[RIV] = alloc0;
-      distRIV2alloc_even_LUT6[RIV]  = allocdist0_0_even;
+      distRIV2alloc_even_LUT6[RIV] = allocdist0_0_even;
       distRIV2alloc_odd_LUT6[RIV]  = allocdist0_0_odd;
       RIV2nb_rb_LUT6[RIV]      = Lcrbs;
       RIV2first_rb_LUT6[RIV]   = RBstart;
@@ -693,15 +696,14 @@ void generate_RIV_tables(void)
       nVRB = Lcrbs-1+RBstart;
       //printf("RBstart %d, len %d --> ",RBstart,Lcrbs);
       alloc0     |= (1<<nVRB);
-      allocdist0_0_even |= (1<<get_prb(25,0,nVRB,0));
-      allocdist0_0_odd  |= (1<<get_prb(25,1,nVRB,0));
+      allocdist0_0_even |= 1U << get_prb(25, 0, nVRB, 0);
+      allocdist0_0_odd  |= 1U << get_prb(25, 1, nVRB, 0);
 
       //printf("alloc 0 %x, allocdist0_even %x, allocdist0_odd %x\n",alloc0,allocdist0_0_even,allocdist0_0_odd);
       RIV=computeRIV(25,RBstart,Lcrbs);
 
       if (RIV>RIV_max25)
-        RIV_max25 = RIV;;
-
+        RIV_max25 = RIV;
 
       localRIV2alloc_LUT25[RIV]      = alloc0;
       distRIV2alloc_even_LUT25[RIV]  = allocdist0_0_even;
@@ -730,37 +732,37 @@ void generate_RIV_tables(void)
 
 
       if (nVRB<32)
-        alloc0 |= (1<<nVRB);
+        alloc0 |= 1U << nVRB;
       else
-        alloc1 |= (1<<(nVRB-32));
+        alloc1 |= 1U << (nVRB - 32);
 
       // Distributed Gap1, even slot
       nVRB_even_dist = get_prb(50,0,nVRB,0);
       if (nVRB_even_dist<32)
-        allocdist0_0_even |= (1<<nVRB_even_dist);
+        allocdist0_0_even |= 1U << nVRB_even_dist;
       else
-        allocdist1_0_even |= (1<<(nVRB_even_dist-32));
+        allocdist1_0_even |= 1U << (nVRB_even_dist - 32);
 
       // Distributed Gap1, odd slot
       nVRB_odd_dist = get_prb(50,1,nVRB,0);
       if (nVRB_odd_dist<32)
-        allocdist0_0_odd |= (1<<nVRB_odd_dist);
+        allocdist0_0_odd |= (1U <<nVRB_odd_dist);
       else
-        allocdist1_0_odd |= (1<<(nVRB_odd_dist-32));
+        allocdist1_0_odd |= (1U <<(nVRB_odd_dist-32));
 
       // Distributed Gap2, even slot
       nVRB_even_dist = get_prb(50,0,nVRB,1);
       if (nVRB_even_dist<32)
-        allocdist0_1_even |= (1<<nVRB_even_dist);
+        allocdist0_1_even |= 1U << nVRB_even_dist;
       else
-        allocdist1_1_even |= (1<<(nVRB_even_dist-32));
+        allocdist1_1_even |= 1U << (nVRB_even_dist - 32);
 
       // Distributed Gap2, odd slot
       nVRB_odd_dist = get_prb(50,1,nVRB,1);
       if (nVRB_odd_dist<32)
-        allocdist0_1_odd |= (1<<nVRB_odd_dist);
+        allocdist0_1_odd |= 1U << nVRB_odd_dist;
       else
-        allocdist1_1_odd |= (1<<(nVRB_odd_dist-32));
+        allocdist1_1_odd |= 1U << (nVRB_odd_dist - 32);
 
       RIV=computeRIV(50,RBstart,Lcrbs);
 
@@ -811,13 +813,13 @@ void generate_RIV_tables(void)
       nVRB = Lcrbs-1+RBstart;
 
       if (nVRB<32)
-        alloc0 |= (1<<nVRB);
+        alloc0 |= 1U << nVRB;
       else if (nVRB<64)
-        alloc1 |= (1<<(nVRB-32));
+        alloc1 |= 1U << (nVRB - 32);
       else if (nVRB<96)
-        alloc2 |= (1<<(nVRB-64));
+        alloc2 |= 1U << (nVRB - 64);
       else
-        alloc3 |= (1<<(nVRB-96));
+        alloc3 |= 1U << (nVRB - 96);
 
       // Distributed Gap1, even slot
       nVRB_even_dist = get_prb(100,0,nVRB,0);
@@ -825,15 +827,14 @@ void generate_RIV_tables(void)
 //      if ((RBstart==0) && (Lcrbs<=8))
 //  printf("nVRB %d => nVRB_even_dist %d\n",nVRB,nVRB_even_dist);
 
-
       if (nVRB_even_dist<32)
-        allocdist0_0_even |= (1<<nVRB_even_dist);
+        allocdist0_0_even |= 1U << nVRB_even_dist;
       else if (nVRB_even_dist<64)
-        allocdist1_0_even |= (1<<(nVRB_even_dist-32));
+        allocdist1_0_even |= 1U << (nVRB_even_dist - 32);
       else if (nVRB_even_dist<96)
-  allocdist2_0_even |= (1<<(nVRB_even_dist-64));
+        allocdist2_0_even |= 1U << (nVRB_even_dist - 64);
       else
-  allocdist3_0_even |= (1<<(nVRB_even_dist-96));
+        allocdist3_0_even |= 1U << (nVRB_even_dist - 96);
 /*      if ((RBstart==0) && (Lcrbs<=8))
   printf("rballoc =>(%08x.%08x.%08x.%08x)\n",
          allocdist0_0_even,
@@ -845,38 +846,37 @@ void generate_RIV_tables(void)
       // Distributed Gap1, odd slot
       nVRB_odd_dist = get_prb(100,1,nVRB,0);
       if (nVRB_odd_dist<32)
-        allocdist0_0_odd |= (1<<nVRB_odd_dist);
+        allocdist0_0_odd |= 1U << nVRB_odd_dist;
       else if (nVRB_odd_dist<64)
-        allocdist1_0_odd |= (1<<(nVRB_odd_dist-32));
+        allocdist1_0_odd |= 1U << (nVRB_odd_dist - 32);
       else if (nVRB_odd_dist<96)
-  allocdist2_0_odd |= (1<<(nVRB_odd_dist-64));
+        allocdist2_0_odd |= 1U << (nVRB_odd_dist - 64);
       else
-  allocdist3_0_odd |= (1<<(nVRB_odd_dist-96));
+        allocdist3_0_odd |= 1U << (nVRB_odd_dist - 96);
 
 
       // Distributed Gap2, even slot
       nVRB_even_dist = get_prb(100,0,nVRB,1);
       if (nVRB_even_dist<32)
-        allocdist0_1_even |= (1<<nVRB_even_dist);
+        allocdist0_1_even |= 1U << nVRB_even_dist;
       else if (nVRB_even_dist<64)
-        allocdist1_1_even |= (1<<(nVRB_even_dist-32));
+        allocdist1_1_even |= 1U << (nVRB_even_dist - 32);
       else if (nVRB_even_dist<96)
-  allocdist2_1_even |= (1<<(nVRB_even_dist-64));
+        allocdist2_1_even |= 1U << (nVRB_even_dist - 64);
       else
-  allocdist3_1_even |= (1<<(nVRB_even_dist-96));
+        allocdist3_1_even |= 1U << (nVRB_even_dist - 96);
 
 
       // Distributed Gap2, odd slot
       nVRB_odd_dist = get_prb(100,1,nVRB,1);
       if (nVRB_odd_dist<32)
-        allocdist0_1_odd |= (1<<nVRB_odd_dist);
+        allocdist0_1_odd |= 1U << nVRB_odd_dist;
       else if (nVRB_odd_dist<64)
-        allocdist1_1_odd |= (1<<(nVRB_odd_dist-32));
+        allocdist1_1_odd |= 1U << (nVRB_odd_dist - 32);
       else if (nVRB_odd_dist<96)
-  allocdist2_1_odd |= (1<<(nVRB_odd_dist-64));
+        allocdist2_1_odd |= 1U << (nVRB_odd_dist - 64);
       else
-  allocdist3_1_odd |= (1<<(nVRB_odd_dist-96));
-
+        allocdist3_1_odd |= 1U << (nVRB_odd_dist - 96);
 
       RIV=computeRIV(100,RBstart,Lcrbs);
 
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index 3ccbd8ca35ad7218ffccebfee25c00fd35816261..13109d8f5a19286d43644e2d30a63fdda4755575 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -288,7 +288,7 @@ static void TPencode(void * arg) {
   LTE_DL_eNB_HARQ_t *hadlsch=rdata->dlsch->harq_processes[harq_pid];
   
   if ( rdata-> round == 0) {
-    uint8_t tmp[96+12+3+3*6144];
+    uint8_t tmp[96+12+3+3*6144] __attribute__((aligned(32)));
     memset(tmp,LTE_NULL, TURBO_SIMD_SOFTBITS);
     start_meas(rdata->te_stats);
     encoder(rdata->input,
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
index f5b8c6b64a0e287f90078bfbb407171ae6836705..36da4ccab0e8860d4ca875053faa38cfaf34b5cf 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h
@@ -1272,14 +1272,6 @@ uint32_t get_TBS_DL(uint8_t mcs, uint16_t nb_rb);
     @return Transport block size */
 uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb);
 
-/* \brief Return bit-map of resource allocation for a given DCI rballoc (RIV format) and vrb type
-   @param N_RB_DL number of PRB on DL
-   @param indicator for even/odd slot
-   @param vrb vrb index
-   @param Ngap Gap indicator
-*/
-uint32_t get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap);
-
 /* \brief Return prb for a given vrb index
    @param vrb_type VRB type (0=localized,1=distributed)
    @param rb_alloc_dci rballoc field from DCI
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
index b4ae44f6eab8b663a98de22b151338385c76bf33..5f8763414ef9ec6123d2fc52678267731704beb2 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
+++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h
@@ -90,7 +90,7 @@ typedef struct {
   /// Redundancy-version of the current sub-frame
   uint8_t rvidx;
   /// Turbo-code outputs (36-212 V8.6 2009-03, p.12
-  uint8_t d[MAX_NUM_ULSCH_SEGMENTS][(96+3+(3*6144))];
+  uint8_t *d[MAX_NUM_ULSCH_SEGMENTS];
   /// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17)
   uint8_t w[MAX_NUM_ULSCH_SEGMENTS][3*6144];
   /// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9)
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c
index ae3ebbce9dc0ba96df89af0ba7875bf3e7880df8..c04ec160aa1b80356a74d52dd64fbada063b4270 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_coding.c
@@ -71,6 +71,7 @@ void free_ue_ulsch(LTE_UE_ULSCH_t *ulsch) {
         for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++) {
           if (ulsch->harq_processes[i]->c[r]) {
             free16(ulsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
+            free16(ulsch->harq_processes[i]->d[r],0);
             ulsch->harq_processes[i]->c[r] = NULL;
           }
         }
@@ -86,7 +87,7 @@ void free_ue_ulsch(LTE_UE_ULSCH_t *ulsch) {
 
 LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag) {
   LTE_UE_ULSCH_t *ulsch;
-  unsigned char exit_flag = 0,i,j,r;
+  unsigned char exit_flag = 0;
   unsigned char bw_scaling =1;
 
   switch (N_RB_UL) {
@@ -113,7 +114,7 @@ LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag) {
     memset(ulsch,0,sizeof(LTE_UE_ULSCH_t));
     ulsch->Mlimit = 4;
 
-    for (i=0; i<8; i++) {
+    for (int i=0; i<8; i++) {
       ulsch->harq_processes[i] = (LTE_UL_UE_HARQ_t *)malloc16(sizeof(LTE_UL_UE_HARQ_t));
 
       //      printf("ulsch->harq_processes[%d] %p\n",i,ulsch->harq_processes[i]);
@@ -129,15 +130,11 @@ LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag) {
         }
 
         if (abstraction_flag==0) {
-          for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++) {
-            ulsch->harq_processes[i]->c[r] = (unsigned char *)malloc16(((r==0)?8:0) + 3+768); // account for filler in first segment and CRCs for multiple segment case
-
-            if (ulsch->harq_processes[i]->c[r])
-              memset(ulsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+768);
-            else {
-              LOG_E(PHY,"Can't get c\n");
-              exit_flag=2;
-            }
+          for (int r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++) {
+            ulsch->harq_processes[i]->c[r] = malloc16_clear(((r==0)?8:0) + 3+768); // account for filler in first segment and CRCs for multiple segment case
+            AssertFatal(ulsch->harq_processes[i]->c[r], "");
+            ulsch->harq_processes[i]->d[r] = malloc16_clear(96+3+(3*6144));
+            AssertFatal(ulsch->harq_processes[i]->d[r], "");
           }
         }
 
@@ -148,15 +145,7 @@ LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag) {
         exit_flag=3;
       }
     }
-
-    if ((abstraction_flag == 0) && (exit_flag==0)) {
-      for (i=0; i<8; i++)
-        for (j=0; j<96; j++)
-          for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++)
-            ulsch->harq_processes[i]->d[r][j] = LTE_NULL;
-
-      return(ulsch);
-    } else if (abstraction_flag==1)
+    if (!exit_flag)
       return(ulsch);
   }
 
@@ -191,7 +180,7 @@ uint32_t ulsch_encoding(uint8_t *a,
   uint32_t Qprime_ACK=0,Qprime_CQI=0,Qprime_RI=0,len_ACK=0,len_RI=0;
   //  uint32_t E;
   uint8_t ack_parity;
-  uint32_t i,q,j,iprime,j2;
+  uint32_t q,j,iprime,j2;
   uint16_t o_RCC;
   uint8_t o_flip[8];
   uint32_t wACK_idx;
@@ -327,6 +316,8 @@ uint32_t ulsch_encoding(uint8_t *a,
 #endif
         //  offset=0;
         start_meas(te_stats);
+        for (int z=0; z<96; z++)
+            ulsch->harq_processes[harq_pid]->d[r][z] = LTE_NULL;
         encoder(ulsch->harq_processes[harq_pid]->c[r],
                 Kr>>3,
                 &ulsch->harq_processes[harq_pid]->d[r][96],
@@ -539,8 +530,6 @@ uint32_t ulsch_encoding(uint8_t *a,
                          ulsch->q);
   }
 
-  i=0;
-
   //  Do RI coding
   if (ulsch->O_RI == 1) {
     switch (Q_m) {
@@ -691,7 +680,7 @@ uint32_t ulsch_encoding(uint8_t *a,
 
   j=0;
 
-  for (i=0; i<Qprime_RI; i++) {
+  for (int i=0; i<Qprime_RI; i++) {
     r = Rmux_prime - 1 - (i>>2);
 
     for (q=0; q<Q_m; q++)  {
@@ -725,7 +714,7 @@ uint32_t ulsch_encoding(uint8_t *a,
   }
   */
 
-  for (i=0; i<Qprime_CQI; i++) {
+  for (int i=0; i<Qprime_CQI; i++) {
     while (y[Q_m*j] != LTE_NULL) j++;
 
     for (q=0; q<Q_m; q++) {
@@ -788,7 +777,7 @@ uint32_t ulsch_encoding(uint8_t *a,
 
   j=0;
 
-  for (i=0; i<Qprime_ACK; i++) {
+  for (int i=0; i<Qprime_ACK; i++) {
     r = Rmux_prime - 1 - (i>>2);
 
     for (q=0; q<Q_m; q++) {
@@ -808,7 +797,7 @@ uint32_t ulsch_encoding(uint8_t *a,
 
   switch (Q_m) {
     case 2:
-      for (i=0; i<Cmux; i++)
+      for (int i=0; i<Cmux; i++)
         for (r=0; r<Rmux_prime; r++) {
           yptr=&y[((r*Cmux)+i)<<1];
           ulsch->h[j++] = *yptr++;
@@ -818,7 +807,7 @@ uint32_t ulsch_encoding(uint8_t *a,
       break;
 
     case 4:
-      for (i=0; i<Cmux; i++)
+      for (int i=0; i<Cmux; i++)
         for (r=0; r<Rmux_prime; r++) {
           yptr = &y[((r*Cmux)+i)<<2];
           ulsch->h[j++] = *yptr++;
@@ -830,7 +819,7 @@ uint32_t ulsch_encoding(uint8_t *a,
       break;
 
     case 6:
-      for (i=0; i<Cmux; i++)
+      for (int i=0; i<Cmux; i++)
         for (r=0; r<Rmux_prime; r++) {
           yptr = &y[((r*Cmux)+i)*6];
           ulsch->h[j++] = *yptr++;
diff --git a/openair1/PHY/MODULATION/nr_modulation.c b/openair1/PHY/MODULATION/nr_modulation.c
index 8ebd70fb92e8ce9083a64efa2d3f50cce5d97437..1b5c4f4af0a433611d28fb8ff98a3a775d2532ae 100644
--- a/openair1/PHY/MODULATION/nr_modulation.c
+++ b/openair1/PHY/MODULATION/nr_modulation.c
@@ -226,10 +226,11 @@ void nr_modulation(uint32_t *in,
     i *= 24;
     bit_cnt = i * 8;
     while (bit_cnt < length) {
-      x = *((uint32_t*)(in_bytes+i));
-      x1 = x&4095;
+      uint32_t xx;
+      memcpy(&xx, in_bytes+i, sizeof(xx));
+      x1 = xx & 4095;
       out64[j++] = nr_64qam_mod_table[x1];
-      x1 = (x>>12)&4095;
+      x1 = (xx >> 12) & 4095;
       out64[j++] = nr_64qam_mod_table[x1];
       i += 3;
       bit_cnt += 24;
diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
index fb56322e5440a89705f57faff5b96bb8b30aa29c..93bd9587a09d769edb4e6613d2aa284c41e229ef 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
@@ -119,7 +119,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
            measurements->n0_subband_power[aarx][rb]=0;   
       }
       int offset0 = (slot&3)*(frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size) + (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
-      if ((gNB->rb_mask_ul[s][rb>>5]&(1<<(rb&31))) == 0) {  // check that rb was not used in this subframe
+      if ((gNB->rb_mask_ul[s][rb >> 5] & (1U << (rb & 31))) == 0) {  // check that rb was not used in this subframe
         nb_symb[rb]++;          
         for (int aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
           int offset = offset0 + (s*frame_parms->ofdm_symbol_size);
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
index d32fd77b0373cf0e3acea7d61a3aa7283d67a8c8..30dbc39185c125587c105963d263108dce39965a 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c
@@ -123,7 +123,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
                           rel15->dlDmrsSymbPos);
       n_ptrs = (rel15->rbSize + rel15->PTRSFreqDensity - 1)/rel15->PTRSFreqDensity;
     }
-    int16_t mod_ptrs[n_ptrs<<1] __attribute__ ((aligned(16)));
 
     /// CRC, coding, interleaving and rate matching
     AssertFatal(harq->pdu!=NULL,"harq->pdu is null\n");
@@ -302,12 +301,14 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
 
         /* calculate if current symbol is PTRS symbols */
         ptrs_idx = 0;
-
+        int16_t *mod_ptrs = NULL;
         if(rel15->pduBitmap & 0x1) {
           ptrs_symbol = is_ptrs_symbol(l,dlPtrsSymPos);
           if(ptrs_symbol) {
             /* PTRS QPSK Modulation for each OFDM symbol in a slot */
             LOG_D(PHY,"Doing ptrs modulation for symbol %d, n_ptrs %d\n",l,n_ptrs);
+            int16_t mod_ptrsBuf[n_ptrs<<1] __attribute__ ((aligned(16)));
+            mod_ptrs =mod_ptrsBuf;
             nr_modulation(pdsch_dmrs[l][rel15->SCID], (n_ptrs<<1), DMRS_MOD_ORDER, mod_ptrs);
           }
         }
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 1428987d404aa04de86469f5e2688ebf4104033e..5c44bde4fe490f554d0ddf0189f621c131ff6221 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -569,7 +569,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
               LOG_D(PHY,"symbol %d Filling rb_mask_ul rb_size %d\n",symbol,ulsch_harq->ulsch_pdu.rb_size);
               for (rb=0; rb<ulsch_harq->ulsch_pdu.rb_size; rb++) {
                 rb2 = rb+ulsch_harq->ulsch_pdu.rb_start+ulsch_harq->ulsch_pdu.bwp_start;
-                gNB->rb_mask_ul[symbol][rb2>>5] |= (1<<(rb2&31));
+                gNB->rb_mask_ul[symbol][rb2 >> 5] |= 1U << (rb2 & 31);
               }
             }
           }
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index d366ae9ec17591bfe70c73c47a28fdc409054776..38fa3880bbd09183590b4c2c5cb674d880c9c992 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -1321,8 +1321,7 @@ int is_ssb_in_slot(fapi_nr_config_request_t *config, int frame, int slot, NR_DL_
   //uint8_t half_frame_index = fp->half_frame_bit;
   //uint8_t i_ssb = fp->ssb_index;
   uint8_t Lmax = fp->Lmax;
-
-  if (!(frame%(1<<(config->ssb_table.ssb_period-1)))){
+  if ((config->ssb_table.ssb_period > 0) && !(frame % (1 << (config->ssb_table.ssb_period - 1)))) {
 
     if(Lmax <= 8) {
       if(slot <=3 && (((config->ssb_table.ssb_mask_list[0].ssb_mask << 2*slot)&0x80000000) == 0x80000000 || ((config->ssb_table.ssb_mask_list[0].ssb_mask << (2*slot +1))&0x80000000) == 0x80000000))
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index d715423bb14552a10fa5dc2ed3f466b79cb3f51e..8aff47c86b8159ab260d10741042833de90f18db 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -512,12 +512,16 @@ int main(int argc, char **argv) {
   int re;
   int s,Kr,Kr_bytes;
   LTE_DL_FRAME_PARMS *frame_parms;
-  double s_re0[30720*NB_ANTENNAS_TX],s_im0[30720*NB_ANTENNAS_TX],r_re0[30720*NB_ANTENNAS_RX],r_im0[30720*NB_ANTENNAS_RX];
-  double s_re1[30720*NB_ANTENNAS_TX],s_im1[30720*NB_ANTENNAS_TX],r_re1[30720*NB_ANTENNAS_RX],r_im1[30720*NB_ANTENNAS_RX];
-  double *s_re[NB_ANTENNAS_TX]= {s_re0,s_re1};
-  double *s_im[NB_ANTENNAS_TX]= {s_im0,s_im1};
-  double *r_re[NB_ANTENNAS_RX]= {r_re0,r_re1};
-  double *r_im[NB_ANTENNAS_RX]= {r_im0,r_im1};
+  double *tmpTX[4], *tmpRX[4] ;
+  for (int i = 0; i < 4; i++) {
+    tmpTX[i] = malloc(30720 * NB_ANTENNAS_TX * sizeof(*tmpTX));
+    tmpRX[i] = malloc(30720 * NB_ANTENNAS_RX * sizeof(*tmpRX));
+  }
+  double *s_re[NB_ANTENNAS_TX] = {tmpTX[0], tmpTX[1]};
+  double *s_im[NB_ANTENNAS_TX] = {tmpTX[2], tmpTX[3]};
+  double *r_re[NB_ANTENNAS_RX] = {tmpRX[0], tmpRX[1]};
+  double *r_im[NB_ANTENNAS_RX] = {tmpRX[2], tmpRX[3]};
+  
   uint8_t transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=2;
   int eNB_id = 0;
   unsigned char round;
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index 0843d00ffd8ea4ce5921560ddcb15019c540fce4..0f98eb337a66d42b18b1971791dce39263e3cf87 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -358,7 +358,7 @@ int main(int argc, char **argv) {
   unsigned short input_buffer_length;
   unsigned int ret;
   unsigned int coded_bits_per_codeword,nsymb;
-  unsigned int tx_lev=0,tx_lev_dB=0,trials,errs[5]= {0,0,0,0,0},round_trials[4]= {0,0,0,0};
+  unsigned int tx_lev = 0, tx_lev_dB = 0, trials, errs[6] = {0}, round_trials[4] = {0};
   FILE *bler_fd=NULL;
   char bler_fname[512];
   FILE *time_meas_fd=NULL;
@@ -387,7 +387,6 @@ int main(int argc, char **argv) {
   double cpu_freq_GHz;
   int iter_trials;
   uint32_t UL_alloc_pdu;
-  int s,Kr,Kr_bytes;
   int dump_perf=0;
   static int dump_table =0;
   double effective_rate=0.0;
@@ -1233,20 +1232,21 @@ int main(int argc, char **argv) {
 
             if (n_frames==1) {
               printf("ULSCH errors found o_ACK[0]= %d\n",eNB->ulsch[0]->harq_processes[harq_pid]->o_ACK[0]);
-
+#ifdef DUMP_EACH_VALUE
+              int Kr_bytes;
               for (s=0; s<eNB->ulsch[0]->harq_processes[harq_pid]->C; s++) {
                 if (s<eNB->ulsch[0]->harq_processes[harq_pid]->Cminus)
-                  Kr = eNB->ulsch[0]->harq_processes[harq_pid]->Kminus;
+                  Kr_bytes = eNB->ulsch[0]->harq_processes[harq_pid]->Kminus;
                 else
-                  Kr = eNB->ulsch[0]->harq_processes[harq_pid]->Kplus;
-
-                Kr_bytes = Kr>>3;
+                  Kr_bytes = eNB->ulsch[0]->harq_processes[harq_pid]->Kplus;
+                Kr_bytes = Kr_bytes >> 3;
                 printf("Decoded_output (Segment %d):\n",s);
 
                 for (i=0; i<Kr_bytes; i++)
                   printf("%d : %x (%x)\n",i,eNB->ulsch[0]->harq_processes[harq_pid]->c[s][i],
                          eNB->ulsch[0]->harq_processes[harq_pid]->c[s][i]^UE->ulsch[0]->harq_processes[harq_pid]->c[s][i]);
               }
+#endif
 
               dump_ulsch(eNB,eNB->proc.frame_rx,subframe,0,round);
               round=5;
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index 78b253ca2af42c756fa56e37ba37c02f1f350ca6..8500749fe285827f94987e0bfb4fb084b99a56bd 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -1142,7 +1142,7 @@ int main(int argc, char **argv)
         Sched_INFO.frame     = frame;
         Sched_INFO.slot      = slot;
         Sched_INFO.DL_req    = &gNB_mac->DL_req[0];
-        Sched_INFO.UL_tti_req    = gNB_mac->UL_tti_req_ahead[slot];
+        Sched_INFO.UL_tti_req    = gNB_mac->UL_tti_req_ahead[0];
         Sched_INFO.UL_dci_req  = NULL;
         Sched_INFO.TX_req    = &gNB_mac->TX_req[0];
         pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx);
diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c
index 072f0e58de8f295c591c545dcb8ab0e8275a47f7..2804a9ec1e6eae746b7d530b6593b08b17f6e65b 100644
--- a/openair2/LAYER2/NR_MAC_UE/config_ue.c
+++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c
@@ -190,7 +190,7 @@ void config_common_ue_sa(NR_UE_MAC_INST_t *mac,
   cfg->ssb_table.ssb_subcarrier_offset = mac->ssb_subcarrier_offset;
 
   if (mac->frequency_range == FR1){
-    cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst.inOneGroup.buf[0]<<24;
+    cfg->ssb_table.ssb_mask_list[0].ssb_mask = ((uint32_t) scc->ssb_PositionsInBurst.inOneGroup.buf[0]) << 24;
     cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
   }
   else{
@@ -353,7 +353,7 @@ void config_common_ue(NR_UE_MAC_INST_t *mac,
       cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
       break;
     case 2 :
-      cfg->ssb_table.ssb_mask_list[0].ssb_mask = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]<<24;
+      cfg->ssb_table.ssb_mask_list[0].ssb_mask = ((uint32_t) scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]) << 24;
       cfg->ssb_table.ssb_mask_list[1].ssb_mask = 0;
       break;
     case 3 :
diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
index 38f774be766e6b3cdd72dd09bce832f612323059..aa6879146643364686dc2d2c181631488c079ab9 100644
--- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h
+++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h
@@ -257,13 +257,6 @@ void get_bwp_info(NR_UE_MAC_INST_t *mac,
 
 NR_BWP_DownlinkCommon_t *get_bwp_downlink_common(NR_UE_MAC_INST_t *mac, NR_BWP_Id_t dl_bwp_id);
 
-uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
-                            uint8_t dci_format,
-                            uint8_t dci_length,
-                            uint16_t rnti,
-                            uint64_t *dci_pdu,
-                            dci_pdu_rel15_t *nr_pdci_info_extracted);
-
 NR_PUSCH_TimeDomainResourceAllocationList_t *choose_ul_tda_list(const NR_PUSCH_Config_t *pusch_Config,NR_PUSCH_ConfigCommon_t *pusch_ConfigCommon);
 NR_PDSCH_TimeDomainResourceAllocationList_t *choose_dl_tda_list(NR_PDSCH_Config_t *pdsch_Config,NR_PDSCH_ConfigCommon_t *pdsch_ConfigCommon);
 
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index 6166fc7038dedc047ffb64e70433295dec582bb0..ccb1b4e72a1dd9f311668cb0b190beea81a0d03d 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -134,6 +134,13 @@ const initial_pucch_resource_t initial_pucch_resource[16] = {
 };
 
 
+static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
+                            uint8_t dci_format,
+                            uint8_t dci_length,
+                            uint16_t rnti,
+                            uint64_t *dci_pdu,
+                            dci_pdu_rel15_t *nr_pdci_info_extracted);
+
 void nr_ue_init_mac(module_id_t module_idP) {
   int i;
 
@@ -985,7 +992,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr
     if (dci->tpc == 3) dlsch_config_pdu_1_0->accumulated_delta_PUCCH = 3;
     // Sanity check for pucch_resource_indicator value received to check for false DCI.
     valid = 0;
-    if (mac->ULbwp[ul_bwp_id-1] &&
+    if (ul_bwp_id > 0 &&
+        mac->ULbwp[ul_bwp_id-1] &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pucch_Config &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pucch_Config->choice.setup&&
@@ -1512,13 +1520,12 @@ void nr_ue_configure_pucch(NR_UE_MAC_INST_t *mac,
   NR_BWP_UplinkCommon_t *initialUplinkBWP;
   if (mac->scc) initialUplinkBWP = mac->scc->uplinkConfigCommon->initialUplinkBWP;
   else          initialUplinkBWP = &mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP;
-  NR_BWP_Uplink_t *ubwp = mac->ULbwp[bwp_id-1];
-  if (mac->cg && ubwp &&
+  if (mac->cg && bwp_id > 1 && mac->ULbwp[bwp_id - 1] &&
       mac->cg->spCellConfig &&
       mac->cg->spCellConfig->spCellConfigDedicated &&
       mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig &&
       mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
-    scs = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
+    scs = mac->ULbwp[bwp_id - 1]->bwp_Common->genericParameters.subcarrierSpacing;
   }
   else
     scs = initialUplinkBWP->genericParameters.subcarrierSpacing;
@@ -2340,17 +2347,16 @@ bool trigger_periodic_scheduling_request(NR_UE_MAC_INST_t *mac,
   NR_BWP_Id_t bwp_id = mac->UL_BWP_Id;
   NR_PUCCH_Config_t *pucch_Config = NULL;
   int scs;
-  NR_BWP_Uplink_t *ubwp = mac->ULbwp[bwp_id-1];
   NR_BWP_UplinkCommon_t *initialUplinkBWP;
   if (mac->scc) initialUplinkBWP = mac->scc->uplinkConfigCommon->initialUplinkBWP;
   else          initialUplinkBWP = &mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP;
 
-  if (mac->cg && ubwp &&
+  if (mac->cg && bwp_id && mac->ULbwp[bwp_id - 1] &&
       mac->cg->spCellConfig &&
       mac->cg->spCellConfig->spCellConfigDedicated &&
       mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig &&
       mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
-    scs = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
+    scs = mac->ULbwp[bwp_id - 1]->bwp_Common->genericParameters.subcarrierSpacing;
   }
   else
     scs = initialUplinkBWP->genericParameters.subcarrierSpacing;
@@ -2732,7 +2738,7 @@ int get_n_rb(NR_UE_MAC_INST_t *mac, int rnti_type){
 
 }
 
-uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
+static uint8_t nr_extract_dci_info(NR_UE_MAC_INST_t *mac,
                             uint8_t dci_format,
                             uint8_t dci_size,
                             uint16_t rnti,
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
index f6a42ccaab6408878b9e58fc8904b74d85885837..49b8e3d05fac1821a56280521650b3489f795a57 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
@@ -118,12 +118,13 @@ long get_k2(NR_UE_MAC_INST_t *mac, uint8_t time_domain_ind) {
 
   NR_BWP_Id_t ul_bwp_id = mac->UL_BWP_Id;
   // Get K2 from RRC configuration
-  NR_PUSCH_Config_t *pusch_config=mac->ULbwp[ul_bwp_id-1] ? mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup : NULL;
+  NR_PUSCH_Config_t *pusch_config= ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ? mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup : NULL;
   NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = NULL;
   if (pusch_config && pusch_config->pusch_TimeDomainAllocationList) {
     pusch_TimeDomainAllocationList = pusch_config->pusch_TimeDomainAllocationList->choice.setup;
   }
-  else if (mac->ULbwp[ul_bwp_id-1] &&
+  else if (ul_bwp_id > 0 &&
+	   mac->ULbwp[ul_bwp_id-1] &&
 	   mac->ULbwp[ul_bwp_id-1]->bwp_Common&&
 	   mac->ULbwp[ul_bwp_id-1]->bwp_Common->pusch_ConfigCommon&&
 	   mac->ULbwp[ul_bwp_id-1]->bwp_Common->pusch_ConfigCommon->choice.setup &&
@@ -169,7 +170,7 @@ fapi_nr_ul_config_request_t *get_ul_config_request(NR_UE_MAC_INST_t *mac, int sl
   // Calculate the index of the UL slot in mac->ul_config_request list. This is
   // based on the TDD pattern (slot configuration period) and number of UL+mixed
   // slots in the period. TS 38.213 Sec 11.1
-  int mu = mac->ULbwp[ul_bwp_id-1] ?
+  int mu = ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ?
     mac->ULbwp[ul_bwp_id-1]->bwp_Common->genericParameters.subcarrierSpacing :
     mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.subcarrierSpacing;
   const int n = nr_slots_per_frame[mu];
@@ -205,7 +206,7 @@ void ul_layers_config(NR_UE_MAC_INST_t * mac, nfapi_nr_ue_pusch_pdu_t *pusch_con
     srs_config = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->srs_Config->choice.setup;
   }
 
-  NR_PUSCH_Config_t *pusch_Config = mac->ULbwp[ul_bwp_id-1] ?
+  NR_PUSCH_Config_t *pusch_Config = ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ?
     mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup :
     (ubwpd?
      ubwpd->pusch_Config->choice.setup:
@@ -361,7 +362,7 @@ void ul_ports_config(NR_UE_MAC_INST_t *mac, int *n_front_load_symb, nfapi_nr_ue_
       mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP)
     ubwpd = mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
 
-  NR_PUSCH_Config_t *pusch_Config = mac->ULbwp[ul_bwp_id-1] ? mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup : (ubwpd?ubwpd->pusch_Config->choice.setup:NULL);
+  NR_PUSCH_Config_t *pusch_Config = ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ? mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup : (ubwpd?ubwpd->pusch_Config->choice.setup:NULL);
   AssertFatal(pusch_Config!=NULL,"pusch_Config shouldn't be null\n");
 
   long	transformPrecoder;
@@ -581,7 +582,7 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
   if (rar_grant) {
 
     // Note: for Msg3 or MsgA PUSCH transmission the N_PRB_oh is always set to 0
-    NR_BWP_Uplink_t *ubwp = mac->ULbwp[ul_bwp_id-1];
+    NR_BWP_Uplink_t *ubwp = ul_bwp_id > 0 ? mac->ULbwp[ul_bwp_id - 1] : NULL;
     NR_BWP_UplinkDedicated_t *ibwp;
     int scs,abwp_start,abwp_size,startSymbolAndLength,mappingtype;
     NR_PUSCH_Config_t *pusch_Config=NULL;
@@ -839,11 +840,15 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
                                mappingtype, add_pos, dmrslength,
                                pusch_config_pdu->start_symbol_index,
                                mac->scc ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position);
-    if (mac->ULbwp[ul_bwp_id-1] && pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_disabled) {
-      if (*dci_format != NR_UL_DCI_FORMAT_0_1) {
-        pusch_config_pdu->num_dmrs_cdm_grps_no_data = 1;
-      }
-    } else if (*dci_format == NR_UL_DCI_FORMAT_0_0 || (mac->ULbwp[ul_bwp_id-1] && pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled)) {
+    if (ul_bwp_id > 0 &&
+        mac->ULbwp[ul_bwp_id - 1] &&
+        pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_disabled &&
+        *dci_format != NR_UL_DCI_FORMAT_0_1) {
+      pusch_config_pdu->num_dmrs_cdm_grps_no_data = 1;
+    } else if (*dci_format == NR_UL_DCI_FORMAT_0_0 ||
+               (ul_bwp_id > 0 &&
+                mac->ULbwp[ul_bwp_id-1] &&
+                pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled)) {
       pusch_config_pdu->num_dmrs_cdm_grps_no_data = 2;
     }
 
@@ -859,7 +864,8 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac,
     else N_PRB_oh = 0;
 
     /* PTRS */
-    if (mac->ULbwp[ul_bwp_id-1] &&
+    if (ul_bwp_id > 0 &&
+        mac->ULbwp[ul_bwp_id-1] &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config &&
         mac->ULbwp[ul_bwp_id-1]->bwp_Dedicated->pusch_Config->choice.setup &&
@@ -1086,9 +1092,10 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
       dcireq.dl_config_req = mac->dl_config_request;
 
       fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id, dl_info->phy_data);
-      if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL)
+      if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) {
         LOG_D(NR_MAC,"1# scheduled_response transmitted, %d, %d\n", rx_frame, rx_slot);
-      mac->if_module->scheduled_response(&scheduled_response);
+        mac->if_module->scheduled_response(&scheduled_response);
+      }
     }
     else {
       // this is for Msg2/Msg4
@@ -1557,15 +1564,14 @@ int nr_ue_pusch_scheduler(NR_UE_MAC_INST_t *mac,
 
   int delta = 0;
   NR_BWP_Id_t ul_bwp_id = mac->UL_BWP_Id;
-  NR_BWP_Uplink_t *ubwp = mac->ULbwp[ul_bwp_id-1];
 
   // Get the numerology to calculate the Tx frame and slot
-  int mu = ubwp ?
-    ubwp->bwp_Common->genericParameters.subcarrierSpacing :
+  int mu = ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ?
+    mac->ULbwp[ul_bwp_id-1]->bwp_Common->genericParameters.subcarrierSpacing :
     mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.subcarrierSpacing;
 
-  NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ubwp ?
-    ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList:
+  NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = ul_bwp_id > 0 && mac->ULbwp[ul_bwp_id-1] ?
+    mac->ULbwp[ul_bwp_id-1]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList:
     mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
   // k2 as per 3GPP TS 38.214 version 15.9.0 Release 15 ch 6.1.2.1.1
   // PUSCH time domain resource allocation is higher layer configured from uschTimeDomainAllocationList in either pusch-ConfigCommon
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index 218b75b2e816663c24e694ad8516077f2256053e..20ac69ce55c94169bd046292e558f3038c86d32c 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -366,7 +366,7 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
       cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
       break;
     case 2 :
-      cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]<<24;
+      cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = ((uint32_t) scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]) << 24;
       cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
       break;
     case 3 :
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
index d9a0a50b7e8dd832c2f4254bf237703167d0c773..d32709e73136cd4cc66581f359ea8e5410a7a72b 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
@@ -1349,6 +1349,8 @@ void nr_schedule_ue_spec(module_id_t module_id,
           header->L = htons(bufEnd-buf);
           dlsch_total_bytes += bufEnd-buf;
 
+          for (; ((intptr_t)buf) % 4; buf++)
+            *buf = lrand48() & 0xff;
           for (; buf < bufEnd - 3; buf += 4) {
             uint32_t *buf32 = (uint32_t *)buf;
             *buf32 = lrand48();
diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 078f7f51a170f25eb75cb3664682bf009b66250a..53817af48e2f172365b2c968b68d18abf546d782 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -1320,11 +1320,11 @@ nr_rrc_ue_process_masterCellGroup(
     //TODO (perform SCell addition/modification as specified in 5.3.5.5.9)
   }
 
-  if( cellGroupConfig->ext2->bh_RLC_ChannelToReleaseList_r16 != NULL){
+  if(cellGroupConfig->ext2 != NULL && cellGroupConfig->ext2->bh_RLC_ChannelToReleaseList_r16 != NULL){
     //TODO (perform the BH RLC channel addition/modification as specified in 5.3.5.5.11)
   }
 
-  if( cellGroupConfig->ext2->bh_RLC_ChannelToAddModList_r16 != NULL){
+  if(cellGroupConfig->ext2 != NULL && cellGroupConfig->ext2->bh_RLC_ChannelToAddModList_r16 != NULL){
     //TODO (perform the BH RLC channel addition/modification as specified in 5.3.5.5.11)
   }
 }