diff --git a/keyboards/c39/keymaps/drashna/config.h b/keyboards/c39/keymaps/drashna/config.h
index 73b0b8acfe..e48bc46ca8 100644
--- a/keyboards/c39/keymaps/drashna/config.h
+++ b/keyboards/c39/keymaps/drashna/config.h
@@ -28,3 +28,7 @@
 #define RGBLED_NUM 15
 
 #define SOLENOID_PIN B11
+
+#define AUDIO_PIN A5
+#define AUDIO_PIN_ALT A4
+#define AUDIO_PIN_ALT_AS_NEGATIVE
diff --git a/keyboards/c39/keymaps/drashna/keymap.c b/keyboards/c39/keymaps/drashna/keymap.c
index b5d11104d3..88065263cf 100755
--- a/keyboards/c39/keymaps/drashna/keymap.c
+++ b/keyboards/c39/keymaps/drashna/keymap.c
@@ -87,12 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-  [_MODS] = LAYOUT_wrapper(
-    _______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
-    _______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
-    KC_LSFT, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______
-  ),
-
   [_LOWER] = LAYOUT_wrapper(
     KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC,
     KC_DEL,  _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE,
diff --git a/keyboards/gergo/keymaps/drashna/keymap.c b/keyboards/gergo/keymaps/drashna/keymap.c
index ecf5f39031..81ff6852d1 100644
--- a/keyboards/gergo/keymaps/drashna/keymap.c
+++ b/keyboards/gergo/keymaps/drashna/keymap.c
@@ -87,12 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
     ),
 
-    [_MODS] = LAYOUT_gergo_wrapper(
-        _______, ___________________BLANK___________________,                                           ___________________BLANK___________________, _______,
-        _______, ___________________BLANK___________________, _______,                         _______, ___________________BLANK___________________, _______,
-        KC_LSFT, ___________________BLANK___________________, _______, _______,       _______, _______, ___________________BLANK___________________, KC_RSFT,
-                                            _______, _______, _______, _______,       _______, _______, _______, _______
-        ),
     [_LOWER] = LAYOUT_gergo_wrapper(
         KC_F12,  _________________LOWER_L1__________________,                                           _________________LOWER_R1__________________, KC_F11,
         _______, _________________LOWER_L2__________________, _______,                         _______, _________________LOWER_R2__________________, KC_PIPE,
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c
index 4f1b3f0bbf..4048fb233c 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c
@@ -167,8 +167,11 @@ void pointing_device_task(void) {
 
 void eeconfig_init_kb(void) {
     keyboard_config.dpi_config = TRACKBALL_DPI_DEFAULT;
+#ifdef POINTING_DEVICE_ENABLE
     trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);
+#endif
     eeconfig_update_kb(keyboard_config.raw);
+    eeconfig_init_user();
 }
 
 void matrix_init_kb(void) {
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h
index 042432184c..bc6d66bb9d 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h
@@ -36,13 +36,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define DIODE_DIRECTION COL2ROW
 
 // WS2812 RGB LED strip input and number of LEDs
-#define RGB_DI_PIN D3
-#define RGBLED_NUM 8
+#define RGB_DI_PIN E7
+#define RGBLED_NUM 58
 #define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 0 , 8 }
+#define RGBLED_SPLIT { 30 , 28 }
 #define RGBLIGHT_SLEEP
-#define RGBW
-#define RGBLIGHT_LIMIT_VAL 150
+// #define RGBW
+#define RGBLIGHT_LIMIT_VAL 100
 /* define if matrix has ghost */
 //#define MATRIX_HAS_GHOST
 
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h
index 41b2e07c70..dedd1f5fe2 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h
@@ -25,9 +25,7 @@
 #define TRACKBALL_DPI_OPTIONS \
     { 1200, 1800, 2600, 3400 }
 
-#define RGBLIGHT_EFFECT_TWINKLE_LIFE  50
-#define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/63
-#define RGBLIGHT_MAX_BRIGHTNESS 100
+#define RGBLIGHT_MAX_BRIGHTNESS 60
 
 #undef DEBOUNCE
 #define DEBOUNCE 10
@@ -36,6 +34,6 @@
 #define SOLENOID_DEFAULT_DWELL 8
 
 #define OLED_DISPLAY_128X64
-#define OLED_BRIGHTNESS 100
+#define OLED_BRIGHTNESS 50
 
 #define MK_KINETIC_SPEED
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c
index 5a1bb79fe2..b3300daa9c 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c
@@ -30,8 +30,8 @@
      OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,                K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \
                        OS_LALT, OS_LGUI,                                                TG_GAME, TG_DBLO, \
                                 OS_LGUI, KC_GRV,                                        OS_RGUI,  \
-                                         KC_SPC,  TT(_MOUSE),                     KC_ENT,  \
-                                         BK_LWER, MO(_MOUSE),      MO(_MOUSE), DL_RAIS  \
+                                         KC_SPC,  OS_LGUI,                     KC_ENT,  \
+                                         BK_LWER, TT(_MOUSE),      TT(_MOUSE), DL_RAIS  \
   )
 #define LAYOUT_5x6_right_trackball_base_wrapper(...)       LAYOUT_5x6_right_trackball_base(__VA_ARGS__)
 
@@ -88,8 +88,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [_MOUSE] = LAYOUT_5x6_right_trackball(
         _______, _______, _______, _______, _______, _______,                     DPI_CONFIG, _______, _______, _______, _______, _______,
         _______, _______, _______, _______, _______, _______,                        KC_WH_U, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______,                        KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______,
-        _______, _______, _______, _______, _______, _______,                        _______, KC_BTN4, KC_BTN5, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______,                        KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, _______,
+        _______, _______, _______, _______, _______, _______,                        KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
                           _______, _______,                                                            _______, _______,
                                             _______, _______,                                 _______,
                                                      _______, _______,               _______,
@@ -97,9 +97,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
     [_GAMEPAD] = LAYOUT_5x6_right_trackball(
         KC_ESC,  KC_NO,   KC_1,    KC_2,    KC_3,    KC_4,                        DPI_CONFIG, _______, _______, _______, _______, _______,
-        KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,                           KC_WH_U, _______, _______, _______, _______, _______,
-        KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                           KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______,
-        KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_H,                           _______, KC_BTN4, KC_BTN5, _______, _______, _______,
+        KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,                           _______, _______, _______, _______, _______, _______,
+        KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                           _______, _______, _______, _______, _______, _______,
+        KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_H,                           _______, _______, _______, _______, _______, _______,
                           KC_I,    KC_T,                                                               TG_GAME, KC_NO,
                                             KC_V,    KC_O,                                    _______,
                                                      KC_SPC,  KC_P,                  _______,
@@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
     [_DIABLO] = LAYOUT_5x6_right_trackball(
         KC_ESC,  KC_V,    KC_D,    KC_LALT, KC_NO,   KC_NO,                          KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,
-        KC_TAB,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,                           KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-        KC_Q,    KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                           KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-        KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z,                           KC_NO,   KC_N,    KC_M,    KC_NO,   KC_NO,   KC_NO,
+        KC_TAB,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,                           _______, _______, _______, _______, _______, _______,
+        KC_Q,    KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                           _______, _______, _______, _______, _______, _______,
+        KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z,                           _______, _______, _______, _______, _______, _______,
                           KC_F,    KC_L,                                                               KC_NO,   TG_DBLO,
-                                      SFT_T(KC_SPC), KC_F,                                    _______,
-                                               ALT_T(KC_Q),   KC_J,                  _______,
-                                             KC_DIABLO_CLEAR, KC_LGUI,      _______, _______
+                                    KC_DIABLO_CLEAR, KC_F,                                    _______,
+                                               SFT_T(KC_SPC), KC_J,                  _______,
+                                               ALT_T(KC_Q),   KC_LGUI,      _______, _______
     ),
     [_LOWER] = LAYOUT_5x6_right_trackball_wrapper(
         KC_F12,  _________________FUNC_LEFT_________________,                        _________________FUNC_RIGHT________________, KC_F11,
@@ -157,7 +157,7 @@ bool            tap_toggling          = false;
 void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {
     if ((x || y) && timer_elapsed(mouse_timer) > 125) {
         mouse_timer = timer_read();
-        if (!layer_state_is(_MOUSE) && !layer_state_is(_GAMEPAD) && timer_elapsed(mouse_debounce_timer) > 125) {
+        if (!layer_state_is(_MOUSE) && !(layer_state_is(_GAMEPAD) || layer_state_is(_DIABLO)) && timer_elapsed(mouse_debounce_timer) > 125) {
             layer_on(_MOUSE);
         }
     }
@@ -167,7 +167,7 @@ void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {
 #    else
     if (timer_elapsed(mouse_debounce_timer) > TAPPING_TERM
 #    endif
-        || layer_state_is(_GAMEPAD)) {
+        || (layer_state_is(_GAMEPAD) || layer_state_is(_DIABLO))) {
         mouse_report->x = x;
         mouse_report->y = y;
     }
@@ -218,11 +218,33 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t* record) {
         default:
             if (layer_state_is(_MOUSE) && !mouse_keycode_tracker) {
                 layer_off(_MOUSE);
-                mouse_keycode_tracker = 0;
             }
+            mouse_keycode_tracker = 0;
             mouse_debounce_timer = timer_read();
             break;
     }
     return true;
 }
+
+layer_state_t layer_state_set_keymap(layer_state_t state) {
+    if (layer_state_cmp(state, _GAMEPAD) || layer_state_cmp(state, _DIABLO)) {
+        state |= (1UL << _MOUSE);
+    }
+    return state;
+}
 #endif
+
+void matrix_init_keymap(void) {
+#ifdef AUDIO_ENABLE
+    extern audio_config_t audio_config;
+
+    if (!is_keyboard_master()) {
+        audio_stop_all();
+        audio_config.enable = false;
+    }
+#endif
+}
+
+void keyboard_post_init_keymap(void) {
+    matrix_init_keymap();
+}
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk
index 9999c0ddf4..754f0e45de 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk
@@ -1,5 +1,4 @@
 RGBLIGHT_STARTUP_ANIMATION   = yes
-HAPTIC_ENABLE                = SOLENOID
 COMMAND_ENABLE               = no
 AUDIO_ENABLE                 = yes
 TAP_DANCE_ENABLE             = yes
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pmw3360.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pmw3360.c
index 8007fecef6..9b6d93207a 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pmw3360.c
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pmw3360.c
@@ -16,6 +16,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifdef POINTING_DEVICE_ENABLE
 
 #include "pmw3360.h"
 #include "pmw3360_firmware.h"
@@ -223,3 +224,5 @@ report_pmw_t pmw_read_burst(void) {
 
     return data;
 }
+
+#endif
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c
index 5df90258bb..1a9aeb2e32 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c
@@ -21,6 +21,7 @@
 #include QMK_KEYBOARD_H
 
 #define ROWS_PER_HAND (MATRIX_ROWS / 2)
+#define SYNC_TIMER_OFFSET 2
 
 #ifdef RGBLIGHT_ENABLE
 #    include "rgblight.h"
@@ -36,6 +37,13 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
 #    define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t))
 #endif
 
+#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#    include "led_matrix.h"
+#endif
+#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#    include "rgb_matrix.h"
+#endif
+
 #ifdef POINTING_DEVICE_ENABLE
 static uint16_t device_cpi    = 0;
 static int8_t   split_mouse_x = 0, split_mouse_y = 0;
@@ -51,6 +59,12 @@ static int8_t   split_mouse_x = 0, split_mouse_y = 0;
 #    include "i2c_slave.h"
 
 typedef struct _I2C_slave_buffer_t {
+#    ifndef DISABLE_SYNC_TIMER
+    uint32_t sync_timer;
+#    endif
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    matrix_row_t mmatrix[ROWS_PER_HAND];
+#    endif
     matrix_row_t smatrix[ROWS_PER_HAND];
 #    ifdef SPLIT_MODS_ENABLE
     uint8_t real_mods;
@@ -77,14 +91,22 @@ typedef struct _I2C_slave_buffer_t {
     bool          oled_on;
     layer_state_t t_layer_state;
     layer_state_t t_default_layer_state;
-    bool          is_rgb_matrix_suspended;
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_eeconfig_t led_matrix;
+    bool           led_suspend_state;
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_config_t rgb_matrix;
+    bool         rgb_suspend_state;
+#    endif
 } __attribute__((packed)) I2C_slave_buffer_t;
 
 static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg;
 
 #    define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level)
 #    define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync)
-#    define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, mmatrix)
+#    define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix)
+#    define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix)
 #    define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer)
 #    define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods)
 #    define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods)
@@ -97,7 +119,10 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
 #    define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on)
 #    define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state)
 #    define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state)
-#    define I2C_RGB_MATRIX_SUSPEND_START offsetof(I2C_slave_buffer_t, is_rgb_matrix_suspended)
+#    define I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix)
+#    define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state)
+#    define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix)
+#    define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state)
 
 #    define TIMEOUT 100
 
@@ -106,9 +131,11 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
 #    endif
 
 // Get rows from other half over i2c
-bool transport_master(matrix_row_t matrix[]) {
-    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
-
+bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT);
+#    endif
     // write backlight info
 #    ifdef BACKLIGHT_ENABLE
     uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0;
@@ -206,21 +233,34 @@ bool transport_master(matrix_row_t matrix[]) {
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    bool sus_state = rgb_matrix_get_suspend_state();
-    if (sus_state != i2c_buffer->is_rgb_matrix_suspended) {
-        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) {
-            i2c_buffer->is_rgb_matrix_suspended = sus_state;
-        }
-    }
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT);
+    bool suspend_state = led_matrix_get_suspend_state();
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT);
+    bool suspend_state = rgb_matrix_get_suspend_state();
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT);
+#    endif
+
+#    ifndef DISABLE_SYNC_TIMER
+    i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT);
 #    endif
 
     return true;
 }
 
-void transport_slave(matrix_row_t matrix[]) {
+void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+#    ifndef DISABLE_SYNC_TIMER
+    sync_timer_update(i2c_buffer->sync_timer);
+#    endif
     // Copy matrix to I2C buffer
-    memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix));
+    memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix));
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix));
+#    endif
 
 // Read Backlight Info
 #    ifdef BACKLIGHT_ENABLE
