diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index d44c789d6f5ed29c74e9b4a87748943b5607b18e..e43e82a485715f40cc347b49c48af54e3df6de12 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -2378,8 +2378,8 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e)
                     extraAreaHighlightCollapseEndBlockNumber =  d->m_highlightBlocksInfo.close.first();
                     endIsVisible = doc->findBlockByNumber(extraAreaHighlightCollapseEndBlockNumber).isVisible();
 
-                    if (TextBlockUserData::hasCollapseAfter(
-                            doc->findBlockByNumber(extraAreaHighlightCollapseBlockNumber-1))) {
+                    QTextBlock before = doc->findBlockByNumber(extraAreaHighlightCollapseBlockNumber-1);
+                    if (TextBlockUserData::hasCollapseAfter(before)) {
                             extraAreaHighlightCollapseBlockNumber--;
                     }
                 }
@@ -2698,12 +2698,15 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e)
         int collapseBoxWidth = fontMetrics().lineSpacing() + 1;
         if (e->pos().x() > extraArea()->width() - collapseBoxWidth) {
             d->extraAreaHighlightCollapseBlockNumber = cursor.blockNumber();
-            if (!TextBlockUserData::hasClosingCollapse(cursor.block()))
+            if (TextBlockUserData::canCollapse(cursor.block())
+                || !TextBlockUserData::hasClosingCollapse(cursor.block()))
                 d->extraAreaHighlightCollapseColumn = cursor.block().length()-1;
             if (!d->m_displaySettings.m_fancyFoldingBar
                 && TextBlockUserData::hasCollapseAfter(cursor.block())) {
                 d->extraAreaHighlightCollapseBlockNumber++;
-                if (!TextBlockUserData::hasClosingCollapse(cursor.block().next()))
+                d->extraAreaHighlightCollapseColumn = -1;
+                if (TextBlockUserData::canCollapse(cursor.block().next())
+                    || !TextBlockUserData::hasClosingCollapse(cursor.block().next()))
                     d->extraAreaHighlightCollapseColumn = cursor.block().next().length()-1;
             }
         }
@@ -3299,8 +3302,9 @@ bool TextBlockUserData::findPreviousBlockOpenParenthesis(QTextCursor *cursor, bo
                 if (block == cursor->block()) {
                     if (position - block.position() <= paren.pos + (paren.type == Parenthesis::Closed ? 1 : 0))
                         continue;
-                    if (checkStartPosition && paren.type == Parenthesis::Opened && position == cursor->position())
+                    if (checkStartPosition && paren.type == Parenthesis::Opened && paren.pos== cursor->position()) {
                         return true;
+                    }
                 }
                 if (paren.type == Parenthesis::Closed) {
                     ++ignore;
@@ -3820,6 +3824,10 @@ void BaseTextEditor::setDisplaySettings(const DisplaySettings &ds)
     }
 
     d->m_displaySettings = ds;
+    d->extraAreaHighlightCollapseBlockNumber = d->extraAreaHighlightCollapseColumn = -1;
+    d->m_highlightBlocksInfo = BaseTextEditorPrivateHighlightBlocks();
+    viewport()->update();
+    extraArea()->update();
 }
 
 void BaseTextEditor::setStorageSettings(const StorageSettings &storageSettings)
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index ca488ba1c8de9ae5ee11087a0bab2f807d9fb05e..15cc8d962886b0d87d9a8bf0fd555bd0235df1a5 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -143,10 +143,12 @@ public:
 
     inline static bool hasCollapseAfter(const QTextBlock & block)
     {
+        if (!block.isValid())
+            return false;
         TextBlockUserData *data = static_cast<TextBlockUserData*>(block.userData());
         if (data && data->collapseMode() != NoCollapse) {
-            return (data->collapseMode() == CollapseAfter);
-        } else if (!data) {
+            return false;
+        } else if (block.next().isValid()) {
             data = static_cast<TextBlockUserData*>(block.next().userData());
             if (data && data->collapseMode() == TextBlockUserData::CollapseThis &&  !data->m_ifdefedOut)
                 return true;