Index: src/fmain.lfm
===================================================================
--- src/fmain.lfm	(revision 8763)
+++ src/fmain.lfm	(working copy)
@@ -1219,6 +1219,9 @@
       object miLine15: TMenuItem
         Caption = '-'
       end
+      object mnuUndoCloseTab: TMenuItem
+        Action = actUndoCloseTab
+      end
       object mnuCloseTab: TMenuItem
         Action = actCloseTab
       end
@@ -1682,6 +1685,13 @@
       Caption = '&Benchmark'
       OnExecute = actExecute
     end
+    object actUndoCloseTab: TAction
+      Tag = 21
+      Category = 'Tabs'
+      Caption = '&Undo Close Tab'
+      HelpType = htKeyword
+      OnExecute = actExecute
+    end
     object actNewTab: TAction
       Tag = 21
       Category = 'Tabs'
Index: src/fmain.pas
===================================================================
--- src/fmain.pas	(revision 8763)
+++ src/fmain.pas	(working copy)
@@ -122,6 +122,7 @@
     actFocusTreeView: TAction;
     actToggleFullscreenConsole: TAction;
     actSrcOpenDrives: TAction;
+    actUndoCloseTab: TAction;
     actRightReverseOrder: TAction;
     actLeftReverseOrder: TAction;
     actRightFlatView: TAction;
@@ -336,6 +337,7 @@
     mnuTabOptionPathResets: TMenuItem;
     mnuCloseAllTabs: TMenuItem;
     mnuCloseTab: TMenuItem;
+    mnuUndoCloseTab: TMenuItem;
     miLine15: TMenuItem;
     mnuOpenDirInNewTab: TMenuItem;
     mnuNewTab: TMenuItem;
Index: src/ufileviewnotebook.pas
===================================================================
--- src/ufileviewnotebook.pas	(revision 8763)
+++ src/ufileviewnotebook.pas	(working copy)
@@ -150,6 +150,7 @@
     FNotebookSide: TFilePanelSelect;
     FOnCloseTabClicked: TNotifyEvent;
     FPageControl: TFileViewPageControl;
+    FClosedPages: array of TFileViewPage;
 
     function GetActivePage: TFileViewPage;
     function GetActiveView: TFileView;
@@ -186,6 +187,7 @@
     function NewEmptyPage: TFileViewPage;
     function NewPage(CloneFromPage: TFileViewPage): TFileViewPage;
     function NewPage(CloneFromView: TFileView): TFileViewPage;
+    procedure UndoClosePage();
     procedure DeletePage(Index: Integer);
     procedure RemovePage(Index: Integer); reintroduce;
     procedure RemovePage(var APage: TFileViewPage);
@@ -875,12 +877,39 @@
 procedure TFileViewNotebook.DeletePage(Index: Integer);
 var
   APage: TFileViewPage;
+  I: Integer;
 begin
   APage:= GetPage(Index);
+  if Length(FClosedPages) >= 10 then  // max undo pages count
+  begin
+    FClosedPages[0].Free;  // pop first
+    for I:= 0 to Length(FClosedPages) - 2 do  // move all left
+      FClosedPages[I]:= FClosedPages[I+1];
+    FClosedPages[High(FClosedPages)]:= APage;  // put last
+  end else begin
+    SetLength(FClosedPages, Length(FClosedPages) + 1);  // push
+    FClosedPages[High(FClosedPages)]:= APage;
+  end;
   FPageControl.Pages[Index].Free;
-  APage.Free;
+  //APage.Free;
 end;
 
+procedure TFileViewNotebook.UndoClosePage();
+var
+  ANewPage: TFileViewPage;
+  Last: TFileViewPage;
+begin
+  if Length(FClosedPages) > 0 then
+  begin
+    ANewPage := NewEmptyPage();
+    Last := FClosedPages[High(FClosedPages)];
+    ANewPage.AssignPage(Last);
+    ANewPage.MakeActive;
+    SetLength(FClosedPages, Length(FClosedPages) - 1);  // pop
+    Last.Free;
+  end;
+end;
+
 procedure TFileViewNotebook.RemovePage(Index: Integer);
 begin
 {$IFDEF LCLGTK2}
Index: src/uglobs.pas
===================================================================
--- src/uglobs.pas	(revision 8763)
+++ src/uglobs.pas	(working copy)
@@ -975,6 +975,7 @@
       AddIfNotExists(['Ctrl+T'],[],'cm_NewTab');
       AddIfNotExists(['Ctrl+U'],[],'cm_Exchange');
       AddIfNotExists(['Ctrl+W'],[],'cm_CloseTab');
+      AddIfNotExists(['Ctrl+Shift+W'],[],'cm_UndoCloseTab');
       AddIfNotExists(['Ctrl+F1'],[],'cm_BriefView');
       AddIfNotExists(['Ctrl+F2'],[],'cm_ColumnsView');
       AddIfNotExists(['Ctrl+F3'],[],'cm_SortByName');
Index: src/umaincommands.pas
===================================================================
--- src/umaincommands.pas	(revision 8763)
+++ src/umaincommands.pas	(working copy)
@@ -187,6 +187,7 @@
    procedure cm_QuickSearch(const Params: array of string);
    procedure cm_QuickFilter(const Params: array of string);
    procedure cm_SrcOpenDrives(const {%H-}Params: array of string);
+   procedure cm_UndoCloseTab(const {%H-}Params: array of string);
    procedure cm_LeftOpenDrives(const {%H-}Params: array of string);
    procedure cm_RightOpenDrives(const {%H-}Params: array of string);
    procedure cm_OpenBar(const {%H-}Params: array of string);
@@ -1367,6 +1368,11 @@
   frmMain.ShowDrivesList(frmMain.SelectedPanel);
 end;
 
+procedure TMainCommands.cm_UndoCloseTab(const Params: array of string);
+begin
+  frmMain.ActiveNotebook.UndoClosePage();
+end;
+
 procedure TMainCommands.cm_LeftOpenDrives(const Params: array of string);
 begin
   frmMain.ShowDrivesList(fpLeft);
