diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 45ea3c6e992197f12a68651bff0009cc473c26aa..0557091e51da6c183363b777cbf3e4cceb267069 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1704,11 +1704,18 @@ void BaseTextEditorPrivate::moveCursorVisible(bool ensureVisible)
         q->ensureCursorVisible();
 }
 
+static QColor calcMixColor(const QColor &one, const QColor &two)
+{
+    return QColor((one.red() + two.red()) / 2,
+                  (one.green() + two.green()) / 2,
+                  (one.blue() + two.blue()) / 2);
+}
+
 static QColor calcBlendColor(const QColor &baseColor, int factor = 1)
 {
     const int blendBase = (baseColor.value() > 128) ? 0 : 255;
     // Darker backgrounds may need a bit more contrast
-    const int blendFactor = (baseColor.value() > 128) ? 8 : 16;
+    const int blendFactor = (baseColor.value() > 128) ? 16 : 32;
     QColor blendColor = baseColor;
 
     while (factor--) {
@@ -1943,7 +1950,7 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
         if (!block.isVisible()) {
             if (block.blockNumber() == d->visibleCollapsedBlockNumber) {
                 visibleCollapsedBlock = block;
-                visibleCollapsedBlockOffset = offset;
+                visibleCollapsedBlockOffset = offset + QPointF(0,1);
             }
 
             // invisible blocks do have zero line count
@@ -2108,7 +2115,7 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
         painter.setBrush(color);
         painter.drawRoundedRect(QRectF(visibleCollapsedBlockOffset.x(),
                                        visibleCollapsedBlockOffset.y(),
-                                       maxWidth, blockHeight).adjusted(0, 0, 1, 1), 3, 3);
+                                       maxWidth, blockHeight).adjusted(0, 0, 0, 0), 3, 3);
         painter.restore();
 
         QTextBlock end = b;
@@ -2199,7 +2206,8 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
     TextEditDocumentLayout *documentLayout = qobject_cast<TextEditDocumentLayout*>(doc->documentLayout());
     QTC_ASSERT(documentLayout, return);
 
-    int cursorBlockNumber = textCursor().blockNumber();
+    int selStart = textCursor().selectionStart();
+    int selEnd = textCursor().selectionEnd();
 
     const QColor baseColor = palette().base().color();
     QPalette pal = d->m_extraArea->palette();
@@ -2245,11 +2253,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
 
     while (block.isValid() && top <= e->rect().bottom()) {
 
-        bool collapseThis = false;
-        bool collapseAfter = false;
-        bool hasClosingCollapse = false;
-
-
         top = bottom;
         bottom = top + (int)blockBoundingRect(block).height();
         QTextBlock nextBlock = block.next();
@@ -2301,7 +2304,7 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
             }
 
             if (d->m_codeFoldingVisible) {
-                const QRect r(extraAreaWidth+2, top, collapseBoxWidth-4, bottom - top);
+                QRect r(extraAreaWidth+2, top, collapseBoxWidth-4, bottom - top);
                 bool drawBox = !nextBlock.isVisible();
 
                 int minBraceDepth = qMax(braceDepth, previousBraceDepth);
@@ -2310,9 +2313,10 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
                     if (!d->m_highlightBlocksInfo.isEmpty()
                         && blockNumber >= d->m_highlightBlocksInfo.open.last()
                         && blockNumber <= d->m_highlightBlocksInfo.close.first())
-                        color = color.light();
+                        color = calcMixColor(pal.highlight().color(), color);
                     painter.fillRect(r, color);
                 }
+
                 bool drawDown = !d->m_highlightBlocksInfo.isEmpty()
                               && blockNumber == d->m_highlightBlocksInfo.open.last();
                 bool drawUp = !d->m_highlightBlocksInfo.isEmpty()
@@ -2374,7 +2378,11 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
 
         if (d->m_lineNumbersVisible) {
             const QString &number = QString::number(blockNumber + 1);
-            if (blockNumber == cursorBlockNumber) {
+            bool selected = (
+                    selStart < block.position() + block.length()
+                    && selEnd > block.position()
+                    );
+            if (selected) {
                 painter.save();
                 QFont f = painter.font();
                 f.setBold(d->m_currentLineNumberFormat.font().bold());
@@ -2383,7 +2391,7 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
                 painter.setPen(d->m_currentLineNumberFormat.foreground().color());
             }
             painter.drawText(markWidth, top, extraAreaWidth - markWidth - 4, fm.height(), Qt::AlignRight, number);
-            if (blockNumber == cursorBlockNumber)
+            if (selected)
                 painter.restore();
         }