diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 57c74ded229f7663793bb43f852d441732292632..1f8d779f8c0479878568c5a70137b9e8bc70b334 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -3050,15 +3050,6 @@ bool FakeVimHandler::Private::handleMovement(const Input &input)
         m_movetype = MoveLineWise;
         moveDown(count);
         movement = "j";
-    } else if (input.is('J')) {
-        moveBehindEndOfLine();
-        const int pos = position();
-        beginEditBlock();
-        if (m_submode == NoSubMode)
-            joinLines(count, m_gflag);
-        endEditBlock();
-        setPosition(pos);
-        setDotCommand("%1J", count);
     } else if (input.is('k') || input.isKey(Key_Up) || input.isControl('p')) {
         m_movetype = MoveLineWise;
         moveUp(count);
@@ -3426,6 +3417,15 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input)
         enterInsertMode();
     } else if (input.isControl('i')) {
         jump(count());
+    } else if (input.is('J')) {
+        moveBehindEndOfLine();
+        const int pos = position();
+        beginEditBlock();
+        if (m_submode == NoSubMode)
+            joinLines(count, m_gflag);
+        endEditBlock();
+        setPosition(pos);
+        setDotCommand("%1J", count);
     } else if (input.isControl('l')) {
         // screen redraw. should not be needed
     } else if (input.is('m')) {