diff --git a/src/ce_symlist.lfm b/src/ce_symlist.lfm
index 77bf02c1..0f078999 100644
--- a/src/ce_symlist.lfm
+++ b/src/ce_symlist.lfm
@@ -1,7 +1,7 @@
 inherited CESymbolListWidget: TCESymbolListWidget
-  Left = 1548
+  Left = 985
   Height = 430
-  Top = 457
+  Top = 215
   Width = 310
   Caption = 'Symbol list'
   ClientHeight = 430
@@ -25,18 +25,16 @@ inherited CESymbolListWidget: TCESymbolListWidget
         Align = alClient
         BorderSpacing.Around = 4
         DefaultItemHeight = 18
-        ExpandSignType = tvestPlusMinus
         HideSelection = False
         Images = imgList
         ReadOnly = True
         RightClickSelect = True
-        RowSelect = True
         ScrollBars = ssAutoBoth
         SelectionColor = clActiveBorder
         TabOrder = 0
         OnDeletion = TreeDeletion
         OnKeyPress = TreeKeyPress
-        Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
+        Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
         Items.Data = {
           F9FFFFFF02000B000000000000000000000000000000FFFFFFFF000000000000
           00000005000000416C696173010000000100000001000000FFFFFFFF00000000
@@ -73,6 +71,7 @@ inherited CESymbolListWidget: TCESymbolListWidget
           Top = 2
           Width = 272
           OnAfterFilter = TreeFilterEdit1AfterFilter
+          OnFilterItem = TreeFilterEdit1FilterItem
           ButtonWidth = 28
           NumGlyphs = 1
           Align = alClient
@@ -80,6 +79,7 @@ inherited CESymbolListWidget: TCESymbolListWidget
           BorderSpacing.Around = 2
           MaxLength = 0
           TabOrder = 0
+          OnMouseEnter = TreeFilterEdit1MouseEnter
           FilteredTreeview = Tree
         end
         object btnRefresh: TBitBtn
diff --git a/src/ce_symlist.pas b/src/ce_symlist.pas
index a2fae584..6e303201 100644
--- a/src/ce_symlist.pas
+++ b/src/ce_symlist.pas
@@ -7,7 +7,7 @@ interface
 uses
   Classes, SysUtils, TreeFilterEdit, Forms, Controls, Graphics, ExtCtrls, Menus,
   ComCtrls, ce_widget, jsonparser, process, actnlist, Buttons, Clipbrd, LCLProc,
-  ce_common, ce_observer, ce_synmemo, ce_interfaces, ce_writableComponent;
+  ce_common, ce_observer, ce_synmemo, ce_interfaces, ce_writableComponent, EditBtn;
 
 type
 
@@ -77,18 +77,22 @@ type
     fRefreshOnFocus: boolean;
     fShowChildCategories: boolean;
     fAutoRefreshDelay: Integer;
+    fSmartFilter: boolean;
   published
     property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
     property refreshOnChange: boolean read fRefreshOnChange write fRefreshOnChange;
-    property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus default true;
-    property showChildCategories: boolean read fShowChildCategories write fShowChildCategories default true;
-    property autoRefreshDelay: Integer read fAutoRefreshDelay write fAutoRefreshDelay default 1500;
+    property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus;
+    property showChildCategories: boolean read fShowChildCategories write fShowChildCategories;
+    property autoRefreshDelay: Integer read fAutoRefreshDelay write fAutoRefreshDelay;
+    property smartFilter: boolean read fSmartFilter write fSmartFilter;
   public
     constructor Create(AOwner: TComponent); override;
     procedure Assign(Source: TPersistent); override;
     procedure AssignTo(Dest: TPersistent); override;
   end;
 
+  { TCESymbolListWidget }
+
   TCESymbolListWidget = class(TCEWidget, ICEMultiDocObserver, ICEEditableOptions)
     btnRefresh: TBitBtn;
     imgList: TImageList;
@@ -98,6 +102,9 @@ type
     procedure btnRefreshClick(Sender: TObject);
     procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
     procedure TreeFilterEdit1AfterFilter(Sender: TObject);
+    function TreeFilterEdit1FilterItem(Item: TObject; out Done: Boolean
+      ): Boolean;
+    procedure TreeFilterEdit1MouseEnter(Sender: TObject);
     procedure TreeKeyPress(Sender: TObject; var Key: char);
   private
     fOptions: TCESymbolListOptions;
@@ -115,6 +122,7 @@ type
     fRefreshOnChange: boolean;
     fRefreshOnFocus: boolean;
     fShowChildCategories: boolean;
+    fSmartFilter: boolean;
     fToolOutput: TMemoryStream;
     ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode;
     ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
@@ -230,6 +238,7 @@ begin
   inherited;
   fRefreshOnFocus := true;
   fShowChildCategories := true;
+  fSmartFilter := true;
   fAutoRefreshDelay := 1500;
 end;
 
@@ -246,6 +255,7 @@ begin
     fRefreshOnChange      := widg.fRefreshOnChange;
     fAutoRefresh          := widg.fAutoRefresh;
     fShowChildCategories  := widg.fShowChildCategories;
+    fSmartFilter          := widg.fSmartFilter;
   end
   else inherited;
 end;
@@ -263,6 +273,7 @@ begin
     widg.fRefreshOnChange       := fRefreshOnChange;
     widg.fAutoRefresh           := fAutoRefresh;
     widg.fShowChildCategories   := fShowChildCategories;
+    widg.fSmartFilter           := fSmartFilter;
     //
     widg.fActAutoRefresh.Checked    := fAutoRefresh;
     widg.fActRefreshOnChange.Checked:= fRefreshOnChange;
@@ -312,7 +323,8 @@ begin
   fSyms := TSymbolList.create(nil);
   fToolOutput := TMemoryStream.create;
   //
-  fOptions := TCESymbolListOptions.Create(nil);
+  fOptions := TCESymbolListOptions.Create(self);
+  fOptions.Name:= 'symbolListOptions';
   fname := getCoeditDocPath + OptsFname;
   if FileExists(fname) then
   fOptions.loadFromFile(fname);
@@ -549,6 +561,26 @@ begin
     updateVisibleCat;
 end;
 
+function TCESymbolListWidget.TreeFilterEdit1FilterItem(Item: TObject; out
+  Done: Boolean): Boolean;
+begin
+  if not fSmartFilter then exit;
+  //
+  if TreeFilterEdit1.Filter <> '' then
+    tree.FullExpand
+  else if tree.Selected = nil then
+    tree.FullCollapse
+  else tree.MakeSelectionVisible;
+  result := false;
+end;
+
+procedure TCESymbolListWidget.TreeFilterEdit1MouseEnter(Sender: TObject);
+begin
+  if not fSmartFilter then exit;
+  //
+  tree.Selected := nil;
+end;
+
 procedure TCESymbolListWidget.TreeKeyPress(Sender: TObject; var Key: char);
 begin
   if Key = #13 then TreeDblClick(nil);