diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 6a7b725e59267559f82baa4772a154f77bb5e40d..a74e40cbe851622a37beaada1bb28171ddad3bf8 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -879,25 +879,36 @@ void BaseTextEditor::copyLineUpDown(bool up)
 
 void BaseTextEditor::joinLines()
 {
-    QTextCursor move = textCursor();
-    move.beginEditBlock();
+    QTextCursor cursor = textCursor();
+    QTextCursor start = cursor;
+    QTextCursor end = cursor;
 
-    move.movePosition(QTextCursor::NextBlock);
-    move.movePosition(QTextCursor::StartOfBlock);
-    move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
-    QString cutLine = move.selectedText();
+    start.setPosition(cursor.selectionStart());
+    end.setPosition(cursor.selectionEnd() - 1);
 
-    // Collapse leading whitespaces to one or insert whitespace
-    cutLine.replace(QRegExp("^\\s*"), " ");
-    move.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor);
-    move.removeSelectedText();
+    int lineCount = qMax(1, end.blockNumber() - start.blockNumber());
+
+    cursor.beginEditBlock();
+    cursor.setPosition(cursor.selectionStart());
+    while (lineCount--) {
+        cursor.movePosition(QTextCursor::NextBlock);
+        cursor.movePosition(QTextCursor::StartOfBlock);
+        cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
+        QString cutLine = cursor.selectedText();
+
+        // Collapse leading whitespaces to one or insert whitespace
+        cutLine.replace(QRegExp("^\\s*"), " ");
+        cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor);
+        cursor.removeSelectedText();
 
-    move.movePosition(QTextCursor::PreviousBlock);
-    move.movePosition(QTextCursor::EndOfBlock);
+        cursor.movePosition(QTextCursor::PreviousBlock);
+        cursor.movePosition(QTextCursor::EndOfBlock);
 
-    move.insertText(cutLine);
-    move.endEditBlock();
-    setTextCursor(move);
+        cursor.insertText(cutLine);
+    }
+    cursor.endEditBlock();
+
+    setTextCursor(cursor);
 }
 
 void BaseTextEditor::moveLineUp()