diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8ecf5472474cab549a6d5d2c56645bbaf48bb66c..5aff844fff1675ecf91463a642ed617e32dbc68f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -67,61 +67,9 @@ target_link_libraries(Vivy PRIVATE ${MPV_LIBRARY})
 target_link_libraries(Vivy PRIVATE lua)
 
 # Headers related things
+include("${CMAKE_CURRENT_SOURCE_DIR}/PreCompiledHeaders.cmake")
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
-target_precompile_headers(Vivy PRIVATE
-    # Private Vivy headers
-    # ${Vivy_INC}
-
-    # STL headers
-    <memory>
-    <vector>
-    <atomic>
-    <algorithm>
-    <stdexcept>
-    <sstream>
-    <map>
-
-
-    # Qt headers
-    <QtGlobal>
-    <QObject>
-    <QRegularExpression>
-    <QRegExp>
-    <QString>
-    <QVariant>
-    <QFile>
-
-    <QList>
-    <QVector>
-    <QMap>
-
-    <QJsonObject>
-    <QJsonArray>
-    <QJsonDocument>
-
-    <QTextDocument>
-    <QColor>
-    <QWidget>
-    <QIcon>
-    <QFont>
-    <QPixmap>
-    <QApplication>
-    <QCloseEvent>
-    <QLabel>
-    <QPushButton>
-    <QVBoxLayout>
-    <QHBoxLayout>
-    <QEvent>
-    <QMouseEvent>
-    <QTextEdit>
-    <QDockWidget>
-    <QMenu>
-    <QFileDialog>
-    <QMutex>
-    <QMainWindow>
-    <QPainter>
-    <QPlainTextEdit>
-)
+target_precompile_headers(Vivy PRIVATE ${Vivy_PRECOMPILED_INC})
 
 # Set Vivy's needed C++ features
 target_compile_features(Vivy PRIVATE
@@ -167,10 +115,10 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     target_compile_options(Vivy PRIVATE
         -Weverything
 
-        # Disable some things because we want C++20 and don't constrol some Qt
-        # generated files... Also permit VLA
+        # Disable some things because we want C++20 and don't control some Qt
+        # generated files...
         -Wno-c++98-compat -Wno-c++98-c++11-c++14-c++17-compat-pedantic
-        -Wno-c++98-compat-pedantic -Wno-old-style-cast
+        -Wno-c++98-compat-pedantic
         -Wno-extra-semi-stmt
         -Wno-redundant-parens
         -Wno-padded
diff --git a/PreCompiledHeaders.cmake b/PreCompiledHeaders.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4509f913c7712f48d801e1a550e829929b81da57
--- /dev/null
+++ b/PreCompiledHeaders.cmake
@@ -0,0 +1,143 @@
+# System headers
+set(STL_INC
+    PRIVATE
+    <memory>
+    <vector>
+    <atomic>
+    <algorithm>
+    <stdexcept>
+    <sstream>
+    <map>
+    <locale>
+    <functional>
+    <initializer_list>
+    <cstring>
+    <string>
+    <string_view>
+    <cstdio>
+    <iostream>
+    <optional>
+    <type_traits>
+    <chrono>
+    <climits>
+    <ctype.h>
+    <mutex>
+)
+
+set(EXT_INC PRIVATE
+    <mpv/client.h>
+    "${CMAKE_CURRENT_SOURCE_DIR}/vendor/lua-5.4.3/src/lua.hpp"
+)
+
+set(QT_STRUCT_INC
+    PRIVATE
+    <QtGlobal>
+    <QObject>
+    <QRegularExpression>
+    <QRegExp>
+    <QString>
+    <QVariant>
+    <QFile>
+    <QDebug>
+    <QHash>
+    <QDir>
+    <QTextStream>
+    <QFileInfo>
+    <QMessageLogger>
+    <QUuid>
+    <QPointer>
+    <QProcess>
+    <QTimer>
+    <QStack>
+    <QTemporaryFile>
+    <QStandardPaths>
+    <QList>
+    <QVector>
+    <QMap>
+    <QStringList>
+    <QJsonObject>
+    <QJsonArray>
+    <QJsonDocument>
+    <QJsonValue>
+)
+
+set(QT_WIDGET_INC
+    PRIVATE
+    <QCoreApplication>
+    <QTextDocument>
+    <QColor>
+    <QWidget>
+    <QIcon>
+    <QFont>
+    <QPixmap>
+    <QApplication>
+    <QCloseEvent>
+    <QLabel>
+    <QPushButton>
+    <QVBoxLayout>
+    <QHBoxLayout>
+    <QEvent>
+    <QMouseEvent>
+    <QTextEdit>
+    <QDockWidget>
+    <QMenu>
+    <QFileDialog>
+    <QMutex>
+    <QMainWindow>
+    <QPainter>
+    <QPlainTextEdit>
+    <QSlider>
+    <QAbstractItemModel>
+    <QHeaderView>
+    <QPaintEvent>
+    <QTableView>
+    <QStyledItemDelegate>
+    <QMessageBox>
+    <QScrollBar>
+    <QScrollArea>
+    <QGraphicsPixmapItem>
+    <QGraphicsSceneMouseEvent>
+    <QPen>
+    <QAction>
+    <QGraphicsItem>
+    <QGraphicsLineItem>
+    <QTreeView>
+    <QGraphicsView>
+    <QGraphicsScene>
+    <QWindow>
+    <QAbstractScrollArea>
+    <QGraphicsLineItem>
+    <QGraphicsPixmapItem>
+    <QClipboard>
+    <QInputMethodEvent>
+    <QKeyEvent>
+    <QLineEdit>
+    <QTextBlock>
+    <QTextCursor>
+    <QTextDocumentFragment>
+    <QMimeData>
+    <QSharedPointer>
+    <QStatusBar>
+    <QBrush>
+    <QFrame>
+    <QSyntaxHighlighter>
+    <QTextCharFormat>
+    <QTabWidget>
+    <QLayoutItem>
+    <QLayout>
+    <QEventLoop>
+    <QImage>
+    <QToolBar>
+    <QMenuBar>
+    <QDialogButtonBox>
+    <QFileIconProvider>
+    <QFontDatabase>
+    <QTextCodec>
+)
+
+set(Vivy_PRECOMPILED_INC PRIVATE
+    ${STL_INC}
+    ${QT_STRUCT_INC}
+    ${QT_WIDGET_INC}
+    ${EXT_INC}
+)
diff --git a/src/Lib/AbstractDocument.hh b/src/Lib/AbstractDocument.hh
index 40d1d5d946fcb6bcacb98f93419fc0287ba1ea9f..51ed90b0f6c1b4aae910e30d4554d42b32d5442d 100644
--- a/src/Lib/AbstractDocument.hh
+++ b/src/Lib/AbstractDocument.hh
@@ -7,8 +7,6 @@
 
 #include "Utils.hh"
 #include "Uuid.hh"
-#include <QFileInfo>
-#include <QDir>
 
 namespace Vivy
 {
diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc
index 47684383ae37da01c3aff1deb430b71e7b7f4b39..218763c297441fe96745decac1d076922f209f15 100644
--- a/src/Lib/Audio.cc
+++ b/src/Lib/Audio.cc
@@ -1,8 +1,5 @@
 #include "Audio.hh"
 
-#include <QJsonObject>
-#include <QJsonArray>
-
 using namespace Vivy;
 
 // AudioContext class implementation
diff --git a/src/Lib/CRTPStore.hh b/src/Lib/CRTPStore.hh
index 94b03353c2fd1c9ed525109d4981374ad2a910ae..8324d9c606635812731708f754c7997bbe6c49e2 100644
--- a/src/Lib/CRTPStore.hh
+++ b/src/Lib/CRTPStore.hh
@@ -6,9 +6,6 @@
 
 #include "Utils.hh"
 #include "Uuid.hh"
-#include <QString>
-#include <QMap>
-#include <memory>
 
 #define VIVY_STORAGE_CLASS(theClassName, theDocumentName) \
     VIVY_UNMOVABLE_OBJECT(theClassName)                   \
diff --git a/src/Lib/Document/CRTPSubDocument.hh b/src/Lib/Document/CRTPSubDocument.hh
index eb6683d58a6b3eeddf3ed47bc1265b67791beee8..4ee53c987c5ff2d6cec9eb9fba86afa479213a43 100644
--- a/src/Lib/Document/CRTPSubDocument.hh
+++ b/src/Lib/Document/CRTPSubDocument.hh
@@ -8,8 +8,6 @@
 #include "../Utils.hh"
 #include "../Audio.hh"
 #include "../Ass/Ass.hh"
-#include <QString>
-#include <memory>
 
 namespace Vivy
 {
diff --git a/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc b/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
index de627f85605be9edd4662813444fece40b11b7fb..aa47925ca8d1e114375c2024eaef8faec3b75ef2 100644
--- a/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
@@ -1,8 +1,5 @@
 #include "../CRTPSubDocument.hh"
 
-#include <QJsonObject>
-#include <QJsonDocument>
-
 using namespace Vivy;
 
 // Init a ASS sub-document from a file
diff --git a/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc b/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
index 5a205fa7546126c759cad3db7f5cf941b27bfce8..d1e68c088c6baf3dc1a7f2c69f102e56cac60515 100644
--- a/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
@@ -1,8 +1,5 @@
 #include "../CRTPSubDocument.hh"
 
-#include <QJsonObject>
-#include <QJsonDocument>
-
 using namespace Vivy;
 
 // Get the default stream index or -1 if not possible
diff --git a/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc b/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
index 87b70c0c4c60fdf8d4ed063fa0c8d2a5ad33e45e..74922e3461b76a3482066a03166095248b0d38d2 100644
--- a/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
@@ -1,8 +1,5 @@
 #include "../CRTPSubDocument.hh"
 
-#include <QJsonObject>
-#include <QJsonDocument>
-
 using namespace Vivy;
 
 // Init a video sub-document from a file
diff --git a/src/Lib/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc
index 4c38fc0d899d91a051c94bf63ca4cae614951ac5..5a6dacc576c2330cab3b35b7f9c90b711f941ab0 100644
--- a/src/Lib/Document/VivyDocument.cc
+++ b/src/Lib/Document/VivyDocument.cc
@@ -1,15 +1,6 @@
 #include "VivyDocument.hh"
 #include "../Utils.hh"
 
-#include <QFileInfo>
-#include <QDir>
-#include <QString>
-#include <QStringList>
-#include <QJsonArray>
-#include <QJsonObject>
-#include <QJsonDocument>
-#include <QTextStream>
-
 using namespace Vivy;
 
 // Runtime document version, don't set it in the header!!!
diff --git a/src/Lib/Document/VivyDocument.hh b/src/Lib/Document/VivyDocument.hh
index d59bde38ee37af6645e02e68dc9bb6ca37c60ae4..b1476d7ca29f272adcd8807a804da9f9e6e00501 100644
--- a/src/Lib/Document/VivyDocument.hh
+++ b/src/Lib/Document/VivyDocument.hh
@@ -10,13 +10,6 @@
 #include "../Uuid.hh"
 #include "CRTPSubDocument.hh"
 
-#include <memory>
-#include <functional>
-#include <initializer_list>
-#include <QString>
-#include <QDir>
-#include <QJsonDocument>
-
 #define DCL_VIVY_SAVE_KEY(name) static const inline QString Key##name = QStringLiteral(#name);
 
 namespace Vivy
diff --git a/src/Lib/Document/VivyDocumentStore.cc b/src/Lib/Document/VivyDocumentStore.cc
index daa0a92f0e7f1412152e0fdef1d289cbc4f25f41..909d9e270367c90526b04c3c5c5f52d75d0fd93a 100644
--- a/src/Lib/Document/VivyDocumentStore.cc
+++ b/src/Lib/Document/VivyDocumentStore.cc
@@ -1,8 +1,6 @@
 #include "VivyDocumentStore.hh"
 #include "VivyDocument.hh"
 
-#include <stdexcept>
-
 using namespace Vivy;
 
 std::shared_ptr<VivyDocument>
diff --git a/src/Lib/HostOsInfo.cc b/src/Lib/HostOsInfo.cc
index 4951b7c5ef605b150267f43a56c8e274b6463e06..48f5bc6d82b88abad196be8db98ad895555cd467 100644
--- a/src/Lib/HostOsInfo.cc
+++ b/src/Lib/HostOsInfo.cc
@@ -1,7 +1,5 @@
 #include "HostOsInfo.hh"
 
-#include <QCoreApplication>
-
 #if !defined(QT_NO_OPENGL) && defined(QT_GUI_LIB)
 #include <QOpenGLContext>
 #endif
diff --git a/src/Lib/HostOsInfo.hh b/src/Lib/HostOsInfo.hh
index 090135fcd2516c2c5c9f4e7e42d44b31dbf27daf..97b2889621b1348bfdea6b5c88afd68db1090417 100644
--- a/src/Lib/HostOsInfo.hh
+++ b/src/Lib/HostOsInfo.hh
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "Utils.hh"
-#include <QString>
 
 #ifdef Q_OS_WIN
 #define VIVY_HOST_EXE_SUFFIX VIVY_WIN_EXE_SUFFIX
diff --git a/src/Lib/Script/CRTPLuaScriptObject.hh b/src/Lib/Script/CRTPLuaScriptObject.hh
index 671cd3acb0923bf290ec0619c3e7e1d182aeee97..eed3eb57baa96e15460b99e62475e96995d02cd5 100644
--- a/src/Lib/Script/CRTPLuaScriptObject.hh
+++ b/src/Lib/Script/CRTPLuaScriptObject.hh
@@ -4,8 +4,6 @@
 #include "ScriptOption.hh"
 
 #include "lua.hpp"
-#include <vector>
-#include <cstdio>
 
 namespace Vivy::Script
 {
diff --git a/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc b/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
index b2c3127aa97ce23e229ac651ca7b6c7ae7c6a5fe..981491023738cdd7b2b0a3f03ce238b9497dd2ad 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
@@ -1,7 +1,4 @@
 #include "../CRTPLuaScriptObject.hh"
-#include "lua.hpp"
-#include <QFileInfo>
-#include <QString>
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
index 82afe1daa0b10b2824dbd4b9b1fbda7588f9f371..13fd29aa064784ebb97fd2eb404bb7fb40737d1d 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
@@ -1,7 +1,4 @@
 #include "../CRTPLuaScriptObject.hh"
-#include "lua.hpp"
-#include <QFileInfo>
-#include <QString>
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
index 39c676d96f83d05072484122761ea0b91dc34d59..f55a170b30fb15fab2b424ddfd0da5f94394673c 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
@@ -1,7 +1,4 @@
 #include "../CRTPLuaScriptObject.hh"
-#include "lua.hpp"
-#include <QFileInfo>
-#include <QString>
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
index b904ecae569de30341dc05f14799fe4d08400ecc..5d535ea67c07b15911b7efff0225ea5dca6a3bc9 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
@@ -1,8 +1,4 @@
 #include "../CRTPLuaScriptObject.hh"
-#include "lua.hpp"
-#include <QFileInfo>
-#include <QString>
-#include <cstring>
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
index 7030865fadffd8f6d7c8a896f6f31d937ce05f47..3efa0998034804d90a5bd21946f7788ce7b2aaac 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
@@ -1,7 +1,4 @@
 #include "../CRTPLuaScriptObject.hh"
-#include "lua.hpp"
-#include <QFileInfo>
-#include <QString>
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/LuaContext.cc b/src/Lib/Script/LuaContext.cc
index 99c42e9c910df420e7d74b40d591b8dd77316035..6d5f32e54fa19cc88720710353817d6813c7e6ea 100644
--- a/src/Lib/Script/LuaContext.cc
+++ b/src/Lib/Script/LuaContext.cc
@@ -1,11 +1,6 @@
 #include "CRTPLuaScriptObject.hh"
 #include "ScriptDocument.hh"
 #include "LuaContext.hh"
-#include "lua.hpp"
-#include <cstdio>
-#include <QtGlobal>
-#include <QString>
-#include <QFile>
 
 // LuaContext implementation
 using namespace Vivy::Script;
diff --git a/src/Lib/Script/LuaContext.hh b/src/Lib/Script/LuaContext.hh
index 161b01e7414a0208652054316a88838cff5fb9ba..afc55e82b59d60d58631d393aa54d16bb6b5e5fb 100644
--- a/src/Lib/Script/LuaContext.hh
+++ b/src/Lib/Script/LuaContext.hh
@@ -3,7 +3,6 @@
 #include "../Utils.hh"
 
 struct lua_State;
-class QString;
 
 namespace Vivy
 {
diff --git a/src/Lib/Script/ScriptOption.hh b/src/Lib/Script/ScriptOption.hh
index db4076b86fab2f02ca62d72bdecd86525acb8815..0cfef834096ac036983e9b6c9539de012d422ee8 100644
--- a/src/Lib/Script/ScriptOption.hh
+++ b/src/Lib/Script/ScriptOption.hh
@@ -1,8 +1,5 @@
 #pragma once
 
-#include <string>
-#include <string_view>
-
 namespace Vivy::Script
 {
 // The options
diff --git a/src/Lib/Script/ScriptStore.cc b/src/Lib/Script/ScriptStore.cc
index 689dfc7898593ed82e3e0e936ce7484082310dfb..593809f7bb314fe5692c92be568b9d05f7c552da 100644
--- a/src/Lib/Script/ScriptStore.cc
+++ b/src/Lib/Script/ScriptStore.cc
@@ -1,6 +1,5 @@
 #include "ScriptStore.hh"
 #include "../Uuid.hh"
-#include <iostream>
 
 using namespace Vivy;
 using namespace std::string_literals;
diff --git a/src/Lib/Script/ScriptStore.hh b/src/Lib/Script/ScriptStore.hh
index cbfe85d93ac7a44c5ba64f4138ea973953fc9b34..21d0b98309535e90ec5a3b183b79af5783bc28dd 100644
--- a/src/Lib/Script/ScriptStore.hh
+++ b/src/Lib/Script/ScriptStore.hh
@@ -3,8 +3,6 @@
 #include "../CRTPStore.hh"
 #include "ScriptDocument.hh"
 #include "LuaContext.hh"
-#include <sstream>
-#include <optional>
 
 namespace Vivy::Script
 {
diff --git a/src/Lib/Utils.cc b/src/Lib/Utils.cc
index e75420df141f31fd6c569f529bb2baeefbf84fc3..d023dd7bd8ae39c87b06f71242bab94c8e2373f3 100644
--- a/src/Lib/Utils.cc
+++ b/src/Lib/Utils.cc
@@ -1,8 +1,5 @@
 #include "Utils.hh"
 
-#include <QRegExp>
-#include <QFileInfo>
-
 using namespace Vivy;
 
 std::string &
diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh
index bf4d0025163a55cbc68b0b32a032784064c7e0da..97b0771f890f53a0a1489b0e3df6466436a78817 100644
--- a/src/Lib/Utils.hh
+++ b/src/Lib/Utils.hh
@@ -4,16 +4,6 @@
 #error "This is a C++ header"
 #endif
 
-#include <QString>
-#include <QFileInfo>
-#include <QStringList>
-#include <QDebug>
-#include <QMessageLogger>
-#include <QJsonDocument>
-#include <QtGlobal>
-#include <type_traits>
-#include <chrono>
-
 #include <qglobal.h>
 
 #define VIVY_PRAGMA(x) _Pragma(#x)
diff --git a/src/Lib/Uuid.hh b/src/Lib/Uuid.hh
index a45b43700e293f3d52bdcdb95b532887c8ed291d..068277deeac9f8b33673fa2243a0c5e30e9c2223 100644
--- a/src/Lib/Uuid.hh
+++ b/src/Lib/Uuid.hh
@@ -1,7 +1,5 @@
 #pragma once
 
-#include <QUuid>
-
 namespace Vivy
 {
 class Uuid : public QUuid {
diff --git a/src/UI/AboutWindow.hh b/src/UI/AboutWindow.hh
index 4d4aae15e27db41c606c901557790f3a2a645f71..9bff80cfce81f53374d4e7658698224387bb150d 100644
--- a/src/UI/AboutWindow.hh
+++ b/src/UI/AboutWindow.hh
@@ -4,11 +4,6 @@
 #error "This is a C++ header"
 #endif
 
-#include <QMainWindow>
-#include <QTabWidget>
-#include <QLabel>
-#include <QTextEdit>
-
 namespace Vivy
 {
 class AboutWindow final : public QMainWindow {
diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc
index 51ece8ec6952c8fcd8fa0fcdef8cf5109c7af82c..e7ab9b7cfcb2ce4da4c698b324f75c7b08cf5b09 100644
--- a/src/UI/AbstractDocumentView.cc
+++ b/src/UI/AbstractDocumentView.cc
@@ -1,12 +1,5 @@
 #include "AbstractDocumentView.hh"
 
-#include <QtGlobal>
-#include <QDockWidget>
-#include <QLayoutItem>
-#include <QLayout>
-#include <QWidget>
-#include <functional>
-
 using namespace Vivy;
 
 AbstractDocumentView::AbstractDocumentView(AbstractDocumentView::Type type,
diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh
index e0b23eeb02bb88ebfef87125b5495e08beb01b1a..d1e097eebadf4f72cab4dd3d8b8b7cd3694e2f7a 100644
--- a/src/UI/AbstractDocumentView.hh
+++ b/src/UI/AbstractDocumentView.hh
@@ -6,9 +6,6 @@
 
 #include "../Lib/Utils.hh"
 #include "../Lib/AbstractDocument.hh"
-#include <QMainWindow>
-#include <QDockWidget>
-#include <QAction>
 
 namespace Vivy
 {
diff --git a/src/UI/DockWidgetTitleBar.cc b/src/UI/DockWidgetTitleBar.cc
index 5fdc2719e1465da1d88ddec8c79553f88c7b84d3..203bc948873a927d7f6ce1a3b0536d6ae6b0aeab 100644
--- a/src/UI/DockWidgetTitleBar.cc
+++ b/src/UI/DockWidgetTitleBar.cc
@@ -1,9 +1,5 @@
 #include "DockWidgetTitleBar.hh"
 
-#include <QLabel>
-#include <QHBoxLayout>
-#include <QPushButton>
-
 using namespace Vivy;
 
 DockWidgetTitleBar::DockWidgetTitleBar(QDockWidget *parent) noexcept
diff --git a/src/UI/DocumentViews/AssLinesModel.hh b/src/UI/DocumentViews/AssLinesModel.hh
index e797c3bf395980bbc16f2a91151cc34c6925fef6..60cc550b4cbdcbbf56b921187f8a671d42bf844c 100644
--- a/src/UI/DocumentViews/AssLinesModel.hh
+++ b/src/UI/DocumentViews/AssLinesModel.hh
@@ -2,8 +2,6 @@
 
 #include "../../Lib/Utils.hh"
 #include "../../Lib/Ass/Ass.hh"
-#include <QAbstractItemModel>
-#include <QStringList>
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/AssLinesView.cc b/src/UI/DocumentViews/AssLinesView.cc
index 9134238f1f64d578ba6636f883fda227b1504cc4..022b8cfdcd0010806296269aef26132bb3ce367b 100644
--- a/src/UI/DocumentViews/AssLinesView.cc
+++ b/src/UI/DocumentViews/AssLinesView.cc
@@ -1,8 +1,5 @@
 #include "AssLinesView.hh"
 #include "../../VivyApplication.hh"
-#include <string_view>
-#include <QPaintEvent>
-#include <QHeaderView>
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/AssLinesView.hh b/src/UI/DocumentViews/AssLinesView.hh
index 549cc5321bdac68e78a9944a6012bd2e7374dd0f..635b320cd95f7fea2661f8492a3dff7899f4c47e 100644
--- a/src/UI/DocumentViews/AssLinesView.hh
+++ b/src/UI/DocumentViews/AssLinesView.hh
@@ -1,9 +1,6 @@
 #pragma once
 
 #include "../../Lib/Utils.hh"
-#include <QAbstractItemModel>
-#include <QTableView>
-#include <QStyledItemDelegate>
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
index b7813c425d8f0c39d88a0d10f96b5cece7dd2c62..a0215bda855b3e744f4cfe23ad6cec2b06f8ebaa 100644
--- a/src/UI/DocumentViews/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -1,14 +1,6 @@
 #include "AudioVisualizer.hh"
 #include "../../Lib/Audio.hh"
 
-#include <algorithm>
-#include <QGraphicsPixmapItem>
-#include <QLabel>
-#include <QMessageBox>
-#include <QScrollArea>
-#include <QScrollBar>
-#include <QVBoxLayout>
-
 using namespace Vivy;
 
 #define MAXPIXVALUE 7 // Some magix AV magic stuff
diff --git a/src/UI/DocumentViews/AudioVisualizer.hh b/src/UI/DocumentViews/AudioVisualizer.hh
index 695f62098fcd5c3ce65bbd47b7030dd61482d341..47032201caaf6ef875e0555c8c46205542c44150 100644
--- a/src/UI/DocumentViews/AudioVisualizer.hh
+++ b/src/UI/DocumentViews/AudioVisualizer.hh
@@ -7,8 +7,6 @@
 
 #include "TimingView.hh"
 #include "../../Lib/Audio.hh"
-#include <QWidget>
-#include <QString>
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/MpvContainer.cc b/src/UI/DocumentViews/MpvContainer.cc
index e722e5b623a3cd24127c1afdf81dcbaa9de7d516..2f59fcc626b27b6b0e2296a2ad375f0b41b65a50 100644
--- a/src/UI/DocumentViews/MpvContainer.cc
+++ b/src/UI/DocumentViews/MpvContainer.cc
@@ -1,7 +1,5 @@
 #include "MpvContainer.hh"
 
-#include <mpv/client.h>
-
 using namespace Vivy;
 using namespace std::string_literals;
 
diff --git a/src/UI/DocumentViews/MpvContainer.hh b/src/UI/DocumentViews/MpvContainer.hh
index 05a3dc6b9f62e3e71d450ca37c29ff001cc5b77a..760d5e4a32c75fc5ef6ab4d04abe4033bd4cb184 100644
--- a/src/UI/DocumentViews/MpvContainer.hh
+++ b/src/UI/DocumentViews/MpvContainer.hh
@@ -6,10 +6,6 @@
 
 #include "../../Lib/Utils.hh"
 
-#include <functional>
-#include <initializer_list>
-#include <QThread>
-
 extern "C" {
 struct mpv_handle;
 struct mpv_event;
diff --git a/src/UI/DocumentViews/MpvControls.cc b/src/UI/DocumentViews/MpvControls.cc
index 696ea6bb716952f0202f79e9294a9415dbc401f3..931239ac66d8dd4ed04255ac40f46ca73699c50c 100644
--- a/src/UI/DocumentViews/MpvControls.cc
+++ b/src/UI/DocumentViews/MpvControls.cc
@@ -1,10 +1,6 @@
 #include "MpvControls.hh"
 #include "MpvContainer.hh"
 
-#include <QSlider>
-#include <QHBoxLayout>
-#include <QPushButton>
-
 using namespace Vivy;
 
 MpvControls::MpvControls(MpvContainer *passedContainer, QWidget *parent) noexcept
diff --git a/src/UI/DocumentViews/MpvControls.hh b/src/UI/DocumentViews/MpvControls.hh
index db00d5900753f8411c2c2f2896aab0d8458708dd..51b1e127450c31a2fd291c46db08b5663aa05f38 100644
--- a/src/UI/DocumentViews/MpvControls.hh
+++ b/src/UI/DocumentViews/MpvControls.hh
@@ -6,7 +6,6 @@
 
 #include "../../Lib/Utils.hh"
 #include "../../VivyApplication.hh"
-#include <QIcon>
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/TimingBar.cc b/src/UI/DocumentViews/TimingBar.cc
index 9353c174b4b778aff7fcc129f627b6863d69891a..ac5fed95ed31e9700ce3fbe69eeaded26d5c975f 100644
--- a/src/UI/DocumentViews/TimingBar.cc
+++ b/src/UI/DocumentViews/TimingBar.cc
@@ -1,15 +1,5 @@
 #include "TimingBar.hh"
 
-#include <QApplication>
-#include <QGraphicsSceneMouseEvent>
-#include <QLabel>
-#include <QMessageBox>
-#include <QMouseEvent>
-#include <QPen>
-#include <QScrollArea>
-#include <QScrollBar>
-#include <QVBoxLayout>
-
 using namespace Vivy;
 
 TimingBar::TimingBar(QLine line, QColor color) noexcept
diff --git a/src/UI/DocumentViews/TimingBar.hh b/src/UI/DocumentViews/TimingBar.hh
index f6fb18c60f965111de7ccda9924b23868b0b81f7..583ee164782b1f1909a2c8f23a6dde6454d625cd 100644
--- a/src/UI/DocumentViews/TimingBar.hh
+++ b/src/UI/DocumentViews/TimingBar.hh
@@ -1,13 +1,9 @@
-#ifndef VIVY_TIMING_BAR_H
-#define VIVY_TIMING_BAR_H
+#pragma once
 
 #ifndef __cplusplus
 #error "This is a C++ header"
 #endif
 
-#include <QGraphicsItem>
-#include <QGraphicsLineItem>
-
 namespace Vivy
 {
 class TimingBar final : public QGraphicsLineItem {
@@ -27,7 +23,4 @@ protected:
     void hoverLeaveEvent (QGraphicsSceneHoverEvent*) override;
     */
 };
-
 }
-
-#endif // VIVY_TIMING_BAR_H
diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh
index 02f20e90904772202d507760dbb6a119ab40ff00..cb81a141d1e83c61d7f24fab55e140e956c2eacb 100644
--- a/src/UI/DocumentViews/TimingScene.hh
+++ b/src/UI/DocumentViews/TimingScene.hh
@@ -1,17 +1,9 @@
-#ifndef VIVY_TIMING_SCENE_H
-#define VIVY_TIMING_SCENE_H
+#pragma once
 
 #include "../../Lib/Utils.hh"
 #include "../../Lib/Ass/Ass.hh"
 #include "TimingBar.hh"
 
-#include <QWidget>
-#include <QColor>
-#include <QVector>
-#include <QGraphicsView>
-#include <QGraphicsScene>
-#include <memory>
-
 namespace Vivy
 {
 class TimingScene final : public QGraphicsScene {
@@ -52,5 +44,3 @@ public slots:
 
 //Only if combinaisons of mode is allowed, it shouldn't be here
 //Q_DECLARE_OPERATORS_FOR_FLAGS(TimingScene::TimingModes)
-
-#endif // VIVY_TIMING_SCENE_H
diff --git a/src/UI/DocumentViews/TimingView.cc b/src/UI/DocumentViews/TimingView.cc
index a140ac56ef5e24214a63269cbeba76668e532d12..c5391b1611aff4110d1a73336206bf10c4f3a680 100644
--- a/src/UI/DocumentViews/TimingView.cc
+++ b/src/UI/DocumentViews/TimingView.cc
@@ -1,18 +1,5 @@
 #include "TimingView.hh"
 
-#include <QAbstractScrollArea>
-#include <QGraphicsLineItem>
-#include <QGraphicsPixmapItem>
-#include <QGraphicsView>
-#include <QLabel>
-#include <QMessageBox>
-#include <QMouseEvent>
-#include <QPainter>
-#include <QScrollArea>
-#include <QScrollBar>
-#include <QVBoxLayout>
-#include <QtGlobal>
-
 using namespace Vivy;
 
 TimingView::TimingView(QImage img, quint64 soundLength, QWidget *parent) noexcept
diff --git a/src/UI/DocumentViews/TimingView.hh b/src/UI/DocumentViews/TimingView.hh
index b1ef4895db082604d1052f4f6a1d7cf5b1f58edd..0d68b4fa9f09d3e3fe9a42b8c5364894153ad25b 100644
--- a/src/UI/DocumentViews/TimingView.hh
+++ b/src/UI/DocumentViews/TimingView.hh
@@ -1,5 +1,4 @@
-#ifndef VIVY_TIMING_VIEW_H
-#define VIVY_TIMING_VIEW_H
+#pragma once
 
 #ifndef __cplusplus
 #error "This is a C++ header"
@@ -9,11 +8,6 @@
 #include "TimingBar.hh"
 #include "TimingScene.hh"
 
-#include <QWidget>
-#include <QColor>
-#include <QVector>
-#include <QGraphicsView>
-
 namespace Vivy
 {
 class TimingView final : public QGraphicsView {
@@ -37,7 +31,4 @@ public slots:
     void mousePressEvent(QMouseEvent *event) noexcept override;
     void moveScrollBarToBottom(int, int) noexcept;
 };
-
 }
-
-#endif // VIVY_TIMING_VIEW_H
diff --git a/src/UI/DocumentViews/VideoView.cc b/src/UI/DocumentViews/VideoView.cc
index bc73922e714944733f788251d866f26441bba4e0..30eee0e0863deaac58c2187232336f20395939a0 100644
--- a/src/UI/DocumentViews/VideoView.cc
+++ b/src/UI/DocumentViews/VideoView.cc
@@ -2,8 +2,6 @@
 #include "MpvContainer.hh"
 #include "MpvControls.hh"
 
-#include <QVBoxLayout>
-
 using namespace Vivy;
 
 VideoView::VideoView(QWidget *parent) noexcept
diff --git a/src/UI/FakeVim/FakeVimActions.cc b/src/UI/FakeVim/FakeVimActions.cc
index 2f3f7670daea1b3debb31f6ffac50cb977ed3f76..7042af0745e7a304c5e9534e61439ffce665f387 100644
--- a/src/UI/FakeVim/FakeVimActions.cc
+++ b/src/UI/FakeVim/FakeVimActions.cc
@@ -2,7 +2,6 @@
 #include "FakeVimHandler.hh"
 
 #include "../../Lib/Utils.hh"
-#include <QDebug>
 
 namespace FakeVim::Internal
 {
diff --git a/src/UI/FakeVim/FakeVimActions.hh b/src/UI/FakeVim/FakeVimActions.hh
index ae872e4afb5a314c77ea19c2d008faa02809f1b6..13895c395ead827054ff3c7dc76ea6ceb4f8b7c8 100644
--- a/src/UI/FakeVim/FakeVimActions.hh
+++ b/src/UI/FakeVim/FakeVimActions.hh
@@ -2,12 +2,6 @@
 
 #define FAKEVIM_STANDALONE
 
-#include <QCoreApplication>
-#include <QHash>
-#include <QObject>
-#include <QString>
-#include <QVariant>
-
 namespace FakeVim::Internal
 {
 class FvBaseAspect {
diff --git a/src/UI/FakeVim/FakeVimHandler.cc b/src/UI/FakeVim/FakeVimHandler.cc
index 153b5a53ddf3c9ba9695da5e4da3c554f133e930..3d455d8b3b63e5900169c59ab00a53fd737fdb12 100644
--- a/src/UI/FakeVim/FakeVimHandler.cc
+++ b/src/UI/FakeVim/FakeVimHandler.cc
@@ -33,36 +33,6 @@
 #include "FakeVimTr.hh"
 #include "../../Lib/Utils.hh"
 
-#include <QDebug>
-#include <QFile>
-#include <QObject>
-#include <QPointer>
-#include <QProcess>
-#include <QRegularExpression>
-#include <QTextStream>
-#include <QTimer>
-#include <QStack>
-
-#include <QApplication>
-#include <QClipboard>
-#include <QInputMethodEvent>
-#include <QKeyEvent>
-#include <QLineEdit>
-#include <QPlainTextEdit>
-#include <QScrollBar>
-#include <QTextBlock>
-#include <QTextCursor>
-#include <QTextDocumentFragment>
-#include <QTextEdit>
-#include <QMimeData>
-#include <QSharedPointer>
-#include <QDir>
-
-#include <algorithm>
-#include <climits>
-#include <ctype.h>
-#include <functional>
-
 //#define DEBUG_KEY  1
 #if defined(DEBUG_KEY) && DEBUG_KEY
 #define KEY_DEBUG(s) qDebug() << s
diff --git a/src/UI/FakeVim/FakeVimHandler.hh b/src/UI/FakeVim/FakeVimHandler.hh
index 1894680b7715fd951180df9af6772252b5b89b01..a84a97ee71e5033f7976aec554c2f929d7d9a209 100644
--- a/src/UI/FakeVim/FakeVimHandler.hh
+++ b/src/UI/FakeVim/FakeVimHandler.hh
@@ -2,12 +2,6 @@
 
 #define FAKEVIM_STANDALONE
 
-#include <QObject>
-#include <QTextEdit>
-
-#include <functional>
-#include <vector>
-
 namespace FakeVim::Internal
 {
 enum RangeMode {
diff --git a/src/UI/FakeVim/FakeVimTr.hh b/src/UI/FakeVim/FakeVimTr.hh
index b298d4f77421612544e68be9f83d66aca95fed24..d2cf884ba9c40e54daabeb5f603100fa59bbf450 100644
--- a/src/UI/FakeVim/FakeVimTr.hh
+++ b/src/UI/FakeVim/FakeVimTr.hh
@@ -1,7 +1,5 @@
 #pragma once
 
-#include <QCoreApplication>
-
 namespace FakeVim
 {
 struct Tr {
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 7194b30f110d0dd690b7851611bcda70dd3d4e69..f4f1d71f9f9191f72185b1c243d31d7f05ea97f0 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -6,27 +6,6 @@
 #include "../Lib/Utils.hh"
 #include "../VivyApplication.hh"
 
-#include <mutex>
-#include <algorithm>
-#include <functional>
-#include <QWindow>
-#include <optional>
-#include <QTreeView>
-#include <QPushButton>
-#include <QDialogButtonBox>
-#include <QFileInfo>
-#include <QStandardPaths>
-#include <QPixmap>
-#include <QVBoxLayout>
-#include <QMessageBox>
-#include <QFileDialog>
-#include <QStatusBar>
-#include <QMenuBar>
-#include <QImage>
-#include <QToolBar>
-#include <QTabWidget>
-#include <QEventLoop>
-
 #define DCL_MENU(menu, name) [[maybe_unused]] QMenu *menu##Menu = menuBar()->addMenu(name);
 
 #define DCL_ACTION(method, name, tip, menu)                              \
diff --git a/src/UI/PropertyModel.cc b/src/UI/PropertyModel.cc
index cadec56e0d0749326d54d0de2bceda71d3005297..568c06ace13fc4d5528e4e516d1b11d46bcd6cde 100644
--- a/src/UI/PropertyModel.cc
+++ b/src/UI/PropertyModel.cc
@@ -1,5 +1,4 @@
 #include "PropertyModel.hh"
-#include <QDebug>
 
 using namespace Vivy;
 
diff --git a/src/UI/PropertyModel.hh b/src/UI/PropertyModel.hh
index d22ab6eccb28c96e34f3e00419b66a519d12f3b8..3053d7de3d605d85232e1d26fbc109010fa206c1 100644
--- a/src/UI/PropertyModel.hh
+++ b/src/UI/PropertyModel.hh
@@ -1,14 +1,7 @@
-#ifndef VIVY_UI_PROPERTY_VIEW_H
-#define VIVY_UI_PROPERTY_VIEW_H
+#pragma once
 
 #include "../Lib/Utils.hh"
 
-#include <QAbstractItemModel>
-#include <QJsonDocument>
-#include <QJsonValue>
-#include <QJsonArray>
-#include <QJsonObject>
-
 //  auto model          = new PropertyModel(doc);
 //  QVBoxLayout *layout = new QVBoxLayout(this);
 //  QTreeView *view     = new QTreeView(this);
@@ -94,7 +87,4 @@ private:
     std::unique_ptr<Item> root{ nullptr };
     QStringList headers{};
 };
-
 }
-
-#endif // VIVY_UI_PROPERTY_VIEW_H
diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc
index d5ab150768286c10469ba9ff14bca3642c2911d5..b05c137d8e37f7ed26d9f66eb193d9f62a4eec3f 100644
--- a/src/UI/ScriptDocumentView.cc
+++ b/src/UI/ScriptDocumentView.cc
@@ -3,9 +3,6 @@
 #include "ScriptViews/ScriptHighlighter.hh"
 #include "../VivyApplication.hh"
 
-#include <QRegExp>
-#include <QVBoxLayout>
-
 using namespace Vivy;
 
 ScriptDocumentView::ScriptDocumentView(std::shared_ptr<ScriptDocument> ptr, QWidget *parent)
diff --git a/src/UI/ScriptViews/EditorProxy.cc b/src/UI/ScriptViews/EditorProxy.cc
index 16845293ca0bb5e1e2a9f40be4d2f82a4e6f699c..cff3cbd913c2ed04071fd60e8846a6032ea2d4a8 100644
--- a/src/UI/ScriptViews/EditorProxy.cc
+++ b/src/UI/ScriptViews/EditorProxy.cc
@@ -3,11 +3,6 @@
 #include "../FakeVim/FakeVimActions.hh"
 #include "../../VivyApplication.hh"
 
-#include <QMessageBox>
-#include <QStatusBar>
-#include <QMainWindow>
-#include <QTemporaryFile>
-
 using namespace Vivy;
 
 Vivy::EditorProxy *
diff --git a/src/UI/ScriptViews/EditorProxy.hh b/src/UI/ScriptViews/EditorProxy.hh
index 1c2e4bdadf2ca56f044915d10f43d2928b8518d1..c93a3823f753320f5521b446ddcb309bc5090d39 100644
--- a/src/UI/ScriptViews/EditorProxy.hh
+++ b/src/UI/ScriptViews/EditorProxy.hh
@@ -1,7 +1,5 @@
 #pragma once
 
-#include <QObject>
-#include <QTextEdit>
 #include "ScriptEditor.hh"
 
 class QMainWindow;
diff --git a/src/UI/ScriptViews/ScriptEditor.cc b/src/UI/ScriptViews/ScriptEditor.cc
index 56dff1a6c6a6e6483c44437f4e49c8dcba29efcd..80b88fcfdfaaa8bf24a6107c32b5413f92661bcd 100644
--- a/src/UI/ScriptViews/ScriptEditor.cc
+++ b/src/UI/ScriptViews/ScriptEditor.cc
@@ -1,11 +1,6 @@
 #include "ScriptEditor.hh"
 #include "ScriptHighlighter.hh"
 
-#include <QTextCursor>
-#include <QBrush>
-#include <QKeyEvent>
-#include <QFrame>
-
 using namespace Vivy;
 
 ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor) noexcept
diff --git a/src/UI/ScriptViews/ScriptEditor.hh b/src/UI/ScriptViews/ScriptEditor.hh
index 491a427d8bf9b76636764bb20701488724604d67..5a68ef9c71bdd6afe31211179ae7c28dbeed5c8c 100644
--- a/src/UI/ScriptViews/ScriptEditor.hh
+++ b/src/UI/ScriptViews/ScriptEditor.hh
@@ -4,7 +4,6 @@
 #error "This is a C++ header"
 #endif
 
-#include <QPlainTextEdit>
 #include "../../Lib/Utils.hh"
 
 namespace Vivy
diff --git a/src/UI/ScriptViews/ScriptHighlighter.cc b/src/UI/ScriptViews/ScriptHighlighter.cc
index 85ea10a8ce763a8bc918fb5928cbbf574f77bda3..564ea25aeff23b5ced99fe4603faabeac3c423ec 100644
--- a/src/UI/ScriptViews/ScriptHighlighter.cc
+++ b/src/UI/ScriptViews/ScriptHighlighter.cc
@@ -1,8 +1,6 @@
 #include "ScriptHighlighter.hh"
 #include "../../Lib/Utils.hh"
 
-#include <QTextDocument>
-
 using namespace Vivy;
 
 ScriptHighlighter::HighlightingRule::HighlightingRule(QRegExp pttrn, QTextCharFormat frmt)
diff --git a/src/UI/ScriptViews/ScriptHighlighter.hh b/src/UI/ScriptViews/ScriptHighlighter.hh
index 752c8023455608d13e6177704274d5f9ffd73617..492259dad9adc6795952277f02b958396fccc425 100644
--- a/src/UI/ScriptViews/ScriptHighlighter.hh
+++ b/src/UI/ScriptViews/ScriptHighlighter.hh
@@ -4,10 +4,6 @@
 #error "This is a C++ header"
 #endif
 
-#include <QSyntaxHighlighter>
-#include <QTextCharFormat>
-#include <QBrush>
-
 class QTextDocument;
 
 namespace Vivy
diff --git a/src/UI/Utils.cc b/src/UI/Utils.cc
index 95f9269d01b74fab6579a1a68ae28878cea2c62d..940f65e7e41b7e667c4f21485dfe566610c02646 100644
--- a/src/UI/Utils.cc
+++ b/src/UI/Utils.cc
@@ -1,5 +1,4 @@
 #include "Utils.hh"
-#include <QWidget>
 
 using namespace Vivy;
 
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 3693fec2770ec6d786789070ed158bb6cd17754a..289a319c282f0876004563223dc1e65b99ef1731 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -8,13 +8,6 @@
 #include "../VivyApplication.hh"
 #include "../Lib/Document/VivyDocument.hh"
 
-#include <QHeaderView>
-#include <QTreeView>
-#include <QVBoxLayout>
-#include <QTableView>
-#include <QWidget>
-#include <QDockWidget>
-
 using namespace Vivy;
 
 VivyDocumentView::VivyDocumentView(std::shared_ptr<VivyDocument> doc, QWidget *parent) noexcept
diff --git a/src/UI/VivyFileIconProvider.hh b/src/UI/VivyFileIconProvider.hh
index c042aefc963790af8ac2e8f913c16450a80f4416..d219b799ff9ce4677c226021d6c9179cbd8a07a5 100644
--- a/src/UI/VivyFileIconProvider.hh
+++ b/src/UI/VivyFileIconProvider.hh
@@ -6,10 +6,6 @@
 
 #include "../Lib/Utils.hh"
 #include "../VivyApplication.hh"
-#include <QtGlobal>
-#include <QFileIconProvider>
-#include <QFileInfo>
-#include <QIcon>
 
 namespace Vivy
 {
diff --git a/src/VivyApplication.cc b/src/VivyApplication.cc
index 7bf1e08b4cc42f28e06570d9f5f3407eb5a50a7e..efb10c01c29927a412fa85c03a65975524f00250 100644
--- a/src/VivyApplication.cc
+++ b/src/VivyApplication.cc
@@ -1,12 +1,6 @@
 #include "VivyApplication.hh"
 #include "UI/MainWindow.hh"
 
-#include <QtGlobal>
-#include <QIcon>
-#include <QFontDatabase>
-#include <locale>
-#include <QTextCodec>
-
 using namespace Vivy;
 
 VivyApplication::VivyApplication(int &argc, char **argv)
diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh
index 2f37a5d52570be4bfe09b7f07175cd6a59d71cc4..0bfa830a8a20267695db7d08faf19f7ed076da55 100644
--- a/src/VivyApplication.hh
+++ b/src/VivyApplication.hh
@@ -24,13 +24,12 @@
 #define VIVY_ICON_PAUSE   ":icons/dark/media-pause.svg"
 #define VIVY_ICON_STOP    ":icons/dark/media-stop.svg"
 
-#include "Lib/Script/ScriptStore.hh"
-
 // Detect MacOS
 #if defined(Q_OS_DARWIN) || defined(Q_OS_MACOS)
 #define VIVY_MACOS
 #endif
 
+#include "Lib/Script/ScriptStore.hh"
 #include "Lib/Document/VivyDocumentStore.hh"
 #include "UI/MainWindow.hh"