Index: editortoolbar_impl.pas
===================================================================
--- editortoolbar_impl.pas	(revision 11043)
+++ editortoolbar_impl.pas	(working copy)
@@ -48,6 +48,8 @@
     W: TForm;
     TB: TToolbar;
     BI: TImageList;
+    PM: TPopupMenu;
+    CfgButton: TToolButton;
     procedure   CreateEditorToolbar(AW: TForm; var ATB: TToolbar; var ABI: TImageList);
     function    CreateJumpItem(AJumpType: TJumpType; O: TComponent): TMenuItem;
     procedure   DoConfigureToolbar(Sender: TObject);
@@ -117,7 +119,12 @@
 
 procedure TEditorToolbar.DoConfigureToolbar(Sender: TObject);
 begin
-  TEdtTbConfigForm.Execute;
+  if TEdtTbConfigForm.Execute then
+  begin
+    ClearToolbar;
+    AddCustomItems;
+    AddStaticItems;
+  end;
 end;
 
 constructor TEditorToolbar.Create;
@@ -132,13 +139,20 @@
 end;
 
 procedure TEditorToolbar.InitEditorToolBar;
+var
+  T: TJumpType;
 begin
   if not Assigned(W) then
   begin
     W := SourceEditorWindow;
     BI := nil;
     TB := nil;
+    CfgButton := nil;
     CreateEditorToolBar(W, TB, BI);
+
+    PM := TPopupMenu.Create(W);
+    for T := Low(TJumpType) to High(TJumpType) do
+      PM.Items.Add(CreateJumpItem(T,W));
   end;
 
   AddCustomItems;
@@ -176,6 +190,7 @@
   mi: TIDEMenuItem;
 begin
   cfg := GetIDEConfigStorage(cSettingsFile, True);
+  TB.BeginUpdate;
   try
     c := cfg.GetValue('Count', 0);
     for i := c - 1 downto 0 do
@@ -192,6 +207,7 @@
     end;
   finally
     cfg.Free;
+    TB.EndUpdate;
   end;
 end;
 
@@ -206,9 +222,7 @@
 
 procedure TEditorToolbar.AddStaticItems;
 var
-  B: TToolButton;
-  PM: TPopupMenu;
-  T: TJumpType;
+  B: TToolButton;  
 begin
   TB.BeginUpdate;
   try
@@ -224,22 +238,20 @@
     B.Style       := tbsDropDown;
     B.OnClick     := @FJumpHandler.DoJumpToImplementation;
 
-    PM := TPopupMenu.Create(W);
     B.DropdownMenu := PM;
 
-    for T := Low(TJumpType) to High(TJumpType) do
-      PM.Items.Add(CreateJumpItem(T,W));
-
     AddDivider;
 
     // Config Button
-    B := TToolbutton.Create(TB);
-    B.Parent      := TB;
-    B.Caption     := 'Configure Toolbar';
-    B.Hint        := B.Caption;
-    B.ImageIndex  := BI.AddLazarusResource('preferences16');
-    B.Style       := tbsButton;
-    B.OnClick     := @DoConfigureToolbar;
+    if CfgButton = nil then
+      CfgButton := TToolbutton.Create(TB);
+
+    CfgButton.Parent      := TB;
+    CfgButton.Caption     := 'Configure Toolbar';
+    CfgButton.Hint        := B.Caption;
+    CfgButton.ImageIndex  := BI.AddLazarusResource('preferences16');
+    CfgButton.Style       := tbsButton;
+    CfgButton.OnClick     := @DoConfigureToolbar;
   finally
     TB.EndUpdate;
   end;
@@ -251,9 +263,11 @@
 begin
   TB.BeginUpdate;
   try
-    for i := TB.ButtonCount-1 downto 0 do
-      TB.Buttons[i].Visible := False;
-//      TB.Controls[i].Free;    // This causes a crash!
+    for i := TB.ButtonCount - 1 downto 0 do
+      if TB.Buttons[i] <> CfgButton then
+        TB.Buttons[i].Free
+      else
+        TB.Buttons[i].Parent := nil;
   finally
     TB.EndUpdate;
   end;
Index: edttbconfigfrm.lfm
===================================================================
--- edttbconfigfrm.lfm	(revision 11043)
+++ edttbconfigfrm.lfm	(working copy)
@@ -75,6 +75,7 @@
       BorderSpacing.Right = 6
       BorderSpacing.Bottom = 6
       BorderSpacing.InnerBorder = 4
+      Cancel = True
       Caption = 'btnCancel'
       Constraints.MaxHeight = 25
       Constraints.MinHeight = 25
