diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 7840e89e28ce64f2efcf62288468b701a8029656..21317f0f2a67c18b6a71e6ed49b3ea0601833fa1 100755
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -351,22 +351,24 @@
     </testCase>
 
     <testCase id="nr_ulsim.misc">
-      <desc>nr_ulsim Test cases. (Test1: MCS 9, 106 PRBs),
-                                 (Test2: MCS 16, 50 PRBs),
-                                 (Test3: MCS 28, 50 PRBs),
-                                 (Test4: MCS 9, 217 PRBs),
-                                 (Test5: MCS 9, 273 PRBs),
-                                 (Test6: PUSCH Type A, 2 DMRS Symbols),
-                                 (Test7: PUSCH Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
-                                 (Test8: PUSCH Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
-                                 (Test9: PUSCH Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols),
-                                 (Test10: 25 PRBs, 15 kHz SCS),
-                                 (Test11: MCS 0, low SNR performance)
-                                 (Test12: MCS 28, 106 PRBs, Time shift 8)</desc>
+      <desc>nr_ulsim Test cases. (Test1: MCS 9 106 PRBs),
+                                 (Test2: MCS 16 50 PRBs),
+                                 (Test3: MCS 28 50 PRBs),
+                                 (Test4: MCS 27 50 PRBs 256QAM),
+                                 (Test5: MCS 9 217 PRBs),
+                                 (Test6: MCS 9 273 PRBs),
+                                 (Test7: PUSCH Type A, 2 DMRS Symbols),
+                                 (Test8: PUSCH Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
+                                 (Test9: PUSCH Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
+                                 (Test10: PUSCH Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols),
+                                 (Test11: 25 PRBs, 15 kHz SCS),
+                                 (Test12: MCS 0, low SNR performance)
+                                 (Test13: MCS 28, 106 PRBs, Time shift 8)</desc>
       <main_exec>nr_ulsim</main_exec>
       <main_exec_args>-n100 -m9 -r106 -s5
                       -n100 -m16 -s10
                       -n100 -m28 -s20
+                      -n100 -m27 -s25 -q1
                       -n100 -m9 -R217 -r217 -s5
                       -n100 -m9 -R273 -r273 -s5
                       -n100 -s5 -U 0,1,1,1
@@ -376,7 +378,7 @@
                       -n100 -u0 -m0 -R25 -r25 -i 1,0
                       -n100 -m0 -S -0.6 -i 1,0
                       -n100 -m 28 -R106 -r106 -t90 -s24 -S24 -d 8</main_exec_args>
-      <tags>test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12</tags>
+      <tags>test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12 test 13</tags>
       <search_expr_true>PUSCH test OK</search_expr_true>
       <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
       <nruns>3</nruns>
diff --git a/doc/FEATURE_SET.md b/doc/FEATURE_SET.md
index 726fe84a74b6648b05b63afcd581de17dd876273..b3ca79c0704e722024b3a7ce949424d3a81e4fec 100644
--- a/doc/FEATURE_SET.md
+++ b/doc/FEATURE_SET.md
@@ -259,6 +259,7 @@ The following features are valid for the gNB and the 5G-NR UE.
    - PTRS support
    - Support for 1, 2 and 4 TX antennas
    - Support for up to 2 layers (currently limited to DMRS configuration type 2)
+   - Support for 256 QAM
 *  NR-CSIRS Generation of sequence at PHY
 *  NR-PUSCH (including Segmentation, LDPC encoding, rate matching, scrambling, modulation, RB mapping, etc).
    - PUSCH mapping type A and B
@@ -267,6 +268,7 @@ The following features are valid for the gNB and the 5G-NR UE.
    - PTRS support
    - Support for up to 2 RX antenna
    - Support for up to 2 layers
+   - Support for 256 QAM
 *  NR-PUCCH 
    - Format 0 (2 bits, for ACK/NACK and SR)
    - Format 2 (up to 11 bits, mainly for CSI feedback)
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 947cb34fb7bfc439fac924845d4c331e3e00c9cc..e1a4e716efe4acd0f76df9d660b0a88fbf83c70a 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -1662,7 +1662,8 @@ void pf_ul(module_id_t module_id,
     }
 
     const NR_bler_options_t *bo = &nrmac->ul_bler;
-    const int max_mcs = bo->max_mcs; /* no per-user maximum MCS yet */
+    const int max_mcs_table = (current_BWP->mcs_table == 0 || current_BWP->mcs_table == 2) ? 28 : 27;
+    const int max_mcs = min(bo->max_mcs, max_mcs_table); /* no per-user maximum MCS yet */
     if (bo->harq_round_max == 1)
       sched_pusch->mcs = max_mcs;
     else