@@ -281,8 +321,13 @@ void transport_slave(matrix_row_t matrix[]) {
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended);
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix));
+    led_matrix_set_suspend_state(i2c_buffer->led_suspend_state);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix));
+    rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state);
 #    endif
 }
 
@@ -313,7 +358,10 @@ typedef struct _Serial_m2s_buffer_t {
 #        endif
 #    endif
 #    ifndef DISABLE_SYNC_TIMER
-    uint32_t      sync_timer;
+    uint32_t     sync_timer;
+#    endif
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    matrix_row_t mmatrix[ROWS_PER_HAND];
 #    endif
 #    ifdef BACKLIGHT_ENABLE
     uint8_t       backlight_level;
@@ -325,7 +373,14 @@ typedef struct _Serial_m2s_buffer_t {
     bool          oled_on;
     layer_state_t t_layer_state;
     layer_state_t t_default_layer_state;
-    bool          is_rgb_matrix_suspended;
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_eeconfig_t led_matrix;
+    bool           led_suspend_state;
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_config_t   rgb_matrix;
+    bool           rgb_suspend_state;
+#    endif
 } __attribute__((packed)) Serial_m2s_buffer_t;
 
 #    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
@@ -402,7 +457,7 @@ void transport_rgblight_slave(void) {
 #        define transport_rgblight_slave()
 #    endif
 
-bool transport_master(matrix_row_t matrix[]) {
+bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
 #    ifndef SERIAL_USE_MULTI_TRANSACTION
     if (soft_serial_transaction() != TRANSACTION_END) {
         return false;
@@ -416,7 +471,10 @@ bool transport_master(matrix_row_t matrix[]) {
 
     // TODO:  if MATRIX_COLS > 8 change to unpack()
     for (int i = 0; i < ROWS_PER_HAND; ++i) {
-        matrix[i] = serial_s2m_buffer.smatrix[i];
+        slave_matrix[i] = serial_s2m_buffer.smatrix[i];
+#    ifdef SPLIT_TRANSPORT_MIRROR
+        serial_m2s_buffer.mmatrix[i] = master_matrix[i];
+#    endif
     }
 
 #    ifdef BACKLIGHT_ENABLE
@@ -457,19 +515,32 @@ bool transport_master(matrix_row_t matrix[]) {
     serial_m2s_buffer.oled_on                 = is_oled_on();
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state();
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    serial_m2s_buffer.led_matrix        = led_matrix_eeconfig;
+    serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state();
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    serial_m2s_buffer.rgb_matrix        = rgb_matrix_config;
+    serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state();
+#    endif
+#    ifndef DISABLE_SYNC_TIMER
+    serial_m2s_buffer.sync_timer   = sync_timer_read32() + SYNC_TIMER_OFFSET;
 #    endif
-
     return true;
 }
 
-void transport_slave(matrix_row_t matrix[]) {
+void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
     transport_rgblight_slave();
+#    ifndef DISABLE_SYNC_TIMER
+    sync_timer_update(serial_m2s_buffer.sync_timer);
+#    endif
 
     // TODO: if MATRIX_COLS > 8 change to pack()
     for (int i = 0; i < ROWS_PER_HAND; ++i) {
-        serial_s2m_buffer.smatrix[i] = matrix[i];
+        serial_s2m_buffer.smatrix[i] = slave_matrix[i];
+#    ifdef SPLIT_TRANSPORT_MIRROR
+        master_matrix[i]             = serial_m2s_buffer.mmatrix[i];
+#    endif
     }
 
 #    ifdef BACKLIGHT_ENABLE
@@ -518,8 +589,13 @@ void transport_slave(matrix_row_t matrix[]) {
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended);
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_matrix_eeconfig = serial_m2s_buffer.led_matrix;
+    led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_matrix_config = serial_m2s_buffer.rgb_matrix;
+    rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state);
 #    endif
 }
 
@@ -534,7 +610,7 @@ void trackball_set_cpi(uint16_t cpi) {
     if (!is_keyboard_left()) {
         pmw_set_cpi(cpi);
     } else {
-        device_cpi = cpi * 1.5;
+        device_cpi = cpi;
     }
 }
 #endif
diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk
index 99275c15ae..3fb9ab2a84 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk
@@ -11,17 +11,18 @@ BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
 MOUSEKEY_ENABLE = yes       # Mouse keys
 EXTRAKEY_ENABLE = yes       # Audio control and System control
 CONSOLE_ENABLE = no         # Console for debug
-COMMAND_ENABLE = yes        # Commands for debug and configuration
+COMMAND_ENABLE = no        # Commands for debug and configuration
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no            # USB Nkey Rollover
+NKRO_ENABLE = yes            # USB Nkey Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 BLUETOOTH_ENABLE = no       # Enable Bluetooth
 AUDIO_ENABLE = no           # Audio output
 SWAP_HANDS_ENABLE = yes
 POINTING_DEVICE_ENABLE = yes
+MOUSE_SHARED_EP = no
 
 SPLIT_KEYBOARD = yes
 SPLIT_TRANSPORT = custom
diff --git a/keyboards/keebio/iris/keymaps/drashna/keymap.c b/keyboards/keebio/iris/keymaps/drashna/keymap.c
index 1dc6f0e528..fe5e67b52f 100644
--- a/keyboards/keebio/iris/keymaps/drashna/keymap.c
+++ b/keyboards/keebio/iris/keymaps/drashna/keymap.c
@@ -91,14 +91,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-  [_MODS] = LAYOUT_wrapper(
-     _______, ___________________BLANK___________________,                       ___________________BLANK___________________, _______,
-     _______, ___________________BLANK___________________,                       ___________________BLANK___________________, _______,
-     _______, ___________________BLANK___________________,                       ___________________BLANK___________________, _______,
-     KC_LSFT, ___________________BLANK___________________, _______,     _______, ___________________BLANK___________________, KC_RSFT,
-                                       _______, _______, _______,         _______, _______, _______
-  ),
-
   [_GAMEPAD] = LAYOUT_wrapper(
      KC_ESC,  KC_NO,   KC_1,    KC_2,    KC_3,    KC_4,                          _______, _______, _______, _______, _______, _______,
      KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,                          _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/kyria/keymaps/drashna/config.h b/keyboards/kyria/keymaps/drashna/config.h
index afd17b4360..af6f738155 100644
--- a/keyboards/kyria/keymaps/drashna/config.h
+++ b/keyboards/kyria/keymaps/drashna/config.h
@@ -20,7 +20,6 @@
 
 #ifdef OLED_DRIVER_ENABLE
 #    define OLED_DISPLAY_128X64
-#    define OLED_SCROLL_TIMEOUT_RIGHT 60000
 #endif
 
 #ifdef RGBLIGHT_ENABLE
@@ -30,7 +29,7 @@
 #    define RGBLIGHT_SAT_STEP 8
 #    define RGBLIGHT_VAL_STEP 8
 #    define RGBLIGHT_SPLIT
-#    define RGBLIGHT_LAYERS
+// #    define RGBLIGHT_LAYERS
 #endif
 
 #define KEYLOGGER_LENGTH 10
diff --git a/keyboards/kyria/keymaps/drashna/keymap.c b/keyboards/kyria/keymaps/drashna/keymap.c
index beefe11d74..4563a3c622 100644
--- a/keyboards/kyria/keymaps/drashna/keymap.c
+++ b/keyboards/kyria/keymaps/drashna/keymap.c
@@ -16,12 +16,6 @@
 
 #include "drashna.h"
 
-uint8_t is_master;
-
-#ifndef UNICODE_ENABLE
-#    define UC(x) KC_NO
-#endif
-
 /*
  * The `LAYOUT_kyria_base` macro is a template to allow the use of identical
  * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
@@ -96,13 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
     ),
 
-    [_MODS] = LAYOUT_wrapper(
-        _______, ___________________BLANK___________________,                                       ___________________BLANK___________________, _______,
-        _______, ___________________BLANK___________________,                                       ___________________BLANK___________________, _______,
-        KC_LSFT, ___________________BLANK___________________, _______, _______,   _______, _______, ___________________BLANK___________________, KC_RSFT,
-                                   _______, _______, KC_LALT, _______, _______,   _______, _______, KC_RGUI, _______, _______
-    ),
-
     [_GAMEPAD] = LAYOUT_wrapper(
         KC_ESC,  KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,                                          _______, _______, _______, _______, _______, _______,
         KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                                          _______, _______, _______, _______, _______, _______,
@@ -143,39 +130,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 // clang-format on
 
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-    if (record->event.pressed) {
-#ifndef SPLIT_KEYBOARD
-        if (keycode == RESET && !is_master) {
-            return false;
-        }
-#endif
-    }
-    return true;
-}
-
-void matrix_init_keymap(void) { is_master = (uint8_t)is_keyboard_master(); }
-
 #ifdef OLED_DRIVER_ENABLE
 oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
-
-// clang-format off
-
-#    ifndef SPLIT_TRANSPORT_MIRROR
-void oled_driver_render_logo(void) {
-    static const char PROGMEM kyria_logo[] = {
-        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-        0,  0,  0,  0,  0,  0,  0,192,224,240,124, 62, 31, 15,  7,  3,  1,128,192,224,240,120, 56, 60, 28, 30, 14, 14,  7,  7,135,231,127, 31,255,255, 31,127,231,135,  7,  7, 14, 14, 30, 28, 60, 56,120,240,224,192,128,  1,  3,  7, 15, 31, 62,124,240,224,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-        0,  0,  0,  0,240,252,255, 31,  7,  1,  0,  0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135,  1,  0,  0,255,255,  0,  0,  1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192,  0,  0,  1,  7, 31,255,252,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-        0,  0,  0,255,255,255,  0,  0,  0,  0,  0,254,255,255,  1,  1,  7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30,  7,  1,  1,255,255,254,  0,  0,  0,  0,  0,255,255,255,  0,  0,  0,  0,255,255,  0,  0,192,192, 48, 48,  0,  0,240,240,  0,  0,  0,  0,  0,  0,240,240,  0,  0,240,240,192,192, 48, 48, 48, 48,192,192,  0,  0, 48, 48,243,243,  0,  0,  0,  0,  0,  0, 48, 48, 48, 48, 48, 48,192,192,  0,  0,  0,  0,  0,
-        0,  0,  0,255,255,255,  0,  0,  0,  0,  0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31,  7,255,255,  7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127,  0,  0,  0,  0,  0,255,255,255,  0,  0,  0,  0, 63, 63,  3,  3, 12, 12, 48, 48,  0,  0,  0,  0, 51, 51, 51, 51, 51, 51, 15, 15,  0,  0, 63, 63,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 48, 63, 63, 48, 48,  0,  0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63,  0,  0,  0,  0,  0,
-        0,  0,  0,  0, 15, 63,255,248,224,128,  0,  0,  3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128,  0,  0,255,255,  0,  0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15,  3,  0,  0,128,224,248,255, 63, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-        0,  0,  0,  0,  0,  0,  0,  3,  7, 15, 62,124,248,240,224,192,128,  1,  3,  7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15,  7,  3,  1,128,192,224,240,248,124, 62, 15,  7,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-        0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  3,  7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15,  7,  3,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
-    };
-    oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
-}
-#    endif
 #endif
 
 #ifdef ENCODER_ENABLE
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index 32b0dcfeba..643a5b6b0b 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -73,13 +73,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-
-  [_MODS] = LAYOUT_wrapper(\
-    _______, _______, _______, _______, _______, _______,                                                               _______, _______, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, _______,          _______, _______,         _______, _______,          _______, _______, _______, _______, _______, _______,
-    KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______
-  ),
-
   [_LOWER] = LAYOUT_wrapper(\
     KC_TILD, _________________LOWER_L1__________________,                                                               _________________LOWER_R1__________________, KC_BSPC,
     KC_F11,  _________________LOWER_L2__________________,          _______, _______,         _______, _______,          _________________LOWER_R2__________________, KC_PIPE,
diff --git a/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk b/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
index 4e7eebe341..655dbfdfa0 100644
--- a/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
+++ b/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
@@ -2,3 +2,4 @@ USER_NAME := not_drashna
 
 RGBLIGHT_ENABLE = yes
 CONSOLE_ENABLE  = no
+LTO_ENABLE = yes
diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c
index 2bcf672a91..3e14606060 100644
--- a/layouts/community/ergodox/drashna/keymap.c
+++ b/layouts/community/ergodox/drashna/keymap.c
@@ -19,9 +19,6 @@
 #ifdef UNICODEMAP_ENABLE
 #    include "drashna_unicode.h"
 #endif  // UNICODEMAP_ENABLE
-#ifndef UNICODE_ENABLE
-#    define UC(x) KC_NO
-#endif
 
 enum more_custom_keycodes {
     KC_SWAP_NUM = NEW_SAFE_RANGE,
@@ -199,20 +196,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-
-// Reverts OSM(Shift) to normal Shifts. However, may not need since we fixed the issue with RDP (LOCAL RESOURCES)
-  [_MODS] = LAYOUT_ergodox_pretty_wrapper(
-             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
-             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
-             _______, _______, _______, _______, _______, _______,                                   _______, _______, _______, _______, _______, _______,
-             KC_LSFT, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, KC_RSFT,
-             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
-                                                          _______, _______,                 _______, _______,
-                                                                   _______,                 _______,
-                                                 _______, _______, _______,                 _______, _______, _______
-            ),
-
-
 /* Keymap 4: Customized Overwatch Layout
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
@@ -303,7 +286,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
              KC_MAKE, _______, _______, _______, _______, _______, UC_MOD,                  KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
              VRSN,    _________________ADJUST_L1_________________, _______,                 _______, _________________ADJUST_R1_________________, EEP_RST,
              _______, _________________ADJUST_L2_________________,                                   _________________ADJUST_R2_________________, RGB_IDL,
-             _______, _________________ADJUST_L3_________________, _______,                 _______, _________________ADJUST_R3_________________, TG(_MODS),
+             _______, _________________ADJUST_L3_________________, _______,                 _______, _________________ADJUST_R3_________________, TG_MODS,
              _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
                                                           _______, _______,                 _______, _______,
                                                                    _______,                 _______,
@@ -466,9 +449,12 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
         RGB_MATRIX_INDICATOR_SET_COLOR(25, 0x7A, 0x00, 0xFF);                                          // 3
     }
 
-
-    if (userspace_config.rgb_layer_change) {
-        bool mods_enabled = IS_LAYER_ON(_MODS);
+#    if defined(RGBLIGHT_ENABLE)
+    if (!userspace_config.rgb_layer_change)
+#    else
+    if (userspace_config.rgb_layer_change)
+#    endif
+    {
         switch (get_highest_layer(layer_state|default_layer_state)) {
             case _GAMEPAD:
                 rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
@@ -486,28 +472,28 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
                 rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _QWERTY:
-                rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_CYAN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _COLEMAK:
-                rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_MAGENTA, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _DVORAK:
-                rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_SPRINGGREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _WORKMAN:
-                rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_GOLDENROD, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _NORMAN:
-                rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_CORAL, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _MALTRON:
-                rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_YELLOW, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _EUCALYN:
-                rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_PINK, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             case _CARPLAX:
-                rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
         }
     }
diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk
index 51b4c9a601..31f4788fad 100644
--- a/layouts/community/ergodox/drashna/rules.mk
+++ b/layouts/community/ergodox/drashna/rules.mk
@@ -1,5 +1,5 @@
 BOOTMAGIC_ENABLE   = lite
-TAP_DANCE_ENABLE   = yes
+TAP_DANCE_ENABLE   = no
 COMMAND_ENABLE     = no  # Commands for debug and configuration
 CONSOLE_ENABLE     = no
 SPACE_CADET_ENABLE = no
diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c
index 1f3176e368..82594b9fd4 100644
--- a/layouts/community/ortho_4x12/drashna/keymap.c
+++ b/layouts/community/ortho_4x12/drashna/keymap.c
@@ -115,13 +115,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-  [_MODS] = LAYOUT_ortho_4x12_wrapper(
-    _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-    _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-    KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-  ),
-
   [_LOWER] = LAYOUT_ortho_4x12_wrapper(
     KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC,
     KC_DEL,  _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
@@ -262,31 +255,30 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
                 rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                 break;
             default: {
-                bool mods_enabled = IS_LAYER_ON(_MODS);
                 switch (get_highest_layer(default_layer_state)) {
                     case _QWERTY:
-                        rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_CYAN, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _COLEMAK:
-                        rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_MAGENTA, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _DVORAK:
-                        rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_SPRINGGREEN, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _WORKMAN:
-                        rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_GOLDENROD, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _NORMAN:
-                        rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_CORAL, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _MALTRON:
-                        rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_YELLOW, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _EUCALYN:
-                        rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_PINK, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                     case _CARPLAX:
-                        rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
+                        rgb_matrix_layer_helper(HSV_BLUE, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
                         break;
                 }
                 break;
diff --git a/layouts/community/ortho_5x12/drashna/keymap.c b/layouts/community/ortho_5x12/drashna/keymap.c
index 9f6622c7d5..f882ead171 100644
--- a/layouts/community/ortho_5x12/drashna/keymap.c
+++ b/layouts/community/ortho_5x12/drashna/keymap.c
@@ -67,14 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
 ),
 
-[_MODS] = LAYOUT_ortho_5x12_wrapper(
-  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-  KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, _______,
-  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-
 /* Lower
  * ,-----------------------------------------------------------------------------------.
  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
diff --git a/layouts/community/split_3x6_3/drashna/keymap.c b/layouts/community/split_3x6_3/drashna/keymap.c
index 65e05f64b6..5a2d2f2e27 100644
--- a/layouts/community/split_3x6_3/drashna/keymap.c
+++ b/layouts/community/split_3x6_3/drashna/keymap.c
@@ -90,13 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
   ),
 
-  [_MODS] = LAYOUT_split_3x6_3_wrapper(
-      _______, ___________________BLANK___________________,                  ___________________BLANK___________________, _______,
-      _______, ___________________BLANK___________________,                  ___________________BLANK___________________, _______,
-      KC_LSFT, ___________________BLANK___________________,                  ___________________BLANK___________________, KC_RSFT,
-                                     _______, _______, _______,        _______, _______, _______
-  ),
-
   [_LOWER] = LAYOUT_split_3x6_3_wrapper(
     KC_F11,  _________________LOWER_L1__________________,                    _________________LOWER_R1__________________, KC_F11,
     KC_F12,  _________________LOWER_L2__________________,                    _________________LOWER_R2__________________, KC_PIPE,
@@ -179,7 +172,6 @@ void check_default_layer(uint8_t mode, uint8_t type, uint8_t led_min, uint8_t le
 }
 
 void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
-    if (!is_keyboard_master()) return;
     if (userspace_config.rgb_layer_change) {
         switch (get_highest_layer(layer_state)) {
             case _GAMEPAD:
@@ -198,7 +190,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
                 rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
                 break;
             default: {
-                check_default_layer(IS_LAYER_ON(_MODS), LED_FLAG_UNDERGLOW, led_min, led_max);
+                check_default_layer(0, LED_FLAG_UNDERGLOW, led_min, led_max);
                 break;
             }
         }
diff --git a/layouts/community/split_3x6_3/drashna/rules.mk b/layouts/community/split_3x6_3/drashna/rules.mk
index 984066bc30..cbb0b1c113 100644
--- a/layouts/community/split_3x6_3/drashna/rules.mk
+++ b/layouts/community/split_3x6_3/drashna/rules.mk
@@ -3,17 +3,16 @@
 #   change to "no" to disable the options, or define them in the Makefile in
 #   the appropriate keymap folder that will get included automatically
 #
-BOOTMAGIC_ENABLE           = lite # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE            = no  # Mouse keys(+4700)
-EXTRAKEY_ENABLE            = yes # Audio control and System control(+450)
-CONSOLE_ENABLE             = no  # Console for debug(+400)
+BOOTMAGIC_ENABLE           = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE            = no  # Mouse keys
+EXTRAKEY_ENABLE            = yes # Audio control and System control
+CONSOLE_ENABLE             = no  # Console for debug
 COMMAND_ENABLE             = no  # Commands for debug and configuration
 NKRO_ENABLE                = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 BACKLIGHT_ENABLE           = no  # Enable keyboard backlight functionality
-MIDI_ENABLE                = no  # MIDI controls
-AUDIO_ENABLE               = no  # Audio output on port C6
+AUDIO_ENABLE               = no  # Audio output
 UNICODE_ENABLE             = no  # Unicode
-BLUETOOTH_ENABLE           = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+BLUETOOTH_ENABLE           = no  # Enable Bluetooth
 RGBLIGHT_ENABLE            = no  # Enable WS2812 RGB underlight.
 SWAP_HANDS_ENABLE          = no  # Enable one-hand typing
 
@@ -23,7 +22,7 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 ifeq ($(strip $(KEYBOARD)), crkbd/rev1)
     OLED_DRIVER_ENABLE = yes
     RGB_MATRIX_ENABLE = yes
-    HAPTIC_ENABLE = SOLENOID
+    HAPTIC_ENABLE = no
     BOOTLOADER = qmk-dfu
 endif
 
@@ -31,4 +30,5 @@ ifeq ($(strip $(CTPC)), yes)
     HAPTIC_ENABLE = no
     WS2812_DRIVER = pwm # won't work without a patch to the ctpc mk file
     SERIAL_DRIVER = usart
+    SWAP_HANDS_ENABLE = yes
 endif
diff --git a/layouts/community/split_3x6_3/drashna/ssd1306.c b/layouts/community/split_3x6_3/drashna/ssd1306.c
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/users/drashna/config.h b/users/drashna/config.h
index 8081af9cc3..5f7c32ff35 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -24,7 +24,7 @@
 
 #if defined(SPLIT_KEYBOARD)
 #    define SPLIT_MODS_ENABLE
-// #    define SPLIT_TRANSPORT_MIRROR
+#    define SPLIT_TRANSPORT_MIRROR
 #    define SERIAL_USE_MULTI_TRANSACTION
 // #    define SPLIT_NUM_TRANSACTIONS_KB 2
 #endif
@@ -56,6 +56,8 @@
 #    else
 #        define RGBLIGHT_ANIMATIONS
 #    endif
+#    define RGBLIGHT_EFFECT_TWINKLE_LIFE  250
+#    define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/24
 #endif  // RGBLIGHT_ENABLE
 
 #ifdef RGB_MATRIX_ENABLE
@@ -115,6 +117,9 @@
 #        define OLED_UPDATE_INTERVAL 15
 #    endif
 #    define OLED_DISABLE_TIMEOUT
+#    ifdef OLED_FONT_H
+#        undef OLED_FONT_H
+#    endif
 #    define OLED_FONT_H "drashna_font.h"
 #    define OLED_FONT_END 255
 // #    define OLED_FONT_5X5
@@ -149,7 +154,9 @@
 #undef PERMISSIVE_HOLD
 //#define TAPPING_FORCE_HOLD
 //#define RETRO_TAPPING
-#define TAPPING_TERM_PER_KEY
+#ifndef KEYBOARD_kyria_rev1
+#    define TAPPING_TERM_PER_KEY
+#endif
 
 #define FORCE_NKRO
 
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 6a13f0d9b2..a493737262 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -164,6 +164,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
         return state;
     }
 
+    state = layer_state_set_keymap(state);
     state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
 #if defined(RGBLIGHT_ENABLE)
     state = layer_state_set_rgb_light(state);
@@ -179,7 +180,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
         }
     }
 #endif
-    return layer_state_set_keymap(state);
+    return state;
 }
 
 __attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 9a18a82965..e66f106574 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -47,7 +47,6 @@ enum userspace_layers {
     _MALTRON,
     _EUCALYN,
     _CARPLAX,
-    _MODS, /* layer 8 */
     _GAMEPAD,
     _DIABLO,
     _MACROS,
diff --git a/users/drashna/drashna_transport.c b/users/drashna/drashna_transport.c
index f0908b4900..9df11c9bdf 100644
--- a/users/drashna/drashna_transport.c
+++ b/users/drashna/drashna_transport.c
@@ -21,6 +21,7 @@
 #include QMK_KEYBOARD_H
 
 #define ROWS_PER_HAND (MATRIX_ROWS / 2)
+#define SYNC_TIMER_OFFSET 2
 
 #ifdef RGBLIGHT_ENABLE
 #    include "rgblight.h"
@@ -37,19 +38,33 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
 #endif
 
 #ifdef POINTING_DEVICE_ENABLE
-static int8_t split_mouse_x = 0, split_mouse_y = 0;
+static uint16_t device_cpi    = 0;
+static int8_t   split_mouse_x = 0, split_mouse_y = 0;
 #endif
 
 #ifdef OLED_DRIVER_ENABLE
 #    include "oled_driver.h"
 #endif
 
+#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+#    include "led_matrix.h"
+#endif
+#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+#    include "rgb_matrix.h"
+#endif
+
 #if defined(USE_I2C)
 
 #    include "i2c_master.h"
 #    include "i2c_slave.h"
 
 typedef struct _I2C_slave_buffer_t {
+#    ifndef DISABLE_SYNC_TIMER
+    uint32_t sync_timer;
+#    endif
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    matrix_row_t mmatrix[ROWS_PER_HAND];
+#    endif
     matrix_row_t smatrix[ROWS_PER_HAND];
 #    ifdef SPLIT_MODS_ENABLE
     uint8_t real_mods;
@@ -69,20 +84,30 @@ typedef struct _I2C_slave_buffer_t {
 #    endif
 #    ifdef WPM_ENABLE
     uint8_t current_wpm;
+#    endif
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_eeconfig_t led_matrix;
+    bool           led_suspend_state;
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_config_t rgb_matrix;
+    bool         rgb_suspend_state;
 #    endif
     int8_t        mouse_x;
     int8_t        mouse_y;
+    uint16_t      device_cpi;
     bool          oled_on;
     layer_state_t t_layer_state;
     layer_state_t t_default_layer_state;
-    bool          is_rgb_matrix_suspended;
 } __attribute__((packed)) I2C_slave_buffer_t;
 
 static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg;
 
 #    define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level)
 #    define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync)
-#    define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, smatrix)
+#    define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix)
+#    define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix)
+#    define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer)
 #    define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods)
 #    define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods)
 #    define I2C_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods)
@@ -90,10 +115,14 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
 #    define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm)
 #    define I2C_MOUSE_X_START offsetof(I2C_slave_buffer_t, mouse_x)
 #    define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y)
+#    define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi)
 #    define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on)
 #    define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state)
 #    define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state)
-#    define I2C_RGB_MATRIX_SUSPEND_START offsetof(I2C_slave_buffer_t, is_rgb_matrix_suspended)
+#    define I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix)
+#    define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state)
+#    define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix)
+#    define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state)
 
 #    define TIMEOUT 100
 
@@ -102,9 +131,11 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
 #    endif
 
 // Get rows from other half over i2c
-bool transport_master(matrix_row_t matrix[]) {
-    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
-
+bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT);
+#    endif
     // write backlight info
 #    ifdef BACKLIGHT_ENABLE
     uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0;
@@ -147,6 +178,12 @@ bool transport_master(matrix_row_t matrix[]) {
         i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT);
         temp_report.y = i2c_buffer->mouse_y;
         pointing_device_set_report(temp_report);
+
+        if (device_cpi != i2c_buffer->device_cpi) {
+            if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_DPI_START, (void *)&device_cpi, sizeof(device_cpi), TIMEOUT) >= 0) {
+                i2c_buffer->device_cpi = device_cpi
+            }
+        }
     }
 #    endif
 
@@ -188,29 +225,42 @@ bool transport_master(matrix_row_t matrix[]) {
     }
 
 #    ifdef OLED_DRIVER_ENABLE
-    bool is_oled = is_oled_on();
-    if (is_oled != i2c_buffer->oled_on) {
-        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled, sizeof(is_oled), TIMEOUT) >= 0) {
-            i2c_buffer->oled_on = is_oled;
+    bool is_oled_on = is_oled_on();
+    if (is_oled_on != i2c_buffer->oled_on) {
+        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on, sizeof(is_oled_on), TIMEOUT) >= 0) {
+            i2c_buffer->oled_on = is_oled_on;
         }
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    bool sus_state = rgb_matrix_get_suspend_state();
-    if (sus_state != i2c_buffer->is_rgb_matrix_suspended) {
-        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) {
-            i2c_buffer->is_rgb_matrix_suspended = sus_state;
-        }
-    }
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT);
+    bool suspend_state = led_matrix_get_suspend_state();
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT);
+    bool suspend_state = rgb_matrix_get_suspend_state();
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT);
+#    endif
+
+#    ifndef DISABLE_SYNC_TIMER
+    i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
+    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT);
 #    endif
 
     return true;
 }
 
