diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 6bb67c03aaf7a7386c59cb560c9af2bcb12cb558..aa4e64312f6810697bc79b4196425cdf975c3ff0 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -474,7 +474,7 @@ void FakeVimHandler::Private::updateSelection()
             }
         }
     }
-    EDITOR(setExtraSelections(selections));
+    emit q->selectionChanged(editor(), selections);
 }
 
 void FakeVimHandler::Private::updateMiniBuffer()
diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h
index 69bb363015f1b8b483db3904f22e087453d7bf6c..d1712b0c934f75a94d7fc0163769dc9b510351e1 100644
--- a/src/plugins/fakevim/fakevimhandler.h
+++ b/src/plugins/fakevim/fakevimhandler.h
@@ -34,7 +34,8 @@
 #ifndef FAKEVIM_HANDLER_H
 #define FAKEVIM_HANDLER_H
 
-#include <QObject>
+#include <QtCore/QObject>
+#include <QtGui/QTextEdit>
 
 QT_BEGIN_NAMESPACE
 class QString;
@@ -69,6 +70,8 @@ signals:
     void statusDataChanged(const QString &msg);
     void extraInformationChanged(const QString &msg);
     void quitRequested(QWidget *);
+    void selectionChanged(QWidget *widget,
+        const QList<QTextEdit::ExtraSelection> &selection);
 
 private:
     bool eventFilter(QObject *ob, QEvent *ev);
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 5836d2258ea0349ab589cca98b090d8628b167e7..3ee96e97c7bde8365dbf0562b9b4f28b70c1bab7 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -165,14 +165,17 @@ void FakeVimPlugin::installHandler(QWidget *widget)
         this, SLOT(showCommandBuffer(QString)));
     connect(m_handler, SIGNAL(quitRequested(QWidget *)),
         this, SLOT(removeHandler(QWidget *)));
+    connect(m_handler,
+        SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)),
+        this, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>)));
 
     m_handler->addWidget(widget);
 
-    BaseTextEditor *baseTextEditor = qobject_cast<BaseTextEditor *>(widget);
-    if (baseTextEditor) {
+    BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget);
+    if (bt) {
         using namespace TextEditor;
         using namespace FakeVim::Constants;
-        TabSettings settings = baseTextEditor->tabSettings();
+        TabSettings settings = bt->tabSettings();
         m_handler->setConfigValue(ConfigTabStop,
             QString::number(settings.m_tabSize));
         m_handler->setConfigValue(ConfigShiftWidth,
@@ -219,6 +222,13 @@ void FakeVimPlugin::showExtraInformation(const QString &text)
     QMessageBox::information(0, tr("FakeVim Information"), text);
 }
 
+void FakeVimPlugin::changeSelection(QWidget *widget,
+    const QList<QTextEdit::ExtraSelection> &selection)
+{
+    if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget))
+        bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection);
+}
+
 //#include "fakevimplugin.moc"
 
 Q_EXPORT_PLUGIN(FakeVimPlugin)
diff --git a/src/plugins/fakevim/fakevimplugin.h b/src/plugins/fakevim/fakevimplugin.h
index 793c2264d0086b59e9b17c44275fe63b397b506f..bbd934281ff0009d5075852cfd80199c2f725cc3 100644
--- a/src/plugins/fakevim/fakevimplugin.h
+++ b/src/plugins/fakevim/fakevimplugin.h
@@ -37,6 +37,8 @@
 #include <extensionsystem/iplugin.h>
 
 #include <QtCore/QObject>
+#include <QtCore/QList>
+#include <QtGui/QTextEdit>
 
 QT_BEGIN_NAMESPACE
 class QAction;
@@ -84,6 +86,8 @@ private slots:
     void showExtraInformation(const QString &msg);
     void editorOpened(Core::IEditor *);
     void editorAboutToClose(Core::IEditor *);
+    void changeSelection(QWidget *widget,
+        const QList<QTextEdit::ExtraSelection> &selections);
 
 private:
     FakeVimHandler *m_handler;
diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp
index 8c504a62a81b353fe92683f375e9e909ba4909dd..c668601e78dd108d6ba20ef4a9668496050de1cb 100644
--- a/tests/manual/fakevim/main.cpp
+++ b/tests/manual/fakevim/main.cpp
@@ -1,5 +1,5 @@
 
-#include "handler.h"
+#include "fakevimhandler.h"
 
 #include <QtCore/QDebug>
 
@@ -11,6 +11,25 @@
 
 using namespace FakeVim::Internal;
 
+class Proxy : public QObject
+{
+    Q_OBJECT
+
+public:
+    Proxy(QWidget *widget) : QObject(0), m_widget(widget) {}
+
+public slots:
+    void changeSelection(QWidget *w, const QList<QTextEdit::ExtraSelection> &s)
+    {
+        if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(w))
+            ed->setExtraSelections(s);
+        else if (QTextEdit *ed = qobject_cast<QTextEdit *>(w))
+            ed->setExtraSelections(s);
+    }
+private:
+    QWidget *m_widget; 
+};
+
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
@@ -31,8 +50,10 @@ int main(int argc, char *argv[])
     widget->resize(450, 350);
     widget->setFocus();
 
+    Proxy proxy(widget);
+
 
-    FakeVimHandler fakeVim;
+    FakeVimHandler handler;
 
     QMainWindow mw;
     mw.setWindowTitle("Fakevim (" + title + ")");
@@ -50,14 +71,19 @@ int main(int argc, char *argv[])
     widget->setFont(font);
     mw.statusBar()->setFont(font);
 
-    QObject::connect(&fakeVim, SIGNAL(commandBufferChanged(QString)),
+    QObject::connect(&handler, SIGNAL(commandBufferChanged(QString)),
         mw.statusBar(), SLOT(showMessage(QString)));
-    QObject::connect(&fakeVim, SIGNAL(quitRequested(QWidget *)),
+    QObject::connect(&handler, SIGNAL(quitRequested(QWidget *)),
         &app, SLOT(quit()));
+    QObject::connect(&handler,
+        SIGNAL(selectionChanged(QWidget*,QList<QTextEdit::ExtraSelection>)),
+        &proxy, SLOT(changeSelection(QWidget*,QList<QTextEdit::ExtraSelection>)));
 
-    fakeVim.addWidget(widget);
+    handler.addWidget(widget);
     if (args.size() >= 1)
-        fakeVim.handleCommand(widget, "r " + args.at(0));
+        handler.handleCommand(widget, "r " + args.at(0));
 
     return app.exec();
 }
+
+#include "main.moc"