diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 7a6f901b4b31a328f9d80ba299f1fc9c89e33d55..eb98ead8fc470295686c5be6d1b30841ad328823 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -954,12 +954,15 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         setDotCommand("%1cc", count());
         finishMovement();
     } else if (m_submode == DeleteSubMode && key == 'd') { // tested
-        moveToStartOfLine();
-        setTargetColumn(); 
-        setAnchor();
-        moveDown(count());
         m_movetype = MoveLineWise;
+        int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1);
+        Range range(position(), endPos, RangeLineMode);
+        yankText(range);
+        removeText(range);
         setDotCommand("%1dd", count());
+        m_submode = NoSubMode;
+        moveToFirstNonBlankOnLine();
+        setTargetColumn(); 
         finishMovement();
     } else if (m_submode == YankSubMode && key == 'y') {
         m_movetype = MoveLineWise;
diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp
index fc873e8317fce7503bc9cf29af0efcceb5b96325..9201ba7d5e599a679fb436809a0984ddd05cb647 100644
--- a/tests/auto/fakevim/main.cpp
+++ b/tests/auto/fakevim/main.cpp
@@ -58,6 +58,7 @@ private slots:
     // command mode
     void command_cc();
     void command_dd();
+    void command_dd_2();
     void command_dollar();
     void command_down();
     void command_dfx_down();
@@ -277,13 +278,23 @@ void tst_FakeVim::command_dd()
     move("j",    "@" + l[1]);
     check("dd",  l[0] + "\n@" + lmid(2));
     check(".",   l[0] + "\n@" + lmid(3));
-    check("3dd", l[0] + "\n@" + lmid(6));
-    check("8l",  l[0] + "\n    QApp@lication app(argc, argv);\n" + lmid(7));
+    check("3dd", l[0] + "\n    @QApplication app(argc, argv);\n" + lmid(7));
+    check("4l",  l[0] + "\n    QApp@lication app(argc, argv);\n" + lmid(7));
     check("dd",  l[0] + "\n@" + lmid(7));
-    check(".",   l[0] + "\n@" + lmid(8));
+    check(".",   l[0] + "\n    @return app.exec();\n" + lmid(9));
     check("dd",  l[0] + "\n@" + lmid(9));
 }
 
+void tst_FakeVim::command_dd_2()
+{
+    setup();
+    move("j",    "@" + l[1]);
+    check("dd",  l[0] + "\n@" + lmid(2));
+    check("p",   l[0] + "\n" + l[2] + "\n@" + l[1] + "\n" + lmid(3));
+return; // FIXME
+    check("u",   l[0] + "\n@" + lmid(2));
+}
+
 void tst_FakeVim::command_dollar()
 {
     setup();