diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 081d343764ad98e709f05a7ffe81851dde15bbf1..7dcfcf5679cc37bb194032e825add4ed8e5a25d1 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -714,7 +714,10 @@ void BaseTextEditor::moveLineUpDown(bool up)
 {
     QTextCursor cursor = textCursor();
     QTextCursor move = cursor;
-    move.beginEditBlock();
+    if (d->m_moveLineUndoHack)
+        move.joinPreviousEditBlock();
+    else
+        move.beginEditBlock();
 
     bool hasSelection = cursor.hasSelection();
 
@@ -722,7 +725,7 @@ void BaseTextEditor::moveLineUpDown(bool up)
         move.setPosition(cursor.selectionStart());
         move.movePosition(QTextCursor::StartOfBlock);
         move.setPosition(cursor.selectionEnd(), QTextCursor::KeepAnchor);
-        move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
+        move.movePosition(move.atBlockStart() ? QTextCursor::Left: QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
     } else {
         move.movePosition(QTextCursor::StartOfBlock);
         move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
@@ -760,6 +763,7 @@ void BaseTextEditor::moveLineUpDown(bool up)
     move.endEditBlock();
 
     setTextCursor(move);
+    d->m_moveLineUndoHack = true;
 }
 
 void BaseTextEditor::cleanWhitespace()
@@ -769,6 +773,7 @@ void BaseTextEditor::cleanWhitespace()
 
 void BaseTextEditor::keyPressEvent(QKeyEvent *e)
 {
+    d->m_moveLineUndoHack = false;
     d->clearVisibleCollapsedBlock();
 
     QKeyEvent *original_e = e;
@@ -1305,7 +1310,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate()
     m_actionHack(0),
     m_inBlockSelectionMode(false),
     m_lastEventWasBlockSelectionEvent(false),
-    m_blockSelectionExtraX(0)
+    m_blockSelectionExtraX(0),
+    m_moveLineUndoHack(false)
 {
 }
 
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index 9bff3da0f4147cf393db61ce0dae7c2099f197cd..844d377768953377d12bb0d5955578fedc127ffb 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -225,6 +225,7 @@ public:
     void clearBlockSelection();
     QString copyBlockSelection();
     void removeBlockSelection(const QString &text = QString());
+    bool m_moveLineUndoHack;
     
     QTextCursor m_findScope;
     QTextCursor m_selectBlockAnchor;