diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc
index 4de94c3ff1db74d25b361a9602cb260a5f96be1f..70b1c2414dc47bcedeb9f80ccc13041f8c75d6b8 100644
--- a/src/UI/AbstractDocumentView.cc
+++ b/src/UI/AbstractDocumentView.cc
@@ -15,14 +15,18 @@ AbstractDocumentView::AbstractDocumentView(AbstractDocumentView::Type type,
     setTabPosition(Qt::RightDockWidgetArea, QTabWidget::East);
 }
 
-// A utility function to delete all the child widgets
 void
-AbstractDocumentView::deleteAllContent() noexcept
+AbstractDocumentView::allowToCloseAllDocks() noexcept
 {
     // Allow to close all dock widgets
     for (UnclosableDockWidget *const dock : dockWidgets)
         dock->allowClose();
+}
 
+// A utility function to delete all the child widgets
+void
+AbstractDocumentView::deleteAllContent() noexcept
+{
     // Delete all widgets
     if (layout() != nullptr) {
         QLayoutItem *item;
@@ -30,7 +34,7 @@ AbstractDocumentView::deleteAllContent() noexcept
             delete item->widget();
             delete item;
         }
-        delete layout();
+        delete layout(); // XXX
     }
 }
 
diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh
index 8f5473a895a9258dd00186f37214e820bf525b52..7745665b35e2bc5f669c86c4223afc0b839a0060 100644
--- a/src/UI/AbstractDocumentView.hh
+++ b/src/UI/AbstractDocumentView.hh
@@ -45,6 +45,7 @@ signals:
 
 protected:
     void deleteAllContent() noexcept;
+    void allowToCloseAllDocks() noexcept;
 
     void delDockWidget(UnclosableDockWidget **) noexcept;
     void addDockWidget(Qt::DockWidgetArea, UnclosableDockWidget *, Qt::Orientation) noexcept;
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 5615f900219518d07187144a59617c6a7644f960..dca4130d4fba97ec60b7d261b06c59362441a890 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -164,7 +164,15 @@ MainWindow::MainWindow() noexcept
     newDocument();
 }
 
-MainWindow::~MainWindow() noexcept { qDebug() << "Closing the main window!"; }
+void
+MainWindow::closeEvent(QCloseEvent *event) noexcept
+{
+    qDebug() << "Closing the main window!";
+    forEachViews<VivyDocumentView>(
+        [](VivyDocumentView *view, int) { view->closeDocument(); }); // XXX
+    // event->accept();
+    QMainWindow::closeEvent(event);
+}
 
 void
 MainWindow::updateFakeVimUsage(bool yes) noexcept
diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh
index d268f160418675e7bb4543ba4b376dfcc8103f73..7d375a94be296067d5ef6b2a700f04c86921f536 100644
--- a/src/UI/MainWindow.hh
+++ b/src/UI/MainWindow.hh
@@ -25,7 +25,6 @@ class MainWindow final : public QMainWindow {
 
 public:
     explicit MainWindow() noexcept;
-    ~MainWindow() noexcept override;
 
     AbstractDocument *getCurrentDocument() const;
     template <class Document> Document *getCurrentDocument() const
@@ -91,6 +90,9 @@ private:
         }
     }
 
+protected:
+    void closeEvent(QCloseEvent *) noexcept override;
+
 private slots:
     void newDocument() noexcept;
     void openDocument() noexcept;
diff --git a/src/UI/UnclosableDockWidget.cc b/src/UI/UnclosableDockWidget.cc
index a148703591668672c52fe00a547bd6de8d1b1c1a..583948db63c30af4dd229cc892fdb9c945abd5a3 100644
--- a/src/UI/UnclosableDockWidget.cc
+++ b/src/UI/UnclosableDockWidget.cc
@@ -21,6 +21,6 @@ UnclosableDockWidget::closeEvent(QCloseEvent *event) noexcept
 void
 UnclosableDockWidget::allowClose() noexcept
 {
-    qDebug() << "Dock" << windowTitle() << "is now allowed to be closed";
+    // qDebug() << "Dock" << windowTitle() << "is now allowed to be closed";
     allowedToClose = true;
 }
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 1f1f3ec32e839f2e92e4a25b4d91e53bfd6925ff..8bb95c5c29141f24eaa9a07d0a1d43d238416143 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -147,12 +147,13 @@ VivyDocumentView::closeDocument() noexcept
     qDebug() << "Closing the document:" << document->getName() << "( ref count is"
              << document.use_count() << ")";
     vivyApp->documentStore.closeDocument(document->getUuid());
+    allowToCloseAllDocks();
 
     // Kubat: the visualizer pointer should have been deleted by the
     // deleteAllContent() call if it was created.
-    deleteAllContent();
-    visualizer = nullptr;
-    property   = nullptr;
+    // deleteAllContent();
+    // visualizer = nullptr;
+    // property   = nullptr;
 }
 
 QIcon