diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index cb9db162f5f981ab5841bca99f1d850221589fd7..3a76b7d00508260adced29bd28d7c631bb9f319a 100755
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1257,12 +1257,14 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         setTargetColumn();
         finishMovement();
     } else if (key == '$' || key == Key_End) {
+        if (count() > 1)
+            moveDown(count() - 1);
         moveToEndOfLine();
         m_movetype = MoveInclusive;
         setTargetColumn();
         if (m_submode == NoSubMode)
             m_targetColumn = -1;
-        finishMovement("$");
+        finishMovement("%1$", count());
     } else if (key == ',') {
         // FIXME: use some other mechanism
         //m_passing = true;