diff --git a/gui/canvaspainter/v7/src/TCanvasPainter.cxx b/gui/canvaspainter/v7/src/TCanvasPainter.cxx
index 41a1395a21998dca40d138e109200464d2a91b94..4400951a7cbd738d5116d51defbdde6774d861de 100644
--- a/gui/canvaspainter/v7/src/TCanvasPainter.cxx
+++ b/gui/canvaspainter/v7/src/TCanvasPainter.cxx
@@ -569,7 +569,7 @@ void ROOT::Experimental::TCanvasPainter::ProcessData(unsigned connid, const std:
       conn->fGetMenu = cdata;
    } else if (arg == "QUIT") {
       // use window manager to correctly terminate http server
-      TWebWindowsManager::Instance()->Terminate(0);
+      TWebWindowsManager::Instance()->Terminate();
       return;
    } else if (arg == "RELOAD") {
       conn->fSend = 0; // reset send version, causes new data sending
diff --git a/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx b/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx
index a1a5ee64bb41a0d47d043b7c71da54503e0c76ff..770cc3609345eb1b402ba6539c4b492fdffaa096 100644
--- a/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx
+++ b/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx
@@ -66,7 +66,7 @@ public:
    int WaitFor(WebWindowWaitFunc_t check, double tm);
 
    /// Terminate http server and ROOT application
-   void Terminate(int code = 0);
+   void Terminate();
 
 };
 
diff --git a/gui/webdisplay/src/TWebWindowsManager.cxx b/gui/webdisplay/src/TWebWindowsManager.cxx
index ba453cb5afe047825bea2a6630e4d27215d27806..9102a7509e3cf081925f7c0273756edbce5755b6 100644
--- a/gui/webdisplay/src/TWebWindowsManager.cxx
+++ b/gui/webdisplay/src/TWebWindowsManager.cxx
@@ -31,6 +31,7 @@
 #include "TString.h"
 #include "TStopwatch.h"
 #include "TApplication.h"
+#include "TTimer.h"
 
 /** \class ROOT::Experimental::TWebWindowManager
 \ingroup webdisplay
@@ -323,11 +324,12 @@ int ROOT::Experimental::TWebWindowsManager::WaitFor(WebWindowWaitFunc_t check, d
 //////////////////////////////////////////////////////////////////////////
 /// Terminate http server and ROOT application
 
-void ROOT::Experimental::TWebWindowsManager::Terminate(int code)
+void ROOT::Experimental::TWebWindowsManager::Terminate()
 {
    if (fServer)
       fServer->SetTerminate();
 
+   // use timer to avoid situation when calling object is deleted by terminate
    if (gApplication)
-      gApplication->Terminate(code);
+      TTimer::SingleShot(100, "TApplication", gApplication, "Terminate()");
 }