diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi
index 80d0cea2..9604d381 100644
--- a/lazproj/coedit.lpi
+++ b/lazproj/coedit.lpi
@@ -138,7 +138,7 @@
         <PackageName Value="LCL"/>
       </Item6>
     </RequiredPackages>
-    <Units Count="50">
+    <Units Count="51">
       <Unit0>
         <Filename Value="coedit.lpr"/>
         <IsPartOfProject Value="True"/>
@@ -400,6 +400,10 @@
         <Filename Value="..\src\ce_projutils.pas"/>
         <IsPartOfProject Value="True"/>
       </Unit49>
+      <Unit50>
+        <Filename Value="..\src\ce_d2synpresets.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit50>
     </Units>
   </ProjectOptions>
   <CompilerOptions>
diff --git a/lazproj/coedit.lpr b/lazproj/coedit.lpr
index 37097230..a12b7668 100644
--- a/lazproj/coedit.lpr
+++ b/lazproj/coedit.lpr
@@ -7,11 +7,11 @@ uses
   cthreads,
   {$ENDIF}{$ENDIF}
   Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, anchordockpkg,
-  ce_sharedres, ce_observer, ce_libman, ce_symstring, ce_tools, ce_dcd,
-  ce_main, ce_writableComponent, ce_staticmacro, ce_inspectors,
-  ce_editoroptions, ce_dockoptions, ce_shortcutseditor, ce_mru, ce_processes,
-  ce_dubproject, ce_dialogs, ce_dubprojeditor, ce_controls, ce_dfmt,
-  ce_lcldragdrop, ce_stringrange, ce_dlangmaps, ce_projgroup, ce_projutils;
+  ce_sharedres, ce_observer, ce_libman, ce_symstring, ce_tools, ce_dcd, ce_main,
+  ce_writableComponent, ce_staticmacro, ce_inspectors, ce_editoroptions,
+  ce_dockoptions, ce_shortcutseditor, ce_mru, ce_processes, ce_dubproject,
+  ce_dialogs, ce_dubprojeditor, ce_controls, ce_dfmt, ce_lcldragdrop,
+  ce_stringrange, ce_dlangmaps, ce_projgroup, ce_projutils, ce_d2synpresets;
 
 {$R *.res}
 
