diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index 18ef2f66f46f5e261a9601cf00d691df77f9896e..bf39d092bf65c08f525eb5d5a6b02b791f53db08 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -1178,21 +1178,23 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
         const double N_TA_max = Ta_max * bw_scaling * tc_factor;
 
         NR_UE_MAC_INST_t *mac = get_mac_inst(0);
+        NR_BWP_Id_t ul_bwp = mac->UL_BWP_Id;
+        NR_BWP_Id_t dl_bwp = mac->DL_BWP_Id;
 
         NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = NULL;
-        if (mac->ULbwp[0] &&
-            mac->ULbwp[0]->bwp_Dedicated &&
-            mac->ULbwp[0]->bwp_Dedicated->pusch_Config &&
-            mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup &&
-            mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup->pusch_TimeDomainAllocationList) {
-          pusch_TimeDomainAllocationList = mac->ULbwp[0]->bwp_Dedicated->pusch_Config->choice.setup->pusch_TimeDomainAllocationList->choice.setup;
+        if (mac->ULbwp[ul_bwp] &&
+            mac->ULbwp[ul_bwp]->bwp_Dedicated &&
+            mac->ULbwp[ul_bwp]->bwp_Dedicated->pusch_Config &&
+            mac->ULbwp[ul_bwp]->bwp_Dedicated->pusch_Config->choice.setup &&
+            mac->ULbwp[ul_bwp]->bwp_Dedicated->pusch_Config->choice.setup->pusch_TimeDomainAllocationList) {
+          pusch_TimeDomainAllocationList = mac->ULbwp[ul_bwp]->bwp_Dedicated->pusch_Config->choice.setup->pusch_TimeDomainAllocationList->choice.setup;
         }
-        else if (mac->ULbwp[0] &&
-                 mac->ULbwp[0]->bwp_Common &&
-                 mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon &&
-                 mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup &&
-                 mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList) {
-          pusch_TimeDomainAllocationList = mac->ULbwp[0]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
+        else if (mac->ULbwp[ul_bwp] &&
+                 mac->ULbwp[ul_bwp]->bwp_Common &&
+                 mac->ULbwp[ul_bwp]->bwp_Common->pusch_ConfigCommon &&
+                 mac->ULbwp[ul_bwp]->bwp_Common->pusch_ConfigCommon->choice.setup &&
+                 mac->ULbwp[ul_bwp]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList) {
+          pusch_TimeDomainAllocationList = mac->ULbwp[ul_bwp]->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
         }
         else if (mac->scc_SIB &&
                  mac->scc_SIB->uplinkConfigCommon &&
@@ -1203,12 +1205,12 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
         }
         long mapping_type_ul = pusch_TimeDomainAllocationList ? pusch_TimeDomainAllocationList->list.array[0]->mappingType : NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
 
-        NR_PDSCH_Config_t *pdsch_Config = (mac->DLbwp[0] && mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup) ? mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup : NULL;
+        NR_PDSCH_Config_t *pdsch_Config = (mac->DLbwp[dl_bwp] && mac->DLbwp[dl_bwp]->bwp_Dedicated->pdsch_Config->choice.setup) ? mac->DLbwp[dl_bwp]->bwp_Dedicated->pdsch_Config->choice.setup : NULL;
         NR_PDSCH_TimeDomainResourceAllocationList_t *pdsch_TimeDomainAllocationList = NULL;
-        if (mac->DLbwp[0] && mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
+        if (mac->DLbwp[dl_bwp] && mac->DLbwp[dl_bwp]->bwp_Dedicated->pdsch_Config->choice.setup->pdsch_TimeDomainAllocationList)
           pdsch_TimeDomainAllocationList = pdsch_Config->pdsch_TimeDomainAllocationList->choice.setup;
-        else if (mac->DLbwp[0] && mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
-          pdsch_TimeDomainAllocationList = mac->DLbwp[0]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
+        else if (mac->DLbwp[dl_bwp] && mac->DLbwp[dl_bwp]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList)
+          pdsch_TimeDomainAllocationList = mac->DLbwp[dl_bwp]->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
         else if (mac->scc_SIB && mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdsch_ConfigCommon->choice.setup)
           pdsch_TimeDomainAllocationList = mac->scc_SIB->downlinkConfigCommon.initialDownlinkBWP.pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
         long mapping_type_dl = pdsch_TimeDomainAllocationList ? pdsch_TimeDomainAllocationList->list.array[0]->mappingType : NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
@@ -1262,7 +1264,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
           d_2_1 = 1;
 
         /* d_2_2 */
-        const double d_2_2 = 0.0; // set to 0 because there is only 1 BWP: TODO this should corresponds to the switching time as defined in TS 38.133
+        const double d_2_2 = pusch_d_2_2_timing_capability_1[numerology][1];
 
         /* N_t_1 time duration in msec of N_1 symbols corresponding to a PDSCH reception time
         // N_t_2 time duration in msec of N_2 symbols corresponding to a PUSCH preparation time */
diff --git a/openair1/SCHED_NR_UE/phy_sch_processing_time.h b/openair1/SCHED_NR_UE/phy_sch_processing_time.h
index 1962df22eed3d2b92bca7b756420894b75fdcecc..81cc4496a2634384722c13273d81c97c3aa695cc 100644
--- a/openair1/SCHED_NR_UE/phy_sch_processing_time.h
+++ b/openair1/SCHED_NR_UE/phy_sch_processing_time.h
@@ -106,4 +106,36 @@ float pusch_N_2_timing_capability_2[3][2] = {
 {  0,      5   },
 {  1,      5.5 },
 {  2,      11  },
-};
\ No newline at end of file
+};
+
+/* TS 38.133 Table 8.6.2-1: BWP switch delay capability 1
+//   corresponding to the PUSCH preparation time d_2_2 [slots]
+// where mu corresponds to the one of {mu_DL, mu_UL}
+//   resulting with the largest T_proc_2
+// where mu_DL is the SCS with which the PDCCH
+//   carrying the DCI scheduling the PUSCH was transmitted
+//   mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
+*/
+float pusch_d_2_2_timing_capability_1[4][2] = {
+/* mu      d_2_2   */
+{  0,      1   },
+{  1,      2   },
+{  2,      3   },
+{  3,      6   },
+};
+
+/* TS 38.133 Table 8.6.2-1: BWP switch delay capability 2
+//   corresponding to the PUSCH preparation time d_2_2 [slots]
+// where mu corresponds to the one of {mu_DL, mu_UL}
+//   resulting with the largest T_proc_2
+// where mu_DL is the SCS with which the PDCCH
+//   carrying the DCI scheduling the PUSCH was transmitted
+//   mu_UL is the SCS of the UL channel with which PUSCH to be transmitted
+*/
+float pusch_d_2_2_timing_capability_2[4][2] = {
+/* mu      d_2_2   */
+{  0,      3   },
+{  1,      5   },
+{  2,      9   },
+{  3,      18  },
+};
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
index 1d0215bb2aff8b3f64d0d66a17d58258c7f87aaf..a0df119c1c7241ffc1f71493a937548411acae89 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
@@ -351,8 +351,6 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
   protocol_ctxt_t   ctxt={0};
   PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frame, slot,module_idP);
 
-  const int bwp_id = 1;
-
   gNB_MAC_INST *gNB = RC.nrmac[module_idP];
   NR_COMMON_channels_t *cc = gNB->common_channels;
   NR_ServingCellConfigCommon_t        *scc     = cc->ServingCellConfigCommon;