-void transport_slave(matrix_row_t matrix[]) {
+void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
+#    ifndef DISABLE_SYNC_TIMER
+    sync_timer_update(i2c_buffer->sync_timer);
+#    endif
     // Copy matrix to I2C buffer
-    memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix));
+    memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix));
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix));
+#    endif
 
 // Read Backlight Info
 #    ifdef BACKLIGHT_ENABLE
@@ -235,6 +285,11 @@ void transport_slave(matrix_row_t matrix[]) {
 
 #    ifdef POINTING_DEVICE_ENABLE
     if (!is_keyboard_left()) {
+        static uint16_t cpi;
+        if (cpi != i2c_buffer->device_cpi) {
+            cpi = i2c_buffer->device_cpi;
+            pmw_set_cpi(cpi);
+        }
         i2c_buffer->mouse_x = split_mouse_x;
         i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT);
         i2c_buffer->mouse_y = split_mouse_y;
@@ -266,8 +321,13 @@ void transport_slave(matrix_row_t matrix[]) {
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended);
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix));
+    led_matrix_set_suspend_state(i2c_buffer->led_suspend_state);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix));
+    rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state);
 #    endif
 }
 
@@ -283,30 +343,44 @@ typedef struct _Serial_s2m_buffer_t {
     // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
     matrix_row_t smatrix[ROWS_PER_HAND];
 #    ifdef ENCODER_ENABLE
-    uint8_t encoder_state[NUMBER_OF_ENCODERS];
+    uint8_t      encoder_state[NUMBER_OF_ENCODERS];
 #    endif
-    int8_t mouse_x;
-    int8_t mouse_y;
+    int8_t       mouse_x;
+    int8_t       mouse_y;
 } __attribute__((packed)) Serial_s2m_buffer_t;
 
 typedef struct _Serial_m2s_buffer_t {
 #    ifdef SPLIT_MODS_ENABLE
-    uint8_t real_mods;
-    uint8_t weak_mods;
+    uint8_t       real_mods;
+    uint8_t       weak_mods;
 #        ifndef NO_ACTION_ONESHOT
-    uint8_t oneshot_mods;
+    uint8_t       oneshot_mods;
 #        endif
 #    endif
+#    ifndef DISABLE_SYNC_TIMER
+    uint32_t     sync_timer;
+#    endif
+#    ifdef SPLIT_TRANSPORT_MIRROR
+    matrix_row_t mmatrix[ROWS_PER_HAND];
+#    endif
 #    ifdef BACKLIGHT_ENABLE
-    uint8_t backlight_level;
+    uint8_t       backlight_level;
 #    endif
 #    ifdef WPM_ENABLE
-    uint8_t current_wpm;
+    uint8_t       current_wpm;
 #    endif
+    uint16_t      device_cpi;
     bool          oled_on;
     layer_state_t t_layer_state;
     layer_state_t t_default_layer_state;
-    bool          is_rgb_matrix_suspended;
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_eeconfig_t led_matrix;
+    bool           led_suspend_state;
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_config_t   rgb_matrix;
+    bool           rgb_suspend_state;
+#    endif
 } __attribute__((packed)) Serial_m2s_buffer_t;
 
 #    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
