diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 761a97fa272650ac99b4a438de01c7816bda615e..edddd9f61c06e4e5e2386807f420e8be8ccd2c9f 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -235,7 +235,7 @@ public:
     bool atEndOfLine() const
         { return m_tc.atBlockEnd() && m_tc.block().length() > 1; }
 
-    int lastPositionInDocument() const;
+    int lastPositionInDocument() const; // last valid pos in doc
     int firstPositionInLine(int line) const; // 1 based line, 0 based pos
     int lastPositionInLine(int line) const; // 1 based line, 0 based pos
     int lineForPosition(int pos) const;  // 1 based line, 0 based pos
@@ -272,6 +272,7 @@ public:
     void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); }
     void moveToStartOfLine();
     void moveToEndOfLine();
+    void moveBehindEndOfLine();
     void moveUp(int n = 1) { moveDown(-n); }
     void moveDown(int n = 1); // { m_tc.movePosition(Down, MoveAnchor, n); }
     void moveRight(int n = 1) { m_tc.movePosition(Right, MoveAnchor, n); }
@@ -633,6 +634,13 @@ void FakeVimHandler::Private::moveToEndOfLine()
 #endif
 }
 
+void FakeVimHandler::Private::moveBehindEndOfLine()
+{
+    const QTextBlock &block = m_tc.block();
+    int pos = qMin(block.position() + block.length(), lastPositionInDocument());
+    setPosition(pos);
+}
+
 void FakeVimHandler::Private::moveToStartOfLine()
 {
 #if 0
@@ -887,9 +895,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
     } else if (m_submode == YankSubMode && key == 'y') {
         moveToStartOfLine();
         setAnchor();
-        moveDown(count());
+        moveDown(count() - 1);
+        moveBehindEndOfLine();
         m_moveType = MoveLineWise;
-        finishMovement("y");
+        finishMovement();
     } else if (m_submode == ShiftLeftSubMode && key == '<') {
         setAnchor();
         moveDown(count() - 1);
@@ -1086,7 +1095,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         m_passing = !m_passing;
         updateMiniBuffer();
     } else if (key == '.') {
-        qDebug() << "REPEATING" << quoteUnprintable(m_dotCommand);
+        //qDebug() << "REPEATING" << quoteUnprintable(m_dotCommand);
         QString savedCommand = m_dotCommand;
         m_dotCommand.clear();
         replay(savedCommand, count());
@@ -2024,7 +2033,7 @@ void FakeVimHandler::Private::search(const QString &needle0, bool forward)
             scrollToLineInDocument(cursorLineInDocument() - linesOnScreen() / 2);
         highlightMatches(needle);
     } else {
-        m_tc.setPosition(forward ? 0 : lastPositionInDocument() - 1);
+        m_tc.setPosition(forward ? 0 : lastPositionInDocument());
         EDITOR(setTextCursor(m_tc));
         if (EDITOR(find(needle, flags))) {
             m_tc = EDITOR(textCursor());
@@ -2199,7 +2208,7 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward)
 {
     int repeat = count();
     QTextDocument *doc = m_tc.document();
-    int n = forward ? lastPositionInDocument() - 1 : 0;
+    int n = forward ? lastPositionInDocument() : 0;
     int lastClass = -1;
     while (true) {
         QChar c = doc->characterAt(m_tc.position() + (forward ? 1 : -1));
@@ -2257,7 +2266,7 @@ void FakeVimHandler::Private::moveToNextWord(bool simple)
 {
     // FIXME: 'w' should stop on empty lines, too
     int repeat = count();
-    int n = lastPositionInDocument() - 1;
+    int n = lastPositionInDocument();
     int lastClass = charClass(characterAtCursor(), simple);
     while (true) {
         QChar c = characterAtCursor();
@@ -2344,7 +2353,7 @@ void FakeVimHandler::Private::scrollUp(int count)
 int FakeVimHandler::Private::lastPositionInDocument() const
 {
     QTextBlock block = m_tc.document()->lastBlock();
-    return block.position() + block.length();
+    return block.position() + block.length() - 1;
 }
 
 QString FakeVimHandler::Private::lastSearchString() const
diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp
index 2952d054677d14e6953adb2284f634fbefb1ad68..08773eeb0a4d6627e89c74e6156bfafff0c3d3e3 100644
--- a/tests/auto/fakevim/main.cpp
+++ b/tests/auto/fakevim/main.cpp
@@ -69,6 +69,8 @@ private slots:
     void command_right();
     void command_up();
     void command_w();
+    void command_yyp();
+    void command_Gyyp();
 
     // special tests
     void test_i_cw_i();
@@ -305,6 +307,7 @@ void tst_FakeVim::command_dfx_down()
     check("df ",  l[0] + "\n#inc@<QtCore>\n" + lmid(2));
     check("j",    l[0] + "\n#inc<QtCore>\n#inc@lude <QtGui>\n" + lmid(3));
     check(".",    l[0] + "\n#inc<QtCore>\n#inc@<QtGui>\n" + lmid(3));
+    qWarning("FIXME");
 return;
     check("u",    l[0] + "\n#inc<QtCore>\n#inc@lude <QtGui>\n" + lmid(3));
     check("u",    l[0] + "\n#inc@lude <QtCore>\n" + lmid(2));
@@ -396,6 +399,7 @@ void tst_FakeVim::command_r()
     check("rx",  lmid(0, 4) + "\nint main(int argc, char *argv[]x@\n" + lmid(5)); 
     check("2h",  lmid(0, 4) + "\nint main(int argc, char *argv[@]x\n" + lmid(5));
     check("4ra", lmid(0, 4) + "\nint main(int argc, char *argv[@]x\n" + lmid(5));
+    qWarning("FIXME");
 return; // FIXME
     check("3rb", lmid(0, 4) + "\nint main(int argc, char *argv[bb@b\n" + lmid(5));
     check("2rc", lmid(0, 4) + "\nint main(int argc, char *argv[bb@b\n" + lmid(5));
@@ -440,7 +444,23 @@ void tst_FakeVim::command_w()
     move("w",   "@{");
 }
 
+void tst_FakeVim::command_yyp()
+{
+    setup();
+    move("4j",   "@int main");
+    check("yyp", lmid(0, 4) + "\n" + lmid(4, 1) + "\n@" + lmid(4));
+}
+
+void tst_FakeVim::command_Gyyp()
+{
+    qWarning("FIXME");
+return; // FIXME
+    setup();
+    check("G",   lmid(0) + "@");
+    check("yyp", lmid(0) + "@" + lmid(9, 1));
+}
 /*
+
 #include <QtCore>
 #include <QtGui>
 
@@ -458,6 +478,7 @@ void tst_FakeVim::test_i_cw_i()
     setup();
     move("j",                "@" + l[1]);
     check("ixx" + escape,    l[0] + "\nx@x" + lmid(1));
+    qWarning("FIXME");
 return; // FIXME: not in sync with Gui behaviour?
     check("cwyy" + escape,   l[0] + "\nxy@y" + lmid(1));
     check("iaa" + escape,    l[0] + "\nxya@ay" + lmid(1));
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index b8b327af50ecd77041b23f7397998b6b7a3fedcb..9330df449a39d4a9a342de2f1e50c0e8f88e9cb9 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -1001,8 +1001,10 @@ void testQVectorOfQList()
 
 void testNoArgumentName(int i, int, int k)
 {
-    i = 1;
-    k = 2;
+    i = 1000;
+    k = 2000;
+    ++k;
+    ++k;
 }
 
 void foo() {}
@@ -1273,4 +1275,4 @@ struct QMetaTypeId< QMap<uint, QStringList> >
         return metatype_id;                                    \
     }                                                           \
 };
-QT_END_NAMESPACE
+QT_END_NAMESPACE
\ No newline at end of file