diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 6606776f0ea8fa5b321183a85e8127858c620c43..795d988b7e4b248ad84b86bfacf7178a70b98976 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -214,6 +214,12 @@ struct Range
         : beginPos(qMin(b, e)), endPos(qMax(b, e)), rangemode(m)
     {}
 
+    QString toString() const 
+    {
+        return QString("%1-%2 (mode: %3)").arg(beginPos).arg(endPos)
+            .arg(rangemode);
+    }
+
     int beginPos;
     int endPos;
     RangeMode rangemode;
@@ -1947,7 +1953,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0)
                 firstPositionInLine(endLine), RangeLineMode);
             QString contents = text(range);
             m_tc = tc;
-            qDebug() << "LINES: " << beginLine << endLine;
+            //qDebug() << "LINES: " << beginLine << endLine;
             bool handled = false;
             emit q->writeFileRequested(&handled, fileName, contents);
             // nobody cared, so act ourselves
@@ -2500,8 +2506,12 @@ QString FakeVimHandler::Private::text(const Range &range) const
     }
     if (range.rangemode == RangeLineMode) {
         QTextCursor tc = m_tc;
-        tc.setPosition(firstPositionInLine(lineForPosition(range.beginPos)), MoveAnchor);
-        tc.setPosition(firstPositionInLine(lineForPosition(range.endPos)+1), KeepAnchor);
+        int firstPos = firstPositionInLine(lineForPosition(range.beginPos));
+        int lastLine = lineForPosition(range.endPos);
+        int lastPos = lastLine == m_tc.document()->lastBlock().blockNumber() + 1
+            ? lastPositionInDocument() : firstPositionInLine(lastLine + 1);
+        tc.setPosition(firstPos, MoveAnchor);
+        tc.setPosition(lastPos, KeepAnchor);
         return tc.selection().toPlainText();
     }
     // FIXME: Performance?