Index: edttbconfigfrm.lrs
===================================================================
--- edttbconfigfrm.lrs	(revision 11043)
+++ edttbconfigfrm.lrs	(working copy)
@@ -1,5 +1,3 @@
-{ This is an automatically generated lazarus resource file }
-
 LazarusResources.Add('TEdtTbConfigForm','FORMDATA',[
   'TPF0'#16'TEdtTbConfigForm'#15'EdtTbConfigForm'#4'Left'#3'w'#1#6'Height'#3'J'
   +#1#3'Top'#3#200#0#5'Width'#3#139#2#18'HorzScrollBar.Page'#3#138#2#18'VertScr'
@@ -24,23 +22,23 @@
   +#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3'.'#2#6'Height'#2#25#3'To'
   +'p'#2#11#5'Width'#2'W'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'AutoSize'#9
   +#19'BorderSpacing.Right'#2#6#20'BorderSpacing.Bottom'#2#6#25'BorderSpacing.I'
-  +'nnerBorder'#2#4#7'Caption'#6#9'btnCancel'#21'Constraints.MaxHeight'#2#25#21
-  +'Constraints.MinHeight'#2#25#20'Constraints.MinWidth'#2'K'#11'ModalResult'#2
-  +#2#8'TabOrder'#2#1#0#0#0#7'TButton'#13'btnAddDivider'#4'Left'#3#236#1#6'Heig'
-  +'ht'#2#25#3'Top'#3#0#1#5'Width'#2's'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8
-  +'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#13'btnAddDivider'
-  +#21'Constraints.MaxHeight'#2#25#21'Constraints.MinHeight'#2#25#20'Constraint'
-  +'s.MinWidth'#2'K'#7'OnClick'#7#18'btnAddDividerClick'#8'TabOrder'#2#1#0#0#8
-  +'TListBox'#9'lbToolbar'#4'Left'#3#200#1#6'Height'#3#225#0#3'Top'#2#28#5'Widt'
-  +'h'#3#183#0#8'TabOrder'#2#2#8'TopIndex'#2#255#0#0#7'TBitBtn'#9'btnRemove'#4
-  +'Left'#3#176#1#6'Height'#2#26#3'Top'#2'J'#5'Width'#2#22#9'NumGlyphs'#2#0#7'O'
-  +'nClick'#7#14'btnRemoveClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'btnAdd'#4'Lef'
-  +'t'#3#176#1#6'Height'#2#26#3'Top'#2'c'#5'Width'#2#22#9'NumGlyphs'#2#0#7'OnCl'
-  +'ick'#7#11'btnAddClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#9'btnMoveUp'#4'Left'#3
-  +#176#1#6'Height'#2#26#3'Top'#3#157#0#5'Width'#2#22#9'NumGlyphs'#2#0#7'OnClic'
-  +'k'#7#14'btnMoveUpClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#11'btnMoveDown'#4'Le'
-  +'ft'#3#176#1#6'Height'#2#26#3'Top'#3#182#0#5'Width'#2#22#9'NumGlyphs'#2#0#7
-  +'OnClick'#7#16'btnMoveDownClick'#8'TabOrder'#2#6#0#0#9'TTreeView'#2'TV'#4'Le'
-  +'ft'#2#16#6'Height'#3#253#0#3'Top'#2#28#5'Width'#3#136#1#17'DefaultItemHeigh'
-  +'t'#2#18#8'TabOrder'#2#7#8'OnChange'#7#8'TVChange'#0#0#0
+  +'nnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#9'btnCancel'#21'Constraints.MaxHei'
+  +'ght'#2#25#21'Constraints.MinHeight'#2#25#20'Constraints.MinWidth'#2'K'#11'M'
+  +'odalResult'#2#2#8'TabOrder'#2#1#0#0#0#7'TButton'#13'btnAddDivider'#4'Left'#3
+  +#236#1#6'Height'#2#25#3'Top'#3#0#1#5'Width'#2's'#7'Anchors'#11#7'akRight'#8
+  +'akBottom'#0#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#13
+  +'btnAddDivider'#21'Constraints.MaxHeight'#2#25#21'Constraints.MinHeight'#2#25
+  +#20'Constraints.MinWidth'#2'K'#7'OnClick'#7#18'btnAddDividerClick'#8'TabOrde'
+  +'r'#2#1#0#0#8'TListBox'#9'lbToolbar'#4'Left'#3#200#1#6'Height'#3#225#0#3'Top'
+  +#2#28#5'Width'#3#183#0#8'TabOrder'#2#2#8'TopIndex'#2#255#0#0#7'TBitBtn'#9'bt'
+  +'nRemove'#4'Left'#3#176#1#6'Height'#2#26#3'Top'#2'J'#5'Width'#2#22#9'NumGlyp'
+  +'hs'#2#0#7'OnClick'#7#14'btnRemoveClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'bt'
+  +'nAdd'#4'Left'#3#176#1#6'Height'#2#26#3'Top'#2'c'#5'Width'#2#22#9'NumGlyphs'
+  +#2#0#7'OnClick'#7#11'btnAddClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#9'btnMoveUp'
+  +#4'Left'#3#176#1#6'Height'#2#26#3'Top'#3#157#0#5'Width'#2#22#9'NumGlyphs'#2#0
+  +#7'OnClick'#7#14'btnMoveUpClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#11'btnMoveDo'
+  +'wn'#4'Left'#3#176#1#6'Height'#2#26#3'Top'#3#182#0#5'Width'#2#22#9'NumGlyphs'
+  +#2#0#7'OnClick'#7#16'btnMoveDownClick'#8'TabOrder'#2#6#0#0#9'TTreeView'#2'TV'
+  +#4'Left'#2#16#6'Height'#3#253#0#3'Top'#2#28#5'Width'#3#136#1#17'DefaultItemH'
+  +'eight'#2#18#8'TabOrder'#2#7#8'OnChange'#7#8'TVChange'#0#0#0
 ]);
Index: edttbconfigfrm.pas
===================================================================
--- edttbconfigfrm.pas	(revision 11043)
+++ edttbconfigfrm.pas	(working copy)
@@ -146,22 +146,8 @@
 end;
 
 procedure TEdtTbConfigForm.btnOKClick(Sender: TObject);
-var
-  i: integer;
 begin
   SaveSettings;
-  
-  if lbToolbar.Items.Count = 0 then
-  begin
-    { resets the toolbar to only contain static (default) items }
-    gEditorToolbar.ClearToolbar;
-    gEditorToolbar.AddStaticItems;
-    Exit; //==>
-  end;
-
-  gEditorToolbar.ClearToolbar;
-  gEditorToolbar.AddCustomItems;
-  gEditorToolbar.AddStaticItems;
 end;
 
 procedure TEdtTbConfigForm.btnRemoveClick(Sender: TObject);
