diff --git a/radio/fhi_72/oaioran.c b/radio/fhi_72/oaioran.c
index aa04e16c38c239500546fcb3a8e05d5e9f79396b..247293c18f8389e77c04bbbfde7a6490de32f471 100644
--- a/radio/fhi_72/oaioran.c
+++ b/radio/fhi_72/oaioran.c
@@ -81,7 +81,11 @@ void oai_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status)
   struct xran_device_ctx *xran_ctx = xran_dev_get_ctx();
   const struct xran_fh_init *fh_init = &xran_ctx->fh_init;
   int num_ports = fh_init->xran_ports;
-  static int rx_RU[XRAN_PORTS_NUM][20] = {0};
+
+  const struct xran_fh_config *fh_config = &xran_ctx->fh_cfg;
+  const int slots_per_subframe = 1 << fh_config->frame_conf.nNumerology;
+
+  static int rx_RU[XRAN_PORTS_NUM][160] = {0};
   uint32_t rx_tti = callback_tag->slotiId;
 
   tti = xran_get_slot_idx_from_tti(rx_tti, &frame, &subframe, &slot, &second);
@@ -95,7 +99,7 @@ void oai_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status)
       }
       first_rx_set = 1;
       if (first_read_set == 1) {
-        slot2 = slot + (subframe << 1);
+        slot2 = slot + (subframe * slots_per_subframe);
         rx_RU[ru_id][slot2] = 1;
         if (last_frame > 0 && frame > 0
             && ((slot2 > 0 && last_frame != frame) || (slot2 == 0 && last_frame != ((1024 + frame - 1) & 1023))))
@@ -164,14 +168,17 @@ int oai_physide_ul_full_slot_call_back(void *param)
 int read_prach_data(ru_info_t *ru, int frame, int slot)
 {
   /* calculate tti and subframe_id from frame, slot num */
-  int tti = 20 * (frame) + (slot);
-  uint32_t subframe = XranGetSubFrameNum(tti, 2, 10);
-  uint32_t is_prach_slot = xran_is_prach_slot(0, subframe, (slot % 2));
   int sym_idx = 0;
 
   struct xran_device_ctx *xran_ctx = xran_dev_get_ctx();
   struct xran_prach_cp_config *pPrachCPConfig = &(xran_ctx->PrachCPConfig);
   struct xran_ru_config *ru_conf = &(xran_ctx->fh_cfg.ru_conf);
+  int slots_per_frame = 10 << xran_ctx->fh_cfg.frame_conf.nNumerology;
+  int slots_per_subframe = 1 << xran_ctx->fh_cfg.frame_conf.nNumerology;
+
+  int tti = slots_per_frame * (frame) + (slot);
+  uint32_t subframe = slot / slots_per_subframe;
+  uint32_t is_prach_slot = xran_is_prach_slot(0, subframe, (slot % slots_per_subframe));
 
   int nb_rx_per_ru = ru->nb_rx / xran_ctx->fh_init.xran_ports;
   /* If it is PRACH slot, copy prach IQ from XRAN PRACH buffer to OAI PRACH buffer */
@@ -275,17 +282,19 @@ int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot)
 #endif
   // return(0);
 
-  int tti = (*frame * 20) + *slot;
+  struct xran_device_ctx *xran_ctx = xran_dev_get_ctx();
+  int slots_per_frame = 10 << xran_ctx->fh_cfg.frame_conf.nNumerology;
+
+  int tti = slots_per_frame * (*frame) + (*slot);
 
   read_prach_data(ru, *frame, *slot);
 
-  struct xran_device_ctx *xran_ctx = xran_dev_get_ctx();
   const struct xran_fh_init *fh_init = &xran_ctx->fh_init;
   int nPRBs = xran_ctx->fh_cfg.nULRBs;
   int fftsize = 1 << xran_ctx->fh_cfg.ru_conf.fftSize;
 
   int slot_offset_rxdata = 3 & (*slot);
-  uint32_t slot_size = 4 * 14 * 4096;
+  uint32_t slot_size = 4 * 14 * fftsize;
   uint8_t *rx_data = (uint8_t *)ru->rxdataF[0];
   uint8_t *start_ptr = NULL;
   int nb_rx_per_ru = ru->nb_rx / fh_init->xran_ports;
@@ -324,7 +333,7 @@ int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot)
         else
           pData = p_sec_desc->pData;
         ptr = pData;
-        pos = (int32_t *)(start_ptr + (4 * sym_idx * 4096));
+        pos = (int32_t *)(start_ptr + (4 * sym_idx * fftsize));
         if (ptr == NULL || pos == NULL)
           continue;
 
@@ -451,9 +460,7 @@ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp)
                                    .sBufferList.pBuffers->pData;
         struct xran_prb_map *pPrbMap = (struct xran_prb_map *)pPrbMapData;
         ptr = pData;
-        pos =
-            &ru->txdataF_BF[ant_id][sym_idx * 4096 /*fp->ofdm_symbol_size*/]; // We had to use a different ru structure than benetel
-                                                                              // so the access to the buffer is not the same.
+        pos = &ru->txdataF_BF[ant_id][sym_idx * fftsize];
 
         uint8_t *u8dptr;
         struct xran_prb_map *pRbMap = pPrbMap;
diff --git a/radio/fhi_72/oran_isolate.c b/radio/fhi_72/oran_isolate.c
index 9624217c5d711eb8df79e98140ab6fca3220f899..bdc786f482203c5b0f194e5caeec59b459f1a777 100644
--- a/radio/fhi_72/oran_isolate.c
+++ b/radio/fhi_72/oran_isolate.c
@@ -209,10 +209,11 @@ void oran_fh_if4p5_south_in(RU_t *ru, int *frame, int *slot)
     printf("ORAN: %d.%d ORAN_fh_if4p5_south_in ERROR in RX function \n", f, sl);
   }
 
+  int slots_per_frame = 10 << (ru->openair0_cfg.nr_scs_for_raster);
   proc->tti_rx = sl;
   proc->frame_rx = f;
-  proc->tti_tx = (sl + sl_ahead) % 20;
-  proc->frame_tx = (sl > (19 - sl_ahead)) ? (f + 1) & 1023 : f;
+  proc->tti_tx = (sl + sl_ahead) % slots_per_frame;
+  proc->frame_tx = (sl > (slots_per_frame - 1 - sl_ahead)) ? (f + 1) & 1023 : f;
 
   if (proc->first_rx == 0) {
     if (proc->tti_rx != *slot) {