@@ -383,7 +457,7 @@ void transport_rgblight_slave(void) {
 #        define transport_rgblight_slave()
 #    endif
 
-bool transport_master(matrix_row_t matrix[]) {
+bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
 #    ifndef SERIAL_USE_MULTI_TRANSACTION
     if (soft_serial_transaction() != TRANSACTION_END) {
         return false;
@@ -397,7 +471,10 @@ bool transport_master(matrix_row_t matrix[]) {
 
     // TODO:  if MATRIX_COLS > 8 change to unpack()
     for (int i = 0; i < ROWS_PER_HAND; ++i) {
-        matrix[i] = serial_s2m_buffer.smatrix[i];
+        slave_matrix[i] = serial_s2m_buffer.smatrix[i];
+#    ifdef SPLIT_TRANSPORT_MIRROR
+        serial_m2s_buffer.mmatrix[i] = master_matrix[i];
+#    endif
     }
 
 #    ifdef BACKLIGHT_ENABLE
@@ -411,12 +488,12 @@ bool transport_master(matrix_row_t matrix[]) {
 
 #    ifdef WPM_ENABLE
     // Write wpm to slave
-    serial_m2s_buffer.current_wpm = get_current_wpm();
+    serial_m2s_buffer.current_wpm  = get_current_wpm();
 #    endif
 
 #    ifdef SPLIT_MODS_ENABLE
-    serial_m2s_buffer.real_mods = get_mods();
-    serial_m2s_buffer.weak_mods = get_weak_mods();
+    serial_m2s_buffer.real_mods    = get_mods();
+    serial_m2s_buffer.weak_mods    = get_weak_mods();
 #        ifndef NO_ACTION_ONESHOT
     serial_m2s_buffer.oneshot_mods = get_oneshot_mods();
 #        endif
@@ -428,28 +505,43 @@ bool transport_master(matrix_row_t matrix[]) {
         temp_report.x              = serial_s2m_buffer.mouse_x;
         temp_report.y              = serial_s2m_buffer.mouse_y;
         pointing_device_set_report(temp_report);
+        serial_m2s_buffer.device_cpi = device_cpi;
     }
 #    endif
 
-    serial_m2s_buffer.t_layer_state         = layer_state;
-    serial_m2s_buffer.t_default_layer_state = default_layer_state;
+    serial_m2s_buffer.t_layer_state           = layer_state;
+    serial_m2s_buffer.t_default_layer_state   = default_layer_state;
 #    ifdef OLED_DRIVER_ENABLE
-    serial_m2s_buffer.oled_on = is_oled_on();
+    serial_m2s_buffer.oled_on                 = is_oled_on();
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state();
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    serial_m2s_buffer.led_matrix        = led_matrix_eeconfig;
+    serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state();
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    serial_m2s_buffer.rgb_matrix        = rgb_matrix_config;
+    serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state();
 #    endif
 
+#    ifndef DISABLE_SYNC_TIMER
+    serial_m2s_buffer.sync_timer   = sync_timer_read32() + SYNC_TIMER_OFFSET;
+#    endif
     return true;
 }
 
-void transport_slave(matrix_row_t matrix[]) {
+void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
     transport_rgblight_slave();
+#    ifndef DISABLE_SYNC_TIMER
+    sync_timer_update(serial_m2s_buffer.sync_timer);
+#    endif
 
     // TODO: if MATRIX_COLS > 8 change to pack()
     for (int i = 0; i < ROWS_PER_HAND; ++i) {
-        serial_s2m_buffer.smatrix[i] = matrix[i];
+        serial_s2m_buffer.smatrix[i] = slave_matrix[i];
+#    ifdef SPLIT_TRANSPORT_MIRROR
+        master_matrix[i]             = serial_m2s_buffer.mmatrix[i];
+#    endif
     }
 
 #    ifdef BACKLIGHT_ENABLE
@@ -474,6 +566,11 @@ void transport_slave(matrix_row_t matrix[]) {
 
 #    ifdef POINTING_DEVICE_ENABLE
     if (!is_keyboard_left()) {
+        static uint16_t cpi;
+        if (cpi != serial_m2s_buffer.device_cpi) {
+            cpi = serial_m2s_buffer.device_cpi;
+            pmw_set_cpi(cpi);
+        }
         serial_s2m_buffer.mouse_x = split_mouse_x;
         serial_s2m_buffer.mouse_y = split_mouse_y;
     }
@@ -493,16 +590,14 @@ void transport_slave(matrix_row_t matrix[]) {
     }
 #    endif
 
-#    ifdef RGB_MATRIX_ENABLE
-    rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended);
+#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
+    led_matrix_eeconfig = serial_m2s_buffer.led_matrix;
+    led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state);
+#    endif
+#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
+    rgb_matrix_config = serial_m2s_buffer.rgb_matrix;
+    rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state);
 #    endif
 }
 
 #endif
-
-#ifdef POINTING_DEVICE_ENABLE
-void master_mouse_send(int8_t x, int8_t y) {
-    split_mouse_x = x;
-    split_mouse_y = y;
-}
-#endif
diff --git a/users/drashna/oled_stuff.c b/users/drashna/oled_stuff.c
index 4abf5f05f5..98e467d930 100644
--- a/users/drashna/oled_stuff.c
+++ b/users/drashna/oled_stuff.c
@@ -15,7 +15,6 @@
  */
 
 #include "drashna.h"
-#include <stdio.h>
 
 #ifndef KEYLOGGER_LENGTH
 // #    ifdef OLED_DISPLAY_128X64
@@ -158,6 +157,19 @@ void render_keylock_status(uint8_t led_usb_state) {
     oled_advance_page(true);
 #endif
 }
+void render_matrix_scan_rate(void) {
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    char matrix_rate[5];
+    uint16_t n = get_matrix_scan_rate();
+    matrix_rate[4] = '\0';
+    matrix_rate[3] = '0' + n % 10;
+    matrix_rate[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+    matrix_rate[1] =  n / 10 ? '0' + n / 10 : ' ';
+    matrix_rate[0] = ' ';
+    oled_write_P(PSTR("MS:"), false);
+    oled_write(matrix_rate, false);
+#endif
+}
 
 void render_mod_status(uint8_t modifiers) {
     static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};
@@ -169,11 +181,17 @@ void render_mod_status(uint8_t modifiers) {
 #endif
     oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT));
     oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL));