diff --git a/src/ce_d2synpresets.pas b/src/ce_d2synpresets.pas
new file mode 100644
index 00000000..c29c5b16
--- /dev/null
+++ b/src/ce_d2synpresets.pas
@@ -0,0 +1,356 @@
+unit ce_d2synpresets;
+{$I ce_defines.inc}
+
+interface
+
+uses
+  Classes, SysUtils, SynEditMiscClasses, Graphics, Controls, StdCtrls, ExtCtrls,
+  SynEditHighlighter, SynEditTypes,
+  ce_interfaces, ce_common, ce_writableComponent, ce_d2syn, ce_observer,
+  ce_editoroptions;
+
+type
+
+  TAttribHelper = class helper for TSynHighlighterAttributes
+    procedure define(
+      fore: TColor;
+      Stl: TFontStyles = [];
+      bck: TColor = clNone;
+      frCol: TColor = clNone;
+      frStyle: TSynLineStyle = slsSolid;
+      frEdges: TSynFrameEdges = sfeNone;
+      stlMsk: TFontStyles = []);
+  end;
+
+  (**
+   * persistent class used to store a highlighter preset.
+   *)
+  TCED2SynPreset = class(TCollectionItem)
+  private
+    fBackground: TColor;
+    fBracketMatchAttribs: TSynSelectedColor;
+    fCurrLineAttribs: TSynSelectedColor;
+    fFoldedColor: TSynSelectedColor;
+    fIdentifierMarkup: TSynSelectedColor;
+    fMouseLinkAttribs: TSynSelectedColor;
+    fSelAttribs: TSynSelectedColor;
+    fd2syn: TSynD2Syn;
+    fName: string;
+    procedure setBracketMatchColor(value: TSynSelectedColor);
+    procedure setCurrLineAttribs(value: TSynSelectedColor);
+    procedure setFoldedColor(value: TSynSelectedColor);
+    procedure setIdentifierMarkup(value: TSynSelectedColor);
+    procedure setMouseLinkColor(value: TSynSelectedColor);
+    procedure setSelCol(value: TSynSelectedColor);
+    procedure setD2syn(value: TSynD2Syn);
+  published
+    property name: string read fName write fName;
+    property highlighter: TSynD2Syn read fd2syn write setD2Syn;
+    property background: TColor read fBackground write fBackground default clWhite;
+    property bracketMatch: TSynSelectedColor read fBracketMatchAttribs write setBracketMatchColor;
+    property currentLine: TSynSelectedColor read fCurrLineAttribs write setCurrLineAttribs;
+    property folding: TSynSelectedColor read fFoldedColor write setFoldedColor;
+    property identifierMatch: TSynSelectedColor read fIdentifierMarkup write setIdentifierMarkup;
+    property mouseLink: TSynSelectedColor read fMouseLinkAttribs write setMouseLinkColor;
+    property selection: TSynSelectedColor read fSelAttribs write setSelCol;
+  public
+    constructor Create(ACollection: TCollection); override;
+    destructor destroy; override;
+    procedure assignToOptions;
+    procedure assignFromOptions;
+  end;
+
+  TCED2SynPresets = class(TWritableLfmTextComponent)
+  private
+    fCollection: TCollection;
+    procedure setCollection(value: TCollection);
+    function getPreset(index: integer): TCED2SynPreset;
+  public
+    constructor Create(AOwner: TComponent); override;
+    destructor Destroy; override;
+    function addPreset: TCED2SynPreset;
+    property preset[index: integer]: TCED2SynPreset read getPreset ; default;
+  end;
+
+  (**
+   * UI for loading highlighter presets in the options editor.
+   *)
+  TCED2SynPresetsLoaderForm = class(TWinControl, ICEEditableOptions)
+  private
+    fPresets: TCED2SynPresets;
+    flstBox: TListBox;
+    fBackup: TCED2SynPreset;
+    function optionedWantCategory(): string;
+    function optionedWantEditorKind: TOptionEditorKind;
+    function optionedWantContainer: TPersistent;
+    procedure optionedEvent(anEvent: TOptionEditorEvent);
+    function optionedOptionsModified: boolean;
+    procedure lstBoxChange(sender: TObject);
+  public
+    constructor Create(AOwner: TComponent); override;
+    destructor Destroy; override;
+  end;
+
+implementation
+
+const
+  optfname = 'highlighterPresets.txt';
+
+var
+  presetsLoaderForm: TCED2SynPresetsLoaderForm;
+
+{$REGION TCED2SynPreset -------------------------------------------------------}
+constructor TCED2SynPreset.create(ACollection: TCollection);
+begin
+  inherited Create(ACOllection);
+  fBracketMatchAttribs:= TSynSelectedColor.Create;
+  fCurrLineAttribs:= TSynSelectedColor.Create;
+  fFoldedColor:= TSynSelectedColor.Create;
+  fIdentifierMarkup:= TSynSelectedColor.Create;
+  fMouseLinkAttribs:= TSynSelectedColor.Create;
+  fSelAttribs:= TSynSelectedColor.Create;
+  fd2syn := TSynD2Syn.create(nil);
+end;
+
+destructor TCED2SynPreset.destroy;
+begin
+  fBracketMatchAttribs.free;
+  fCurrLineAttribs.free;
+  fFoldedColor.free;
+  fIdentifierMarkup.free;
+  fMouseLinkAttribs.free;
+  fSelAttribs.free;
+  fd2syn.Free;
+  inherited;
+end;
+
+procedure TCED2SynPreset.setD2syn(value: TSynD2Syn);
+begin
+  fd2syn.Assign(value);
+end;
+
+procedure TCED2SynPreset.setBracketMatchColor(value: TSynSelectedColor);
+begin
+  fBracketMatchAttribs.Assign(value);
+end;
+
+procedure TCED2SynPreset.setCurrLineAttribs(value: TSynSelectedColor);
+begin
+  fCurrLineAttribs.Assign(value);
+end;
+
+procedure TCED2SynPreset.setFoldedColor(value: TSynSelectedColor);
+begin
+  fFoldedColor.Assign(value);
+end;
+
+procedure TCED2SynPreset.setIdentifierMarkup(value: TSynSelectedColor);
+begin
+  fIdentifierMarkup.Assign(value);
+end;
+
+procedure TCED2SynPreset.setMouseLinkColor(value: TSynSelectedColor);
+begin
+  fMouseLinkAttribs.Assign(value);
+end;
+
+procedure TCED2SynPreset.setSelCol(value: TSynSelectedColor);
+begin
+  fSelAttribs.Assign(value);
+end;
+
+procedure TCED2SynPreset.assignToOptions;
+begin
+  EditorOptions.background:=background;
+  EditorOptions.highlighterDlang.Assign(highlighter);
+  EditorOptions.bracketMatch.Assign(bracketMatch);
+  EditorOptions.currentLine.Assign(currentLine);
+  EditorOptions.folding.Assign(folding);
+  EditorOptions.identifierMatch.Assign(identifierMatch);
+  EditorOptions.mouseLink.Assign(mouseLink);
+  EditorOptions.selection.Assign(selection);
+  EditorOptions.applyChangesFromSelf;
+end;
+
+procedure TCED2SynPreset.assignFromOptions;
+begin
+  background:=EditorOptions.background;
+  highlighter.Assign(EditorOptions.highlighterDlang);
+  bracketMatch.Assign(EditorOptions.bracketMatch);
+  currentLine.Assign(EditorOptions.currentLine);
+  folding.Assign(EditorOptions.folding);
+  identifierMatch.Assign(EditorOptions.identifierMatch);
+  mouseLink.Assign(EditorOptions.mouseLink);
+  selection.Assign(EditorOptions.selection);
+end;
+{$ENDREGION}
+
+{$REGION TCED2SynPresets ------------------------------------------------------}
+constructor TCED2SynPresets.Create(AOwner: TComponent);
+begin
+  inherited;
+  fCollection := TCollection.Create(TCED2SynPreset);
+end;
+
+destructor TCED2SynPresets.Destroy;
+begin
+  fCollection.Free;
+  inherited;
+end;
+
+procedure TCED2SynPresets.setCollection(value: TCollection);
+begin
+  fCollection.Assign(value);
+end;
+
+function TCED2SynPresets.addPreset: TCED2SynPreset;
+begin
+  exit(TCED2SynPreset(fCollection.Add));
+end;
+
+function TCED2SynPresets.getPreset(index: integer): TCED2SynPreset;
+begin
+  exit(TCED2SynPreset(fCollection.Items[index]));
+end;
+{$ENDREGION}
+
+{$REGION TCED2SynPresetsLoaderForm --------------------------------------------}
+procedure TAttribHelper.define(fore: TColor;Stl: TFontStyles = [];
+  bck: TColor = clNone; frCol: TColor = clNone; frStyle: TSynLineStyle = slsSolid;
+  frEdges: TSynFrameEdges = sfeNone; stlMsk: TFontStyles = []);
+begin
+  Background:=bck;
+  Foreground:=fore;
+  FrameColor:=frCol;
+  FrameStyle:=frStyle;
+  FrameEdges:=frEdges;
+  Style:=stl;
+  StyleMask:=stlMsk;
+end;
+
+constructor TCED2SynPresetsLoaderForm.Create(AOwner: TComponent);
+var
+  fname: string;
+  i: integer;
+begin
+  inherited;
+  fBackup:= TCED2SynPreset.Create(nil);
+  fPresets:= TCED2SynPresets.Create(self);
+  fname := getCoeditDocPath + optfname;
+  if fname.fileExists then
+    fPresets.loadFromFile(fname)
+  else begin
+    // Default
+    with fPresets.addPreset do
+    begin
+      fName :='bright';
+      fBackground := clWhite;
+      fd2syn.whites.define(clNone);
+      fd2syn.numbers.define($000079F2);
+      fd2syn.symbols.define(clMaroon);
+      fd2syn.identifiers.define(clBlack);
+      fd2syn.comments.define(clGreen,[fsItalic]);
+      fd2syn.strings.define(clBlue);
+      fd2syn.keywords.define(clNavy,[fsBold]);
+      fd2syn.ddoc.define(clTeal);
+      fd2syn.inlineAsm.define(clGray,[fsBold]);
+      fd2syn.special.define(clNavy,[fsBold]);
+      fd2syn.errors.define(clBlack,[],clNone,clRed,slsWaved,sfeBottom,[]);
+      fd2syn.attributes.define(clNavy,[fsBold]);
+    end;
+    with fPresets.addPreset do
+    begin
+      fName :='dark';
+      fBackground := $00404040;
+      fd2syn.whites.define(clNone);
+      fd2syn.numbers.define($000079F2,[fsBold]);
+      fd2syn.symbols.define(clMaroon);
+      fd2syn.identifiers.define($00F0EFE1);
+      fd2syn.comments.define($00C7C7C7,[fsItalic]);
+      fd2syn.strings.define($ECD284);
+      fd2syn.keywords.define($0097C793,[fsBold]);
+      fd2syn.ddoc.define(clTeal);
+      fd2syn.inlineAsm.define($00CB84EC,[fsBold]);
+      fd2syn.special.define($0097C793,[fsBold]);
+      fd2syn.errors.define($00F0EFE1,[],clNone,clRed,slsWaved,sfeBottom,[]);
+      fd2syn.attributes.define($0097C793,[fsBold]);
+    end;
+    with fPresets.addPreset do
+    begin
+      fBackground := clWhite;
+      fName :='Mars bright';
+    end;
+    with fPresets.addPreset do
+    begin
+      fBackground :=clWhite;
+      fName :='Mars dark';
+    end;
+    with fPresets.addPreset do
+    begin
+      fBackground :=clWhite;
+      fName :='Mustard';
+    end;
+  end;
+  //
+  flstBox := TListBox.Create(self);
+  flstBox.Align:= alClient;
+  flstBox.BorderSpacing.Around:= 4;
+  flstBox.Parent := self;
+  flstbox.OnClick:=@lstBoxChange;
+  for i:= 0 to fPresets.fCollection.Count-1 do
+    flstBox.AddItem(fPresets[i].name, fPresets[i]);
+  //
+  EntitiesConnector.addObserver(self);
+end;
+
+destructor TCED2SynPresetsLoaderForm.Destroy;
+begin
+  //fPresets.saveToFile(getCoeditDocPath + optfname);
+  fBackup.Free;
+  EntitiesConnector.removeObserver(self);
+  inherited;
+end;
+
+function TCED2SynPresetsLoaderForm.optionedWantCategory(): string;
+begin
+  exit('Highlighter presets');
+end;
+
+function TCED2SynPresetsLoaderForm.optionedWantEditorKind: TOptionEditorKind;
+begin
+  exit(oekControl);
+end;
+
+function TCED2SynPresetsLoaderForm.optionedWantContainer: TPersistent;
+begin
+  exit(self);
+end;
+
+procedure TCED2SynPresetsLoaderForm.optionedEvent(anEvent: TOptionEditorEvent);
+begin
+  case anEvent of
+    oeeAccept: fBackup.assignFromOptions;
+    oeeCancel: fBackup.assignToOptions;
+    oeeSelectCat: fBackup.assignFromOptions;
+  end;
+end;
+
+function TCED2SynPresetsLoaderForm.optionedOptionsModified: boolean;
+begin
+  exit(false);
+end;
+
+procedure TCED2SynPresetsLoaderForm.lstBoxChange(sender: TObject);
+begin
+  if flstBox.ItemIndex = -1 then
+    exit;
+  fPresets[flstBox.ItemIndex].assignToOptions;
+end;
+{$ENDREGION}
+
+initialization
+  presetsLoaderForm:= TCED2SynPresetsLoaderForm.Create(nil);
+finalization
+  presetsLoaderForm.Free;
+end.
+
diff --git a/src/ce_editoroptions.pas b/src/ce_editoroptions.pas
index 69264f1a..815f4fca 100644
--- a/src/ce_editoroptions.pas
+++ b/src/ce_editoroptions.pas
@@ -142,23 +142,23 @@ type
     procedure scedSendItem(const category, identifier: string; aShortcut: TShortcut);
     procedure scedSendDone;
     //
-    procedure applyChangesFromSelf;
     procedure applyChangeToEditor(anEditor: TCESynMemo);
   protected
     procedure afterLoad; override;
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
+    procedure applyChangesFromSelf;
   end;
 
+var
+  EditorOptions: TCEEditorOptions;
+
 implementation
 
 const
   edoptFname = 'editor.txt';
 
-var
-  EditorOptions: TCEEditorOptions;
-
 {$REGION Standard Comp/Obj -----------------------------------------------------}
 constructor TCEEditorOptionsBase.Create(AOwner: TComponent);
 var