diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh
index 7745665b35e2bc5f669c86c4223afc0b839a0060..8da2204c72a858621090013281c02f854dde14e7 100644
--- a/src/UI/AbstractDocumentView.hh
+++ b/src/UI/AbstractDocumentView.hh
@@ -39,6 +39,8 @@ public:
     bool isType(const Utils::DocumentType t) const noexcept;
     const QList<QAction *> &getViewsActions() const noexcept;
 
+    virtual void loadViews() noexcept = 0;
+
 signals:
     void viewActionsChanged();
     void documentPropertyChanged();
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 08dc1cd9b4151e5441984624d55281195e6a4a17..dffe974089d5a80830146351423bda2df6a52bd0 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -21,6 +21,16 @@
 
 #define ACTION_ADD_SHORTCUT(action, shortcut) action##Act->setShortcut(shortcut);
 
+#define ADD_TAB(view) \
+    std::shared_ptr<AbstractDocumentView> viewPtr; \
+    viewPtr.reset(view); \
+    if (auto p = viewPtr.get()) { \
+        p->loadViews(); \
+        documentViewPtrs.insert(viewPtr.get(), viewPtr); \
+        addTab(p); \
+    }
+
+
 using namespace Vivy;
 
 MainWindow::MainWindow() noexcept
@@ -301,7 +311,6 @@ MainWindow::closeDocument(int index) noexcept
     if (documentToClose) {
         logDebug()
             << "Delete document view " << VIVY_LOG_QUOTED(documentToClose->getDocumentTabName());
-
         documentToClose->closeDocument();
         documentViewPtrs.remove(documentToClose);
     }
@@ -311,11 +320,8 @@ void
 MainWindow::newDocument() noexcept
 {
     try {
-        auto viewPtr = std::shared_ptr<VivyDocumentView>(new VivyDocumentView(vivyApp->documentStore->newDocument(VivyDocument::UntouchedByDefault), documents));
-        if (auto p = viewPtr.get()){
-            documentViewPtrs.insert(p, viewPtr);
-            addTab(p);
-        }
+        ADD_TAB(new VivyDocumentView(
+            vivyApp->documentStore->newDocument(VivyDocument::UntouchedByDefault), documents));
     } catch (const std::runtime_error &e) {
         logError() << "Failed to create a new empty document: " << e.what();
     }
@@ -342,28 +348,20 @@ MainWindow::openDocument() noexcept
     // Handle the different types here
     try {
         if (fileType == Utils::DocumentType::Vivy){
-            auto viewPtr = std::shared_ptr<VivyDocumentView>(new VivyDocumentView(vivyApp->documentStore->loadDocument(filename), documents));
-            if (auto p = viewPtr.get()){
-                documentViewPtrs.insert(p, viewPtr);
-                addTab(p);
-            }
+            ADD_TAB(new VivyDocumentView(vivyApp->documentStore->loadDocument(filename), documents));
         }
 
         else if (fileType == Utils::DocumentType::VivyScript) {
             auto scriptDocument = vivyApp->scriptStore->loadDocument(filename);
             const bool rc       = vivyApp->scriptStore->executeScript(scriptDocument->getUuid());
-            auto viewPtr = std::shared_ptr<ScriptDocumentView>(new ScriptDocumentView(scriptDocument, documents));
-
-            if (auto p = viewPtr.get()){
-                if (!rc) {
-                    const auto &[line, desc] = std::tuple{ 0, vivyApp->scriptStore->getLastLuaError() };
-                    emit p->luaErrorFound(line, desc);
-                }
+            ScriptDocumentView *newView = new ScriptDocumentView(scriptDocument, documents);
 
-                documentViewPtrs.insert(p, viewPtr);
-                addTab(p);
+            if (!rc) {
+                const auto &[line, desc] = std::tuple{ 0, vivyApp->scriptStore->getLastLuaError() };
+                emit newView->luaErrorFound(line, desc);
             }
 
+            ADD_TAB(newView);
         }
     } catch (const std::runtime_error &e) {
         logError() << "Failed to load document " << VIVY_LOG_QUOTED(filename)
@@ -410,6 +408,7 @@ void
 MainWindow::addTab(AbstractDocumentView *const tab)
 {
     int index = -1;
+
     if (const int untouched_index = findFirstUntouchedDocument(); untouched_index >= 0) {
         closeDocument(untouched_index);
         index = documents->insertTab(untouched_index, tab, tab->getDocumentTabIcon(),
diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh
index 0f7907352447f3bcb82c1081c242b519141016fd..8d45158b2a2f4998048f831c3bda7c23f13848e0 100644
--- a/src/UI/ScriptDocumentView.hh
+++ b/src/UI/ScriptDocumentView.hh
@@ -34,6 +34,8 @@ public:
     QIcon getDocumentTabIcon() const noexcept override;
     AbstractDocument *getDocument() const noexcept override;
 
+    void loadViews() noexcept override {} ;
+
     void setUseFakeVimEditor(bool yes) noexcept;
 
 signals:
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 25505b3a0f06e0128132fd9b35444ecd34b86629..b1b4eb3b5f2edb98036ce57bc6358db3b0f6edce 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -27,10 +27,6 @@ VivyDocumentView::VivyDocumentView(std::shared_ptr<VivyDocument> doc, QWidget *p
 
     setDockNestingEnabled(true);
 
-    loadAudioView();
-    loadVideoView();
-    loadAssView();
-
     // Add some actions...
     openPropertiesAct = new QAction("Open properties", this);
     connect(openPropertiesAct, &QAction::triggered, this, &VivyDocumentView::openProperties);
@@ -49,6 +45,13 @@ VivyDocumentView::VivyDocumentView(std::shared_ptr<VivyDocument> doc, QWidget *p
     VIVY_LOG_CTOR() << "View for " << doc->getUuid() << " done!";
 }
 
+void VivyDocumentView::loadViews() noexcept
+{
+    loadAudioView();
+    loadVideoView();
+    loadAssView();
+}
+
 VivyDocumentView::~VivyDocumentView() noexcept
 {
     VIVY_LOG_DTOR() << "Deleting view for " << document->getUuid() << ", file name is "
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index ad5ab51d6c5cc42ffc2b468df2cc42ce3001d09c..bc777451fdfd57109990c9e276ca7b2c56dfbf36 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -40,6 +40,8 @@ public:
 
     VivyDocument *getDocument() const noexcept override;
 
+    void loadViews() noexcept override;
+
 public slots:
     void loadAudioView() noexcept;
     void loadVideoView() noexcept;