diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 0e25bfd41d6597f1ec808b13df7308a017c7a275..3f6bb103c59a0d28e84f0de5d5287201f7acab3a 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -291,8 +291,12 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
 {
     int key = ev->key();
 
+    // FIXME
     if (m_mode == PassingMode && key != Qt::Key_Control && key != Qt::Key_Shift) {
-        enterCommandMode();
+        if (key == ',') { // use ',,' to leave, too.
+            quit();
+            return true;
+        }
         return false;
     }
 
@@ -1109,6 +1113,8 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
                 info += key + ": " + m_config.value(key) + "\n";
             emit q->extraInformationChanged(info);
         }
+        enterCommandMode();
+        updateMiniBuffer();
     } else {
         showRedMessage("E492: Not an editor command: " + cmd0);
     }
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index f801de84ce72cccef521bc65022d9e7c8706b2db..9524e618e090e5c18833725b82bd5b7f86ff91fc 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -136,6 +136,14 @@ bool FakeVimPlugin::initialize(const QStringList &arguments, QString *error_mess
 
     connect(m_installHandlerAction, SIGNAL(triggered()),
         this, SLOT(installHandler()));
+
+    // EditorManager
+    QObject *editorManager = m_core->editorManager();
+    connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)),
+        this, SLOT(editorAboutToClose(Core::IEditor*)));
+    connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)),
+        this, SLOT(editorOpened(Core::IEditor*)));
+
     return true;
 }
 
@@ -145,14 +153,12 @@ void FakeVimPlugin::extensionsInitialized()
 
 void FakeVimPlugin::installHandler()
 {
-    if (!m_core || !m_core->editorManager())
-        return;
-
-    Core::IEditor *editor = m_core->editorManager()->currentEditor();
-    ITextEditor *textEditor = qobject_cast<ITextEditor*>(editor);
-    if (!textEditor)
-        return;
+    if (Core::IEditor *editor = m_core->editorManager()->currentEditor())
+        installHandler(editor->widget());
+}
 
+void FakeVimPlugin::installHandler(QWidget *widget)
+{
     connect(m_handler, SIGNAL(extraInformationChanged(QString)),
         this, SLOT(showExtraInformation(QString)));
     connect(m_handler, SIGNAL(commandBufferChanged(QString)),
@@ -160,11 +166,9 @@ void FakeVimPlugin::installHandler()
     connect(m_handler, SIGNAL(quitRequested(QWidget *)),
         this, SLOT(removeHandler(QWidget *)));
 
-    m_handler->addWidget(textEditor->widget());
-
-    BaseTextEditor *baseTextEditor =
-        qobject_cast<BaseTextEditor *>(editor->widget());
+    m_handler->addWidget(widget);
 
+    BaseTextEditor *baseTextEditor = qobject_cast<BaseTextEditor *>(widget);
     if (baseTextEditor) {
         using namespace TextEditor;
         using namespace FakeVim::Constants;
@@ -184,11 +188,23 @@ void FakeVimPlugin::installHandler()
 
 void FakeVimPlugin::removeHandler(QWidget *widget)
 {
-    m_handler->removeWidget(widget);
+    //m_handler->removeWidget(widget);
     Core::EditorManager::instance()->hideEditorInfoBar(
         QLatin1String(Constants::MINI_BUFFER));
 }
 
+void FakeVimPlugin::editorOpened(Core::IEditor *editor)
+{
+    //qDebug() << "OPENING: " << editor << editor->widget();
+    //installHandler(editor->widget()); 
+}
+
+void FakeVimPlugin::editorAboutToClose(Core::IEditor *editor)
+{
+    //qDebug() << "CLOSING: " << editor << editor->widget();
+    removeHandler(editor->widget()); 
+}
+
 void FakeVimPlugin::showCommandBuffer(const QString &contents)
 {
     Core::EditorManager::instance()->showEditorInfoBar( 
diff --git a/src/plugins/fakevim/fakevimplugin.h b/src/plugins/fakevim/fakevimplugin.h
index fcaf8882ba8a97e03562bae833ef71927b952b00..793c2264d0086b59e9b17c44275fe63b397b506f 100644
--- a/src/plugins/fakevim/fakevimplugin.h
+++ b/src/plugins/fakevim/fakevimplugin.h
@@ -78,9 +78,12 @@ private:
 
 private slots:
     void installHandler();
+    void installHandler(QWidget *widget);
     void removeHandler(QWidget *widget);
     void showCommandBuffer(const QString &contents);
     void showExtraInformation(const QString &msg);
+    void editorOpened(Core::IEditor *);
+    void editorAboutToClose(Core::IEditor *);
 
 private:
     FakeVimHandler *m_handler;