diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index ceda32533477f4fcc08e7365517651cb4fd9b5c7..c233a74ee23b66977b0dd009aad6116273c598ad 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -212,8 +212,6 @@ enum EventResult
     EventPassedToCore
 };
 
-class UndoBreaker;
-
 class FakeVimHandler::Private
 {
 public:
@@ -229,7 +227,6 @@ public:
     void restoreWidget();
 
     friend class FakeVimHandler;
-    friend class UndoBreaker;
     static int shift(int key) { return key + 32; }
     static int control(int key) { return key + 256; }
 
@@ -354,7 +351,6 @@ public:
     void undo();
     void redo();
     QMap<int, int> m_undoCursorPosition; // revision -> position
-    bool m_needMoreUndo;
 
     // extra data for '.'
     void replay(const QString &text, int count);
@@ -2412,10 +2408,7 @@ void FakeVimHandler::Private::undo()
 {
     int current = m_tc.document()->revision();
     m_tc.endEditBlock();
-    m_needMoreUndo = false;
     EDITOR(undo());
-    if (m_needMoreUndo)
-        EDITOR(undo());
     m_tc.beginEditBlock();
     int rev = m_tc.document()->revision();
     if (current == rev)
@@ -2430,10 +2423,7 @@ void FakeVimHandler::Private::redo()
 {
     int current = m_tc.document()->revision();
     m_tc.endEditBlock();
-    m_needMoreUndo = false;
     EDITOR(redo());
-    if (m_needMoreUndo)
-        EDITOR(redo());
     m_tc.beginEditBlock();
     int rev = m_tc.document()->revision();
     if (rev == current)
@@ -2487,20 +2477,9 @@ void FakeVimHandler::Private::recordJump()
     UNDO_DEBUG("jumps: " << m_jumpListUndo);
 }
 
-class UndoBreaker : public QAbstractUndoItem
-{
-public:
-    UndoBreaker(FakeVimHandler::Private *doc) : m_doc(doc) {}
-    void undo() { m_doc->m_needMoreUndo = true; }
-    void redo() { m_doc->m_needMoreUndo = true; }
-private:   
-    FakeVimHandler::Private *m_doc;
-};
-
 void FakeVimHandler::Private::recordNewUndo()
 {
     m_tc.endEditBlock();
-    m_tc.document()->appendUndoItem(new UndoBreaker(this));
     m_tc.beginEditBlock();
 }
 
diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp
index 66002c9380cc4bf93737bea7d0f8ec178399b962..ad8c1f603819f6e9f34bdb4a2be1bd327c4e76eb 100644
--- a/tests/auto/fakevim/main.cpp
+++ b/tests/auto/fakevim/main.cpp
@@ -328,12 +328,18 @@ void tst_FakeVim::command_i()
 
 
     // combine insertions
+    check("i1" + escape, "@1" + lines);
+    check("i2" + escape, "@21" + lines);
+    check("i3" + escape, "@321" + lines);
+    check("u",           "@21" + lines);
+    check("u",           "@1" + lines);
+    check("u",           "@" + lines);
     check("ia" + escape, "@a" + lines);
     check("ibx" + escape, "b@xa" + lines);
     check("icyy" + escape, "bcy@yxa" + lines);
-return; // FIXME
     check("u", "b@xa" + lines);
     check("u", "@a" + lines);   // undo broken
+return; // FIXME
     checkEx("redo", "b@xa" + lines);
     check("u", "@a" + lines);
     check("u", "@" + lines);