+
+    render_matrix_scan_rate();
 #if defined(OLED_DISPLAY_128X64)
     oled_advance_page(true);
 #endif
 }
 
+#ifdef SWAP_HANDS_ENABLE
+extern bool swap_hands;
+#endif
+
 void render_bootmagic_status(void) {
     /* Show Ctrl-Gui Swap options */
     static const char PROGMEM logo[][2][3] = {
@@ -209,7 +227,7 @@ void render_bootmagic_status(void) {
     oled_write_P(PSTR(" "), false);
     oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
     oled_write_P(PSTR(" "), false);
-    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), !keymap_config.no_gui);
+    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), keymap_config.no_gui);
 #ifdef OLED_DISPLAY_128X64
     oled_advance_page(true);
     oled_write_P(PSTR("Magic"), false);
@@ -221,10 +239,11 @@ void render_bootmagic_status(void) {
     }
 #endif
     oled_write_P(PSTR(" "), false);
-    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_GRV), keymap_config.swap_grave_esc);
+    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_ONESHOT), !is_oneshot_enabled());
+#ifdef SWAP_HANDS_ENABLE
     oled_write_P(PSTR(" "), false);
-    oled_write_P(PSTR(" "), false);
-    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_CAPS), keymap_config.swap_control_capslock);
+    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_SWAP), swap_hands);
+#endif
 #ifdef OLED_DISPLAY_128X64
     oled_advance_page(true);
 #endif
