diff --git a/components/synedit/syneditmarkupfoldcoloring.pas b/components/synedit/syneditmarkupfoldcoloring.pas
index 33d4b90d50..cd89837b15 100644
--- a/components/synedit/syneditmarkupfoldcoloring.pas
+++ b/components/synedit/syneditmarkupfoldcoloring.pas
@@ -132,6 +132,7 @@ uses
   SynEditMiscProcs,
   {$IFDEF SynEditMarkupFoldColoringDebug}
   SynHighlighterPas,
+  strutils,
   {$endif}
   Dialogs;
 
@@ -362,6 +363,9 @@ begin
   i := 0;
   while i < NestCount do begin
     TmpNode := FNestList.HLNode[i];
+    {$IFDEF SynEditMarkupFoldColoringDebug}
+    //DebugLn('  O: %s %s %s', [IfThen(sfaOutline in TmpNode.FoldAction, 'X', '-'), IfThen(sfaClose in TmpNode.FoldAction, 'C ', IfThen(sfaOpen in TmpNode.FoldAction, 'O ', '??')),FoldTypeToStr(TmpNode.FoldType)]);
+    {$ENDIF}
     if (sfaOutline in TmpNode.FoldAction)
     and not (sfaInvalid in TmpNode.FoldAction) then
       //avoid bug of IncludeOpeningOnLine := False;
@@ -418,16 +422,22 @@ var
   var x,j : integer;
   begin
     x  := ANode.LogXStart + 1;
-    if ANode.LogXStart < ANode.LogXEnd then
-    for j := 0 to FFoldColorInfosCount - 1 do
-      if (FFoldColorInfos[j].X = x)
-      and (FFoldColorInfos[j].Border)
-      and (FFoldColorInfos[j].SrcNode.FoldType = ANode.FoldType )
-      and (FFoldColorInfos[j].SrcNode.FoldLvlEnd = ANode.FoldLvlStart )
-      then begin
-       FFoldColorInfos[j].X2 := ANode.LogXEnd + 1;
-       FFoldColorInfos[j].Border := False
-      end;
+    if ANode.LogXStart < ANode.LogXEnd then begin
+      {$IFDEF SynEditMarkupFoldColoringDebug}
+      //DebugLn('    %d < %d', [ANode.LogXStart, ANode.LogXEnd]);
+      {$ENDIF}
+      for j := 0 to FFoldColorInfosCount - 1 do
+        if (FFoldColorInfos[j].X = x)
+        and (FFoldColorInfos[j].Border)
+        and (FFoldColorInfos[j].SrcNode.FoldType = ANode.FoldType )
+        and (FFoldColorInfos[j].SrcNode.FoldLvlEnd = ANode.FoldLvlStart ) then begin
+          {$IFDEF SynEditMarkupFoldColoringDebug}
+          //DebugLn('      X2: %d->%d', [FFoldColorInfos[j].X2, ANode.LogXEnd + 1]);
+          {$ENDIF}
+          FFoldColorInfos[j].X2 := ANode.LogXEnd + 1;
+          FFoldColorInfos[j].Border := False
+        end;
+    end;
 
     SetFoldColorInfosCount(FFoldColorInfosCount + 1);
     with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
@@ -467,6 +477,11 @@ begin
     repeat
       TmpNode := NodeList[i];
 
+      {$IFDEF SynEditMarkupFoldColoringDebug}
+      //if not (sfaInvalid in TmpNode.FoldAction) then
+      //  DebugLn('  C: %s %s', [IfThen(sfaClose in TmpNode.FoldAction, 'C ', IfThen(sfaOpen in TmpNode.FoldAction, 'O ', '??')),FoldTypeToStr(TmpNode.FoldType)]);
+      {$ENDIF}
+
       if not (sfaInvalid in TmpNode.FoldAction)
       and (sfaOutline in TmpNode.FoldAction) then begin
         if sfaOpen in TmpNode.FoldAction then begin
@@ -482,6 +497,10 @@ begin
           // inc(lvl);
 
           AddHighlight(TmpNode);
+          {$IFDEF SynEditMarkupFoldColoringDebug}
+          //with FFoldColorInfos[FFoldColorInfosCount - 1] do
+          //  DebugLn('    %d-%d', [x, x2]);
+          {$ENDIF}
 
           //if (FFoldColorInfosCount - 1 > 0)
           //and (FFoldColorInfos[FFoldColorInfosCount - 1].X = FFoldColorInfos[FFoldColorInfosCount - 2].X) then
@@ -527,6 +546,10 @@ begin
           end;
           if Found then begin
             AddHighlight(TmpNode);
+            {$IFDEF SynEditMarkupFoldColoringDebug}
+            //with FFoldColorInfos[FFoldColorInfosCount - 1] do
+            //  DebugLn('    %d-%d', [x, x2]);
+            {$ENDIF}
             with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
               LevelBefore := lvlB;
               LevelAfter  := lvlA;
@@ -570,6 +593,12 @@ begin
   DoMarkupParentFoldAtRow(aRow);
   DoMarkupParentCloseFoldAtRow(aRow);
 
+  {$IFDEF SynEditMarkupFoldColoringDebug}
+  for i := 0 to FFoldColorInfosCount - 1 do with FFoldColorInfos[i] do begin
+    DebugLn('  %.5d %.2d-%.2d: %d - %s %s', [y, x, X2, ColorIdx, IfThen(sfaClose in SrcNode.FoldAction, 'C ', IfThen(sfaOpen in SrcNode.FoldAction, 'O ', '??')),FoldTypeToStr(SrcNode.FoldType)]);
+  end;
+  {$ENDIF}
+
   // delete parents with bigger x
   // to keep out mis indented blocks
   LastX := MaxInt;
@@ -713,14 +742,14 @@ begin
   {$IFDEF SynEditMarkupFoldColoringDebug}
   //DebugLn('   Nodes at Start:');
   //for i := 0 to length(lStartNestList) - 1 do with lStartNestList[i] do
-  //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
+  //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
   {$ENDIF}
 
   FillNestList(lEndNestList, EndLine + 1, FNestList);
   {$IFDEF SynEditMarkupFoldColoringDebug}
   //DebugLn('   Nodes at End:');
   //for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
-  //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
+  //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
   {$ENDIF}
 
   // delete all nodes in lEndNodeList which where active at StartLine
@@ -746,7 +775,7 @@ begin
     {$IFDEF SynEditMarkupFoldColoringDebug}
     //DebugLn('   Remaining Nodes:');
     //for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
-    //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
+    //  DebugLn('      x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
     {$ENDIF}
     // does position of first character change for remaining node?
     if FirstCharacterColumn[lEndNestList[0].LineIndex] <> FFirstCharacterColumnCache[lEndNestList[0].LineIndex] then
@@ -763,7 +792,7 @@ begin
         lEndLine := Max(lEndLine, Max(l, FEndLineCache[LineIndex]));
         FEndLineCache[LineIndex] := l;
         {$IFDEF SynEditMarkupFoldColoringDebug}
-        //DebugLn('   ** x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d -> %d', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
+        //DebugLn('   ** x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d -> %d', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
         {$ENDIF}
       end;
     end;