diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index b42c4d011e1357b8edbe72196fbc53885d41356a..08f13aec960adbcbc35b497c770227dbbd2f68d1 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -358,6 +358,7 @@ public:
 
     // extra data for '.'
     QString m_dotCommand;
+    bool m_inReplay; // true if we are executing a '.'
 
     // extra data for ';'
     QString m_semicolonCount;
@@ -366,11 +367,11 @@ public:
 
     // history for '/'
     QString lastSearchString() const;
-    QStringList m_searchHistory;
+    static QStringList m_searchHistory;
     int m_searchHistoryIndex;
 
     // history for ':'
-    QStringList m_commandHistory;
+    static QStringList m_commandHistory;
     int m_commandHistoryIndex;
 
     // visual line mode
@@ -403,6 +404,9 @@ public:
     QList<QTextEdit::ExtraSelection> m_searchSelections;
 };
 
+QStringList FakeVimHandler::Private::m_searchHistory;
+QStringList FakeVimHandler::Private::m_commandHistory;
+
 FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget)
 {
     q = parent;
@@ -424,8 +428,9 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget)
     m_anchor = 0;
     m_savedYankPosition = 0;
     m_cursorWidth = EDITOR(cursorWidth());
+    m_inReplay = false;
 
-#if 1
+#if 0
     // Plain
     m_config[ConfigStartOfLine] = ConfigOn;
     m_config[ConfigHlSearch]    = ConfigOn;
@@ -1012,9 +1017,11 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         qDebug() << "REPEATING" << m_dotCommand;
         QString savedCommand = m_dotCommand;
         m_dotCommand.clear();
+        m_inReplay = true;
         for (int i = count(); --i >= 0; )
             foreach (QChar c, savedCommand)
                 handleKey(c.unicode(), c.unicode(), QString(c));
+        m_inReplay = false;
         enterCommandMode();
         m_dotCommand = savedCommand;
     } else if (key == '<' && m_visualMode == NoVisualMode) {
@@ -1413,10 +1420,14 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         recordInsertText(str);
         recordEndGroup();
     } else if (key == Key_PageDown || key == control('f')) {
-        moveDown(count() * (linesOnScreen() - 2));
+        moveDown(count() * (linesOnScreen() - 2) - cursorLineOnScreen());
+        scrollToLineInDocument(cursorLineInDocument());
+        moveToFirstNonBlankOnLine();
         finishMovement();
     } else if (key == Key_PageUp || key == control('b')) {
-        moveUp(count() * (linesOnScreen() - 2));
+        moveUp(count() * (linesOnScreen() - 2) + cursorLineOnScreen());
+        scrollToLineInDocument(cursorLineInDocument() + linesOnScreen() - 2);
+        moveToFirstNonBlankOnLine();
         finishMovement();
     } else if (key == Key_Delete) {
         setAnchor();
@@ -1512,8 +1523,8 @@ EventResult FakeVimHandler::Private::handleInsertMode(int key, int,
             if (leftText.simplified().isEmpty())
                 indentRegion(text.at(0));
         }
-        
-        if (text.at(0) == '.' || text.at(0) == '>')
+       
+        if (!m_inReplay) 
             emit q->completionRequested();
     } else {
         return EventUnhandled;
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 8ece7de87249704273db4969c320fb9dc9780d1f..65e907cdd8f2e44432fab5798f2c9301a0249bd0 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -47,6 +47,7 @@
 
 #include <texteditor/basetexteditor.h>
 #include <texteditor/basetextmark.h>
+#include <texteditor/completionsupport.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/texteditorconstants.h>
 #include <texteditor/interactionsettings.h>
@@ -244,7 +245,9 @@ void FakeVimPluginPrivate::triggerCompletions()
     if (!handler)
         return;
     if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(handler->widget()))
-        bt->triggerCompletions();
+        TextEditor::Internal::CompletionSupport::instance()->
+            autoComplete(bt->editableInterface(), false);
+   //     bt->triggerCompletions();
 }
 
 void FakeVimPluginPrivate::writeFile(bool *handled,
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index 4115a49a50853b155ed20815b97609922075f05b..6ab3cd96901caadc6e28da0bee8b5d94a042b7f5 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -710,6 +710,7 @@ void testQString()
     str += " World ";
     str += " World ";
     str += " World ";
+    str.append(s);
 }
 
 void testQString3()