@@ -282,12 +301,22 @@ __attribute__((weak)) void oled_driver_render_logo(void) {
 
 void render_wpm(void) {
 #ifdef WPM_ENABLE
+    uint8_t n = get_current_wpm();
 #    ifdef OLED_DISPLAY_128X64
     char wpm_counter[4];
+    wpm_counter[3] = '\0';
+    wpm_counter[2] = '0' + n % 10;
+    wpm_counter[1] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+    wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';
 #    else
     char wpm_counter[6];
-#    endif
-    snprintf(wpm_counter, sizeof(wpm_counter), "%3u", get_current_wpm());
+    wpm_counter[5] = '\0';
+    wpm_counter[4] = '0' + n % 10;
+    wpm_counter[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+    wpm_counter[2] = n / 10 ? '0' + n / 10 : ' ';
+    wpm_counter[1] = ' ';
+    wpm_counter[0] = ' ';
+    #    endif
     oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);
     oled_write(wpm_counter, false);
 #endif
@@ -299,7 +328,13 @@ extern uint16_t          dpi_array[];
 
 void render_pointing_dpi_status(void) {
     char dpi_status[6];
-    snprintf(dpi_status, sizeof(dpi_status), "%5u", dpi_array[keyboard_config.dpi_config]);
+    uint16_t n = dpi_array[keyboard_config.dpi_config];
+    dpi_status[5] = '\0';
+    dpi_status[4] = '0' + n % 10;
+    dpi_status[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+    dpi_status[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
+    dpi_status[1] =  n / 10 ? '0' + n / 10 : ' ';
+    dpi_status[0] = ' ';
     oled_write_P(PSTR("  DPI: "), false);
     oled_write(dpi_status, false);
 }
@@ -320,7 +355,11 @@ void render_status_secondary(void) {
 void render_status_main(void) {
 #if defined(OLED_DISPLAY_128X64)
     oled_driver_render_logo();
+#    ifdef DEBUG_MATRIX_SCAN_RATE
+    render_matrix_scan_rate();
+#    else
     render_wpm();
+#    endif
 #    ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball
     render_pointing_dpi_status();
 #    endif
diff --git a/users/drashna/oled_stuff.h b/users/drashna/oled_stuff.h
index 2224cd90ea..1f4440bd42 100644
--- a/users/drashna/oled_stuff.h
+++ b/users/drashna/oled_stuff.h
@@ -57,6 +57,8 @@ extern uint32_t oled_timer;
 #    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO"
 #    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
 #    define OLED_RENDER_BOOTMAGIC_GRV   "GRV"
+#    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
+#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
 #    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS"
 
 #    define OLED_RENDER_USER_NAME "USER:"
@@ -99,6 +101,8 @@ extern uint32_t oled_timer;
 #    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO"
 #    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
 #    define OLED_RENDER_BOOTMAGIC_GRV   "GRV"
+#    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
+#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
 #    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS"
 
 #    define OLED_RENDER_USER_NAME "USER:"
diff --git a/users/drashna/pimoroni_trackball.c b/users/drashna/pimoroni_trackball.c
index 9ae094c05a..a6ca6c9966 100644
--- a/users/drashna/pimoroni_trackball.c
+++ b/users/drashna/pimoroni_trackball.c
@@ -33,7 +33,7 @@ static float   precisionSpeed = 1;
 
 void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
     uint8_t data[] = {0x00, red, green, blue, white};
-    i2c_transmit(TRACKBALL_WRITE, data, sizeof(data), I2C_TIMEOUT);
+    i2c_transmit(TRACKBALL_ADDRESS << 1, data, sizeof(data), I2C_TIMEOUT);
 }
 
 int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) {
@@ -94,7 +94,7 @@ void pointing_device_task(void) {
     static bool     debounce;
     static uint16_t debounce_timer;
     uint8_t         state[5] = {};
-    if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
+    if (i2c_readReg(TRACKBALL_ADDRESS << 1, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
         if (!state[4] && !debounce) {
             if (scrolling) {
 #ifdef PIMORONI_TRACKBALL_INVERT_X
diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h
index 2e24670501..f60e6d7ebc 100644
--- a/users/drashna/process_records.h
+++ b/users/drashna/process_records.h
@@ -53,7 +53,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 #define LOWER   MO(_LOWER)
 #define RAISE   MO(_RAISE)
 #define ADJUST  MO(_ADJUST)
-#define TG_MODS TG(_MODS)
+#define TG_MODS OS_TOGG
 #define TG_GAME TG(_GAMEPAD)
 #define TG_DBLO TG(_DIABLO)
 #define OS_LWR  OSL(_LOWER)
diff --git a/users/drashna/rgb_matrix_stuff.c b/users/drashna/rgb_matrix_stuff.c
index 573cc7bc9d..9e9e1e4279 100644
--- a/users/drashna/rgb_matrix_stuff.c
+++ b/users/drashna/rgb_matrix_stuff.c
@@ -62,7 +62,7 @@ __attribute__((weak)) void rgb_matrix_indicator_keymap(void) {}
 
 void matrix_scan_rgb_matrix(void) {
 #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
-    if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) {
+    if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && sync_timer_elapsed32(hypno_timer) > 15000) {
         rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
     }
 #endif
@@ -79,7 +79,7 @@ void keyboard_post_init_rgb_matrix(void) {
 
 bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
 #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
-    hypno_timer = timer_read32();
+    hypno_timer = sync_timer_read32();
     if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
         rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
     }
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index c8b2f4c726..6723ad4bf5 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -32,7 +32,7 @@ void scan_rgblight_fadeout(void) {  // Don't effing change this function .... rg
     bool litup = false;
 
     for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) {
-        if (lights[light_index].enabled && timer_elapsed(lights[light_index].timer) > 10) {
+        if (lights[light_index].enabled && sync_timer_elapsed(lights[light_index].timer) > 10) {
             rgblight_fadeout *light = &lights[light_index];
             litup                   = true;
 
@@ -41,7 +41,7 @@ void scan_rgblight_fadeout(void) {  // Don't effing change this function .... rg
                 if (get_highest_layer(layer_state) == 0) {
                     sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
                 }
-                light->timer = timer_read();
+                light->timer = sync_timer_read();
             } else {
                 if (light->enabled && get_highest_layer(layer_state) == 0) {
                     rgblight_sethsv_default_helper(light_index);
@@ -86,7 +86,7 @@ void start_rgb_light(void) {
 
     rgblight_fadeout *light = &lights[light_index];
     light->enabled          = true;
-    light->timer            = timer_read();
+    light->timer            = sync_timer_read();
     light->life             = 0xC0 + rand() % 0x40;
 
     light->hue = rgblight_get_hue() + (rand() % 0xB4) - 0x54;
@@ -149,11 +149,11 @@ void matrix_scan_rgb_light(void) {
 
 #    if defined(RGBLIGHT_STARTUP_ANIMATION)
     if (is_rgblight_startup && is_keyboard_master()) {
-        if (timer_elapsed(rgblight_startup_loop_timer) > 10) {
+        if (sync_timer_elapsed(rgblight_startup_loop_timer) > 10) {
             static uint8_t counter;
             counter++;
             rgblight_sethsv_noeeprom((counter + old_hue) % 255, 255, 255);
-            rgblight_startup_loop_timer = timer_read();
+            rgblight_startup_loop_timer = sync_timer_read();
             if (counter == 255) {
                 is_rgblight_startup = false;
                 if (!is_enabled) {
@@ -177,14 +177,11 @@ void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mo
 layer_state_t layer_state_set_rgb_light(layer_state_t state) {
 #    ifdef RGBLIGHT_ENABLE
     if (userspace_config.rgb_layer_change) {
-        uint8_t mode = layer_state_cmp(state, _MODS) ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT;
         switch (get_highest_layer(state | default_layer_state)) {
-            case _MACROS:
-#        ifdef RGBLIGHT_EFFECT_TWINKLE
-                rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5);
-#        else
-                rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
-#        endif
+            case _MACROS: // mouse
+                if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) {
+                    rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
+                }
                 break;
             case _MEDIA:
                 rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1);
@@ -205,28 +202,28 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {
                 rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
                 break;
             case _COLEMAK:
-                rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
+                rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _DVORAK:
-                rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
+                rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _WORKMAN:
-                rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
+                rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _NORMAN:
-                rgblight_set_hsv_and_mode(HSV_CORAL, mode);
+                rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _MALTRON:
-                rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
+                rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _EUCALYN:
-                rgblight_set_hsv_and_mode(HSV_PINK, mode);
+                rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             case _CARPLAX:
-                rgblight_set_hsv_and_mode(HSV_BLUE, mode);
+                rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
             default:
-                rgblight_set_hsv_and_mode(HSV_CYAN, mode);
+                rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT);
                 break;
         }
     }
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 2ae01c62e5..b79051508b 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -16,29 +16,37 @@ ifneq ($(strip $(NO_SECRETS)), yes)
     endif
 endif
 
+CUSTOM_TAP_DANCE ?= yes
 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
-    SRC += tap_dances.c
+    ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+        SRC += tap_dances.c
+    endif
 endif
 
+CUSTOM_RGBLIGHT ?= yes
 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
-    SRC += rgb_stuff.c
-    ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
-        OPT_DEFS += -DRGBLIGHT_TWINKLE
-    endif
-    ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
-        OPT_DEFS += -DRGBLIGHT_NOEEPROM
-    endif
-    ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
-        OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
+    ifeq ($(strip $(CUSTOM_RGBLIGHT)), yes)
+        SRC += rgb_stuff.c
+        ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
+            OPT_DEFS += -DRGBLIGHT_TWINKLE
+        endif
+        ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
+            OPT_DEFS += -DRGBLIGHT_NOEEPROM
+        endif
+        ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
+            OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
+        endif
     endif
 endif
 
-RGB_MATRIX_ENABLE ?= no
-ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
-    SRC += rgb_matrix_stuff.c
+CUSTOM_RGB_MATRIX ?= yes
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
+    ifeq ($(strip $(CUSTOM_RGB_MATRIX)), yes)
+        SRC += rgb_matrix_stuff.c
+    endif
 endif
 
-
+KEYLOGGER_ENABLE ?= no
 ifdef CONSOLE_ENABLE
     ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
         OPT_DEFS += -DKEYLOGGER_ENABLE
@@ -56,8 +64,11 @@ ifeq ($(strip $(PROTOCOL)), VUSB)
     NKRO_ENABLE       = no
 endif
 
+CUSTOM_OLED_DRIVER ?= yes
 ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
-    SRC += oled_stuff.c
+    ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
+        SRC += oled_stuff.c
+    endif
 endif
 
 ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
@@ -67,26 +78,30 @@ ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
     QUANTUM_LIB_SRC += i2c_master.c
 endif
 
-
+CUSTOM_SPLIT_TRANSPORT ?= yes
 ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
     ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
-        SPLIT_TRANSPORT = custom
-        QUANTUM_LIB_SRC += drashna_transport.c
-        OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT
-        # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
-        ifeq ($(PLATFORM),AVR)
-            ifneq ($(NO_I2C),yes)
-                QUANTUM_LIB_SRC += i2c_master.c \
-                                   i2c_slave.c
+        ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes)
+            SPLIT_TRANSPORT = custom
+            QUANTUM_LIB_SRC += drashna_transport.c
+            OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT
+            # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
+            ifeq ($(PLATFORM),AVR)
+                ifneq ($(NO_I2C),yes)
+                    QUANTUM_LIB_SRC += i2c_master.c \
+                                    i2c_slave.c
+                endif
             endif
-        endif
 
-        SERIAL_DRIVER ?= bitbang
-        OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
-        ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
-            QUANTUM_LIB_SRC += serial.c
-        else
-            QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
+            SERIAL_DRIVER ?= bitbang
+            OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
+            ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
+                QUANTUM_LIB_SRC += serial.c
+            else
+                QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
+            endif
         endif
     endif
 endif
+
+# DEBUG_MATRIX_SCAN_RATE_ENABLE = api