diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc
index e7ab9b7cfcb2ce4da4c698b324f75c7b08cf5b09..4de94c3ff1db74d25b361a9602cb260a5f96be1f 100644
--- a/src/UI/AbstractDocumentView.cc
+++ b/src/UI/AbstractDocumentView.cc
@@ -19,6 +19,10 @@ AbstractDocumentView::AbstractDocumentView(AbstractDocumentView::Type type,
 void
 AbstractDocumentView::deleteAllContent() noexcept
 {
+    // Allow to close all dock widgets
+    for (UnclosableDockWidget *const dock : dockWidgets)
+        dock->allowClose();
+
     // Delete all widgets
     if (layout() != nullptr) {
         QLayoutItem *item;
@@ -45,7 +49,7 @@ AbstractDocumentView::getType() const noexcept
 }
 
 void
-AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
+AbstractDocumentView::delDockWidget(UnclosableDockWidget **dock) noexcept
 {
     // Remove the toggle view action
     QAction *act = (*dock)->toggleViewAction();
@@ -53,6 +57,7 @@ AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
         viewsActions.removeAll(act);
 
     // Remove the widget
+    (*dock)->allowClose();
     removeDockWidget(*dock);
     delete *dock;
     *dock = nullptr;
@@ -61,7 +66,7 @@ AbstractDocumentView::delDockWidget(QDockWidget **dock) noexcept
     emit viewActionsChanged();
 }
 void
-AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dock,
+AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, UnclosableDockWidget *dock,
                                     Qt::Orientation orientation) noexcept
 {
     // dock->setTitleBarWidget(new QWidget(dock)); // <- to disable the header bar
@@ -69,6 +74,8 @@ AbstractDocumentView::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dock,
     QAction *act = dock->toggleViewAction();
     if (!viewsActions.contains(act))
         viewsActions.prepend(act);
+    if (!dockWidgets.contains(dock))
+        dockWidgets.append(dock);
     emit viewActionsChanged();
 }
 
diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh
index d1e097eebadf4f72cab4dd3d8b8b7cd3694e2f7a..8f5473a895a9258dd00186f37214e820bf525b52 100644
--- a/src/UI/AbstractDocumentView.hh
+++ b/src/UI/AbstractDocumentView.hh
@@ -6,6 +6,7 @@
 
 #include "../Lib/Utils.hh"
 #include "../Lib/AbstractDocument.hh"
+#include "UnclosableDockWidget.hh"
 
 namespace Vivy
 {
@@ -45,11 +46,12 @@ signals:
 protected:
     void deleteAllContent() noexcept;
 
-    void delDockWidget(QDockWidget **) noexcept;
-    void addDockWidget(Qt::DockWidgetArea, QDockWidget *, Qt::Orientation) noexcept;
+    void delDockWidget(UnclosableDockWidget **) noexcept;
+    void addDockWidget(Qt::DockWidgetArea, UnclosableDockWidget *, Qt::Orientation) noexcept;
     QList<QAction *> viewsActions{};
 
 private:
     const Type documentType;
+    QVector<UnclosableDockWidget *> dockWidgets{};
 };
 }
diff --git a/src/UI/UnclosableDockWidget.cc b/src/UI/UnclosableDockWidget.cc
index 504fb790be0ec2834ef951fd5000c453fa632dd1..0b7fb6bec74aa2a0b56192e24db60d475ea8dd03 100644
--- a/src/UI/UnclosableDockWidget.cc
+++ b/src/UI/UnclosableDockWidget.cc
@@ -12,5 +12,14 @@ UnclosableDockWidget::UnclosableDockWidget(const QString &name, QWidget *parent)
 void
 UnclosableDockWidget::closeEvent(QCloseEvent *event) noexcept
 {
-    event->ignore();
+    if (allowedToClose)
+        event->accept();
+    else
+        event->ignore();
+}
+
+void
+UnclosableDockWidget::allowClose() noexcept
+{
+    allowedToClose = true;
 }
diff --git a/src/UI/UnclosableDockWidget.hh b/src/UI/UnclosableDockWidget.hh
index 2e13bcaa077e73a51c7f05952a616b6833ba3251..99b4a37befc687681536dd3de72acc15772429b8 100644
--- a/src/UI/UnclosableDockWidget.hh
+++ b/src/UI/UnclosableDockWidget.hh
@@ -10,8 +10,12 @@ class UnclosableDockWidget final : public QDockWidget {
 
 public:
     explicit UnclosableDockWidget(const QString &, QWidget *parent) noexcept;
+    void allowClose() noexcept;
 
 protected:
     void closeEvent(QCloseEvent *event) noexcept override;
+
+private:
+    bool allowedToClose{ false };
 };
 }