diff --git a/keymap_hhkb.c b/keymap_hhkb.c
index a1ec7fbef..11a3888fd 100644
--- a/keymap_hhkb.c
+++ b/keymap_hhkb.c
@@ -69,7 +69,7 @@ static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
         { KB_5,       KB_6,       KB_Y,       KB_T,       KB_G,       KB_H,       KB_N,       KB_NO       },
         { KB_1,       KB_ESCAPE,  KB_TAB,     KB_LCTRL,   KB_LSHIFT,  KB_LGUI,    KB_LALT,    KB_SPACE    },
         { KB_7,       KB_8,       KB_U,       KB_I,       KB_K,       KB_J,       KB_M,       KB_NO       },
-        { KB_BSLASH,  KB_GRAVE,   KB_BSPACE,  KB_ENTER,   FN_1,       FN_2,       KB_RGUI,    FN_3        },
+        { KB_BSLASH,  KB_GRAVE,   KB_BSPACE,  FN_4,       FN_1,       FN_2,       KB_RGUI,    FN_3        },
         { KB_9,       KB_0,       KB_O,       KB_P,       KB_SCOLON,  KB_L,       KB_COMMA,   KB_NO       },
         { KB_MINUS,   KB_EQUAL,   KB_RBRACKET,KB_LBRACKET,KB_QUOTE,   KB_SLASH,   KB_DOT,     KB_NO       },
     },
@@ -106,6 +106,17 @@ static const uint8_t PROGMEM Keymap[][MATRIX_ROWS][MATRIX_COLS] = {
         { KB_F9,      KB_F10,     KB_END,     KB_NO,      KB_NO,      KB_RIGHT,   MS_DOWN,    KB_NO       },
         { KB_F11,     KB_F12,     MS_WH_UP,   MS_WH_DOWN, KB_NO,      MS_RIGHT,   MS_UP,      KB_NO       },
     },
+    // 3: FN_4(Enter) vi mouse mode
+    {
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO       },
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO       },
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO,      KB_NO       },
+        { KB_NO,      KB_ESCAPE,  KB_TAB,     KB_LCTRL,   KB_LSHIFT,  KB_LGUI,    KB_LALT,    MS_BTN1     },
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      MS_LEFT,    KB_NO,      KB_NO,      KB_NO       },
+        { KB_NO,      KB_NO,      KB_BSPACE,  KB_NO,      KB_NO,      KB_NO,      MS_BTN2,    MS_BTN1     },
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      MS_UP,      MS_DOWN,    KB_NO,      KB_NO       },
+        { KB_NO,      KB_NO,      KB_NO,      KB_NO,      MS_RIGHT,   KB_NO,      KB_NO,      KB_NO       },
+    },
 };
 
 
@@ -123,11 +134,17 @@ int get_layer(void) {
     for (int row = 0; row < MATRIX_ROWS; row++) {
         for (int col = 0; col < MATRIX_ROWS; col++) {
             if (matrix[row] & 1<<col) continue;
-            if (get_keycode(0, row, col) == FN_1) layer = ((layer == 0 || layer > 1) ? 1 : layer);
-            if (get_keycode(0, row, col) == FN_2) layer = ((layer == 0 || layer > 2) ? 2 : layer);
-            if (get_keycode(0, row, col) == FN_3) layer = ((layer == 0 || layer > 3) ? 3 : layer);
+            if (get_keycode(0, row, col) == FN_1) layer = 1;
+            if (get_keycode(0, row, col) == FN_2) layer = 2;
+            if (get_keycode(0, row, col) == FN_3) layer = 3;
+            if (get_keycode(0, row, col) == FN_4) layer = 4;
         }
     }
-    current_layer = layer;
+
+    if (layer == 0)
+        current_layer = 0;
+    else if (current_layer == 0)
+        current_layer = layer;
+
     return current_layer;
 }