diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5cafdd3d98d9821e93314747d34a2e18d4381168..c4eea5e730a3c3e513ffb1c83159008aa2318dab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,7 +80,7 @@ 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_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
 target_precompile_headers(Vivy PRIVATE ${Vivy_PRECOMPILED_INC})
 
 # Set Vivy's needed C++ features
diff --git a/src/Lib/AbstractDocument.cc b/src/Lib/AbstractDocument.cc
index def32ead006169ef84f7ac23979d74f1f77598c3..950f87e59e9a78eb87f02ae666e64f4e1e78f3e2 100644
--- a/src/Lib/AbstractDocument.cc
+++ b/src/Lib/AbstractDocument.cc
@@ -1,4 +1,5 @@
-#include "AbstractDocument.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/AbstractDocument.hh"
 
 bool
 operator==(const Vivy::AbstractDocument &a, const Vivy::AbstractDocument &b) noexcept
diff --git a/src/Lib/AbstractDocument.hh b/src/Lib/AbstractDocument.hh
index c39fb5661a9cdcc3bd841950fe18c011f9214972..6731edddcabcf5ba7cdfd31c138ae1f55da16810 100644
--- a/src/Lib/AbstractDocument.hh
+++ b/src/Lib/AbstractDocument.hh
@@ -4,10 +4,11 @@
 #error "This is a C++ header"
 #endif
 
-#include "../VivyApplication.hh"
-#include "Utils.hh"
-#include "Uuid.hh"
-#include "Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Uuid.hh"
+#include "Lib/Log.hh"
 
 namespace Vivy
 {
diff --git a/src/Lib/AbstractMediaContext.hh b/src/Lib/AbstractMediaContext.hh
index a15609de50345b89f238deae99cbb8722de14456..07e7fb40cb192d15436d9bcae4ef6329e6649819 100644
--- a/src/Lib/AbstractMediaContext.hh
+++ b/src/Lib/AbstractMediaContext.hh
@@ -12,9 +12,10 @@ extern "C" {
 #include <libavcodec/avfft.h>
 }
 
-#include "../VivyApplication.hh"
-#include "Utils.hh"
-#include "Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
 
 namespace Vivy
 {
diff --git a/src/Lib/Ass/Ass.hh b/src/Lib/Ass/Ass.hh
index d7081d6a3d9afc747c36a78539c847d1a274ecd0..051ea06210ba9691ee322f0035ae4d862353f5f6 100644
--- a/src/Lib/Ass/Ass.hh
+++ b/src/Lib/Ass/Ass.hh
@@ -1,11 +1,11 @@
 #ifndef VIVY_ASS_ASS_H
 #define VIVY_ASS_ASS_H
 
-#include "Line.hh"
-#include "Syl.hh"
-#include "Style.hh"
-#include "AssPrivate.hh"
-#include "AssFactory.hh"
-#include "StyleProperties.hh"
+#include "Lib/Ass/Line.hh"
+#include "Lib/Ass/Syl.hh"
+#include "Lib/Ass/Style.hh"
+#include "Lib/Ass/AssPrivate.hh"
+#include "Lib/Ass/AssFactory.hh"
+#include "Lib/Ass/StyleProperties.hh"
 
 #endif // VIVY_ASS_ASS_H
diff --git a/src/Lib/Ass/AssFactory.cc b/src/Lib/Ass/AssFactory.cc
index 93f8a92dddfeaee1929db77d0ca3b74dcf58dab2..aa56e403dfbf6b46bd1296ecb45f4344e4998341 100644
--- a/src/Lib/Ass/AssFactory.cc
+++ b/src/Lib/Ass/AssFactory.cc
@@ -1,4 +1,5 @@
-#include "AssFactory.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/AssFactory.hh"
 
 using namespace Vivy::Ass;
 
diff --git a/src/Lib/Ass/AssFactory.hh b/src/Lib/Ass/AssFactory.hh
index 98c8f3fea31fd3513f238b77c181f61f69b9e0e1..d8f753f5d97665144c53294aa21c3d4d9943a63f 100644
--- a/src/Lib/Ass/AssFactory.hh
+++ b/src/Lib/Ass/AssFactory.hh
@@ -1,11 +1,11 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../Log.hh"
-#include "../Utils.hh"
-#include "Style.hh"
-#include "Line.hh"
-#include "AssPrivate.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Ass/Style.hh"
+#include "Lib/Ass/Line.hh"
+#include "Lib/Ass/AssPrivate.hh"
 
 // An ASS file is basically an INI file, but some keys are present multiple
 // times (V4+ Styles/Style, Events/Dialogue, Events/Comment).
diff --git a/src/Lib/Ass/AssPrivate.hh b/src/Lib/Ass/AssPrivate.hh
index 39d931a99d8c92c1d0d83d0d44de97cdaed20e38..b25192cfe7b50b2ea8b584ff33fd0699db02fed3 100644
--- a/src/Lib/Ass/AssPrivate.hh
+++ b/src/Lib/Ass/AssPrivate.hh
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "PreCompiledHeaders.hh"
+
 namespace Vivy::Ass
 {
 class Style;
diff --git a/src/Lib/Ass/Line.cc b/src/Lib/Ass/Line.cc
index 046e313168aeaaf52a917bafc7e0a00d0f7ea718..91f8601c2a21c697abf4b3eba71320c6092e8e89 100644
--- a/src/Lib/Ass/Line.cc
+++ b/src/Lib/Ass/Line.cc
@@ -1,5 +1,6 @@
-#include "Line.hh"
-#include "AssFactory.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/Line.hh"
+#include "Lib/Ass/AssFactory.hh"
 
 using namespace Vivy::Ass;
 
diff --git a/src/Lib/Ass/Line.hh b/src/Lib/Ass/Line.hh
index 11f91de64ed4c0c204b096080b16ec453f97eb63..9f3c4141836c93cb68b920ea481f84b5b4709734 100644
--- a/src/Lib/Ass/Line.hh
+++ b/src/Lib/Ass/Line.hh
@@ -1,10 +1,11 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../Log.hh"
-#include "Syl.hh"
-#include "StyleProperties.hh"
-#include "Style.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Ass/Syl.hh"
+#include "Lib/Ass/StyleProperties.hh"
+#include "Lib/Ass/Style.hh"
 
 namespace Vivy::Ass
 {
diff --git a/src/Lib/Ass/Style.cc b/src/Lib/Ass/Style.cc
index 2f80c9d1db58c37be84001ba4bd3ca5b3b1072ed..0a78af9537991cd7d4f8d123ea79b3034967bcc8 100644
--- a/src/Lib/Ass/Style.cc
+++ b/src/Lib/Ass/Style.cc
@@ -1,5 +1,6 @@
-#include "Style.hh"
-#include "../Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/Style.hh"
+#include "Lib/Utils.hh"
 
 using namespace Vivy::Ass;
 
diff --git a/src/Lib/Ass/Style.hh b/src/Lib/Ass/Style.hh
index c6c5f10b91924355bb23f33039a1a34b278a2e2d..6712368c054861e3f03368a3f27c4002f7166da6 100644
--- a/src/Lib/Ass/Style.hh
+++ b/src/Lib/Ass/Style.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../Log.hh"
-#include "AssPrivate.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Ass/AssPrivate.hh"
 
 namespace Vivy::Ass
 {
diff --git a/src/Lib/Ass/StyleProperties.hh b/src/Lib/Ass/StyleProperties.hh
index a72acf98782c66af25a4c8f960e81e1fd6022b05..eb7c04cdeaa10b215ef46a95a80ebe119ebcf5f0 100644
--- a/src/Lib/Ass/StyleProperties.hh
+++ b/src/Lib/Ass/StyleProperties.hh
@@ -1,5 +1,7 @@
 #pragma once
-#include "Style.hh"
+
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/Style.hh"
 
 namespace Vivy::Ass
 {
diff --git a/src/Lib/Ass/Syl.cc b/src/Lib/Ass/Syl.cc
index 65d29a85cd80ce92f5a259edfed905f59f6440f1..20dc0ce44154185c31113789a598a9eb042da43c 100644
--- a/src/Lib/Ass/Syl.cc
+++ b/src/Lib/Ass/Syl.cc
@@ -1,5 +1,6 @@
-#include "Syl.hh"
-#include "Line.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/Syl.hh"
+#include "Lib/Ass/Line.hh"
 
 using namespace Vivy::Ass;
 
diff --git a/src/Lib/Ass/Syl.hh b/src/Lib/Ass/Syl.hh
index 461746e90d6f8acf4027ddab62a3fcedf58bdb40..0684b8ccc34ba0c274dab61561c760862b782a59 100644
--- a/src/Lib/Ass/Syl.hh
+++ b/src/Lib/Ass/Syl.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "StyleProperties.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Ass/StyleProperties.hh"
 
 namespace Vivy::Ass
 {
diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc
index fdf79c0fc29e9d58165d701c452447412f6b9655..290af8355b77c1e6fded3919c41e86b5a400ec9e 100644
--- a/src/Lib/Audio.cc
+++ b/src/Lib/Audio.cc
@@ -1,3 +1,4 @@
+#include "../PreCompiledHeaders.hh"
 #include "Audio.hh"
 
 using namespace Vivy;
diff --git a/src/Lib/Audio.hh b/src/Lib/Audio.hh
index 920b1033228943d2ffc2a63c435682e06a7883fe..0c478c67857f5cdc1378cec74ace08f4ad43fdec 100644
--- a/src/Lib/Audio.hh
+++ b/src/Lib/Audio.hh
@@ -4,7 +4,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "AbstractMediaContext.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/AbstractMediaContext.hh"
 
 namespace Vivy
 {
diff --git a/src/Lib/CRTPStore.hh b/src/Lib/CRTPStore.hh
index 2aa6da2c7bcb34ae8ed039058049d944b82bf4cf..da2d28d63620f7d8494e2859d58eb17e49a4227d 100644
--- a/src/Lib/CRTPStore.hh
+++ b/src/Lib/CRTPStore.hh
@@ -4,10 +4,11 @@
 #error "This is a C++ header"
 #endif
 
-#include "../VivyApplication.hh"
-#include "Log.hh"
-#include "Utils.hh"
-#include "Uuid.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Uuid.hh"
 
 #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 7100a19ab30c7275d4cae86535dc0cd5c9f5c8c0..3a3cf80b42b9878b34516df7e8e1137f3c6bc0da 100644
--- a/src/Lib/Document/CRTPSubDocument.hh
+++ b/src/Lib/Document/CRTPSubDocument.hh
@@ -4,12 +4,13 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../VivyApplication.hh"
-#include "../Log.hh"
-#include "../Utils.hh"
-#include "../Audio.hh"
-#include "../Video.hh"
-#include "../Ass/Ass.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Audio.hh"
+#include "Lib/Video.hh"
+#include "Lib/Ass/Ass.hh"
 
 #define VIVY_ENABLE_IF_TYPE(Type) \
     template <typename = typename std::enable_if<!std::is_same<Type, void>::value>>
diff --git a/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc b/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
index b465093754d4fa0cf412182ce733eb34bdc1ff10..96fc6dbea03b14b0b69285ea007bb3a4a1a78db4 100644
--- a/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/AssSubDocument.cc
@@ -1,5 +1,6 @@
-#include "../CRTPSubDocument.hh"
-#include "../../JsonBuilder.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document//CRTPSubDocument.hh"
+#include "Lib/JsonBuilder.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc b/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
index d10fb949520f043cfd3d489f3127ddf23f4229fe..201ce0942032d496a0d17b08796b1afaf6834911 100644
--- a/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/AudioSubDocument.cc
@@ -1,5 +1,6 @@
-#include "../CRTPSubDocument.hh"
-#include "../../JsonBuilder.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/CRTPSubDocument.hh"
+#include "Lib/JsonBuilder.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc b/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
index 516bb8c1bac9e2b2d4cdacb828ae707e68c43b9e..09a5a44ab66c9dae55aac9a171667fd8b9f5f6e8 100644
--- a/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
+++ b/src/Lib/Document/CRTPSubDocument/VideoSubDocument.cc
@@ -1,5 +1,6 @@
-#include "../CRTPSubDocument.hh"
-#include "../../JsonBuilder.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/CRTPSubDocument.hh"
+#include "Lib/JsonBuilder.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc
index 6cff0405c0ea45aa91b05ce900c7660d150acbbc..39a0a2ae7a6f5c6e0051370cea48a9ba607cc365 100644
--- a/src/Lib/Document/VivyDocument.cc
+++ b/src/Lib/Document/VivyDocument.cc
@@ -1,6 +1,7 @@
-#include "VivyDocument.hh"
-#include "../Utils.hh"
-#include "../JsonBuilder.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "Lib/Utils.hh"
+#include "Lib/JsonBuilder.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Document/VivyDocument.hh b/src/Lib/Document/VivyDocument.hh
index b1476d7ca29f272adcd8807a804da9f9e6e00501..35f2f57bc07c13b5741a6ed2c5bda50e37daf621 100644
--- a/src/Lib/Document/VivyDocument.hh
+++ b/src/Lib/Document/VivyDocument.hh
@@ -5,10 +5,11 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Utils.hh"
-#include "../AbstractDocument.hh"
-#include "../Uuid.hh"
-#include "CRTPSubDocument.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
+#include "Lib/AbstractDocument.hh"
+#include "Lib/Uuid.hh"
+#include "Lib/Document/CRTPSubDocument.hh"
 
 #define DCL_VIVY_SAVE_KEY(name) static const inline QString Key##name = QStringLiteral(#name);
 
diff --git a/src/Lib/Document/VivyDocumentStore.cc b/src/Lib/Document/VivyDocumentStore.cc
index ebd9a000d18dc7ad68c188be50c861a04ea451ec..ebb320ccb1cbad2eb26f432778e82742101b7c5d 100644
--- a/src/Lib/Document/VivyDocumentStore.cc
+++ b/src/Lib/Document/VivyDocumentStore.cc
@@ -1,5 +1,6 @@
-#include "VivyDocumentStore.hh"
-#include "VivyDocument.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
+#include "Lib/Document/VivyDocument.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Document/VivyDocumentStore.hh b/src/Lib/Document/VivyDocumentStore.hh
index c2ac6b8e729a8befca9c085aeac25af81141a42b..a715d35a0634417ecbd20c9e745cb461b19e2787 100644
--- a/src/Lib/Document/VivyDocumentStore.hh
+++ b/src/Lib/Document/VivyDocumentStore.hh
@@ -4,9 +4,10 @@
 #error "This is a C++ header"
 #endif
 
-#include "VivyDocument.hh"
-#include "../Utils.hh"
-#include "../CRTPStore.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "Lib/Utils.hh"
+#include "Lib/CRTPStore.hh"
 
 namespace Vivy
 {
diff --git a/src/Lib/HostOsInfo.cc b/src/Lib/HostOsInfo.cc
index b6628feaf875fd22881c405140a72662fe10bb9f..83e31c32916e98300e8038a2ee1af416adc8967a 100644
--- a/src/Lib/HostOsInfo.cc
+++ b/src/Lib/HostOsInfo.cc
@@ -1,4 +1,5 @@
-#include "HostOsInfo.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/HostOsInfo.hh"
 
 #if !defined(QT_NO_OPENGL) && defined(QT_GUI_LIB)
 #define VIVY_OPENGL 1
diff --git a/src/Lib/HostOsInfo.hh b/src/Lib/HostOsInfo.hh
index af00e94b2d361aba557445eab4835236b5a45cdb..65505d2e602aa6d209d5e6c74d5e1e739657151e 100644
--- a/src/Lib/HostOsInfo.hh
+++ b/src/Lib/HostOsInfo.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 #ifdef Q_OS_WIN
 #define VIVY_HOST_EXE_SUFFIX VIVY_WIN_EXE_SUFFIX
diff --git a/src/Lib/JsonBuilder.cc b/src/Lib/JsonBuilder.cc
index 105445ea825b94a0a6abac131139ea2621f38ffa..f8135518e74121597a85140ada8ac1c0198b4953 100644
--- a/src/Lib/JsonBuilder.cc
+++ b/src/Lib/JsonBuilder.cc
@@ -1,4 +1,5 @@
-#include "JsonBuilder.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/JsonBuilder.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/JsonBuilder.hh b/src/Lib/JsonBuilder.hh
index 4534b46381f19e29a24b084c3771c32b46f13adf..6afa29365c3bb9ac6b5e33d33bd371ecb1078d90 100644
--- a/src/Lib/JsonBuilder.hh
+++ b/src/Lib/JsonBuilder.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/Lib/Log.cc b/src/Lib/Log.cc
index 245a8df13a5bab15490a249bc809fc041333b0e5..4cede87db6a84c071f4dc94cf543c05c55015909 100644
--- a/src/Lib/Log.cc
+++ b/src/Lib/Log.cc
@@ -1,4 +1,5 @@
-#include "Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Log.hh"
 
 // Vivy::LogLevel utility implementation
 namespace Vivy
diff --git a/src/Lib/Log.hh b/src/Lib/Log.hh
index 428fb35879cc48849da4d9cd91cea82fcd0e3b60..f81054e98b1d60c3038e7f29e49397d295394eb4 100644
--- a/src/Lib/Log.hh
+++ b/src/Lib/Log.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 // Create a logger with a category
 #define VIVY_GET_LOGGER(sink, cat)                (sink)->newLogger(std::string_view{ #cat })
diff --git a/src/Lib/Script/CRTPLuaScriptObject.hh b/src/Lib/Script/CRTPLuaScriptObject.hh
index d90a5fb8f23ff84cc4491fbbad992de95d7b5945..ac2f37398f921229387520388c245290514c12a2 100644
--- a/src/Lib/Script/CRTPLuaScriptObject.hh
+++ b/src/Lib/Script/CRTPLuaScriptObject.hh
@@ -1,9 +1,10 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Log.hh"
-#include "LuaContext.hh"
-#include "ScriptOption.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Script/LuaContext.hh"
+#include "Lib/Script/ScriptOption.hh"
 
 #include "lua.hpp"
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc b/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
index 36c9cee70d84ed5ad0de6ccae9d6c000d0358bfe..26ab5865e035f8b3aa235a9d3fbe5dae32be9f0b 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/FreeFunctions.cc
@@ -1,10 +1,11 @@
-#include "../CRTPLuaScriptObject.hh"
-#include "../LuaContext.hh"
-#include "../../Document/CRTPSubDocument.hh"
-#include "../../Document/VivyDocument.hh"
-#include "../../Audio.hh"
-#include "../../Video.hh"
-#include "../../../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
+#include "Lib/Script/LuaContext.hh"
+#include "Lib/Document/CRTPSubDocument.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "Lib/Audio.hh"
+#include "Lib/Video.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
index e773a13fc394db4ac8afbb0f238dcc2964dadee4..c55679ca299d4d488fb711ef45e6f8dbbcd97b98 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/FunctionDeclaration.cc
@@ -1,4 +1,5 @@
-#include "../CRTPLuaScriptObject.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
index c3761f3acc2e0b0484bcb25a55cd7f7dda24d885..008dfc4370339e63d44decbf3bc4f0b8e9464b71 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/JobDeclaration.cc
@@ -1,4 +1,5 @@
-#include "../CRTPLuaScriptObject.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
index 5de28117202757c0e20870b0a2204d6987b20308..dc18aef9f83ee1dcef99104b736158350e100634 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/ModuleDeclaration.cc
@@ -1,4 +1,5 @@
-#include "../CRTPLuaScriptObject.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc b/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
index 3efa0998034804d90a5bd21946f7788ce7b2aaac..c0881e139a18a53f6c50ac4beb952b9047be4cf2 100644
--- a/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject/OptionDeclaration.cc
@@ -1,4 +1,5 @@
-#include "../CRTPLuaScriptObject.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
 
 using namespace Vivy::Script;
 
diff --git a/src/Lib/Script/LuaContext.cc b/src/Lib/Script/LuaContext.cc
index 52c00dd7d2ded0365192014bbc7feea9c9fd518c..de8ab602343520fa2dc641cd1aaa89765528a165 100644
--- a/src/Lib/Script/LuaContext.cc
+++ b/src/Lib/Script/LuaContext.cc
@@ -1,7 +1,8 @@
-#include "CRTPLuaScriptObject.hh"
-#include "ScriptDocument.hh"
-#include "LuaContext.hh"
-#include "../Document/VivyDocument.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/CRTPLuaScriptObject.hh"
+#include "Lib/Script/ScriptDocument.hh"
+#include "Lib/Script/LuaContext.hh"
+#include "Lib/Document/VivyDocument.hh"
 
 // LuaContext implementation
 using namespace Vivy::Script;
diff --git a/src/Lib/Script/LuaContext.hh b/src/Lib/Script/LuaContext.hh
index 318751abaeb7ad0e7cbf53616a20b7aad56a8a0b..ba1b30d0c4115f98117c7bd0bf41e19e12752616 100644
--- a/src/Lib/Script/LuaContext.hh
+++ b/src/Lib/Script/LuaContext.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../Log.hh"
-#include "../Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
 
 struct lua_State;
 
diff --git a/src/Lib/Script/ScriptDocument.cc b/src/Lib/Script/ScriptDocument.cc
index 6294656caf585053e565d7926239742f00dd9926..4aa46d0ee530d8932897928834bddd5391f567f5 100644
--- a/src/Lib/Script/ScriptDocument.cc
+++ b/src/Lib/Script/ScriptDocument.cc
@@ -1,4 +1,5 @@
-#include "ScriptDocument.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/ScriptDocument.hh"
 
 #include <QFileInfo>
 #include <QFile>
diff --git a/src/Lib/Script/ScriptDocument.hh b/src/Lib/Script/ScriptDocument.hh
index 3799669c62b2b804c16ab65fe8f952b9cbb5eb35..7d13e12984c11f788d72d932925dca616bd66e78 100644
--- a/src/Lib/Script/ScriptDocument.hh
+++ b/src/Lib/Script/ScriptDocument.hh
@@ -4,8 +4,9 @@
 #error "This is a C++ header"
 #endif
 
-#include "../AbstractDocument.hh"
-#include "../Uuid.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/AbstractDocument.hh"
+#include "Lib/Uuid.hh"
 
 class QTextDocument;
 
diff --git a/src/Lib/Script/ScriptOption.cc b/src/Lib/Script/ScriptOption.cc
index 2876d2fc18a14cf3e8560cfada3b0080a76dd2a5..3c855cf7d581f4887bf1a0300b2d96aacddfb29a 100644
--- a/src/Lib/Script/ScriptOption.cc
+++ b/src/Lib/Script/ScriptOption.cc
@@ -1,4 +1,5 @@
-#include "ScriptOption.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/ScriptOption.hh"
 
 // OptionDeclaration
 using namespace Vivy::Script;
diff --git a/src/Lib/Script/ScriptOption.hh b/src/Lib/Script/ScriptOption.hh
index 0cfef834096ac036983e9b6c9539de012d422ee8..fc3c060732df5883e18e6262e93920d141015682 100644
--- a/src/Lib/Script/ScriptOption.hh
+++ b/src/Lib/Script/ScriptOption.hh
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "PreCompiledHeaders.hh"
+
 namespace Vivy::Script
 {
 // The options
diff --git a/src/Lib/Script/ScriptStore.cc b/src/Lib/Script/ScriptStore.cc
index 44b8e5d16652b9ac658debbdd7ec40c7ea1bfeba..a046ffbdef267e35e65c0087bcbe879655671be0 100644
--- a/src/Lib/Script/ScriptStore.cc
+++ b/src/Lib/Script/ScriptStore.cc
@@ -1,5 +1,6 @@
-#include "ScriptStore.hh"
-#include "../Uuid.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Script/ScriptStore.hh"
+#include "Lib/Uuid.hh"
 
 using namespace Vivy;
 using namespace std::string_literals;
diff --git a/src/Lib/Script/ScriptStore.hh b/src/Lib/Script/ScriptStore.hh
index 0a1968a6d3b2579843e248605191eca7e534690c..f0af2d6132aed34cf116cca38d12654ca52a2ee6 100644
--- a/src/Lib/Script/ScriptStore.hh
+++ b/src/Lib/Script/ScriptStore.hh
@@ -1,9 +1,9 @@
 #pragma once
 
-#include "../CRTPStore.hh"
-#include "../Document/VivyDocument.hh"
-#include "ScriptDocument.hh"
-#include "LuaContext.hh"
+#include "Lib/CRTPStore.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "Lib/Script/ScriptDocument.hh"
+#include "Lib/Script/LuaContext.hh"
 
 namespace Vivy::Script
 {
diff --git a/src/Lib/Utils.cc b/src/Lib/Utils.cc
index 9679378c3dbed92d0da9c39d53a8c5c12a3ca1e0..5bfeaab70b7818aa03d88bf61f8e7204c7989e2a 100644
--- a/src/Lib/Utils.cc
+++ b/src/Lib/Utils.cc
@@ -1,4 +1,5 @@
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh
index 39a6bc79895b010ea85cf826c7c4a4604c1d63e9..a6576c09365c0f2b41d684471d2e9090be7a8fd4 100644
--- a/src/Lib/Utils.hh
+++ b/src/Lib/Utils.hh
@@ -4,6 +4,8 @@
 #error "This is a C++ header"
 #endif
 
+#include "PreCompiledHeaders.hh"
+
 #define VIVY_PRAGMA(x) _Pragma(#x)
 #define TODO(x)        VIVY_PRAGMA(message("\"TODO: " #x "\""))
 
diff --git a/src/Lib/Uuid.cc b/src/Lib/Uuid.cc
index 7062680471fe5fa08e2aeb965807eac2b0dabd52..45509bd2097300a994a24eb9b670167ed678e3e0 100644
--- a/src/Lib/Uuid.cc
+++ b/src/Lib/Uuid.cc
@@ -1,5 +1,6 @@
-#include "Uuid.hh"
-#include "Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Uuid.hh"
+#include "Lib/Log.hh"
 
 Vivy::Uuid::Uuid()
     : QUuid(QUuid::createUuid())
diff --git a/src/Lib/Uuid.hh b/src/Lib/Uuid.hh
index 083e001f7192acd29c20d6ee447ebd68b8fcb8f6..9d9cb5b094f3b089fda2f99b3abd53a2e59ec99e 100644
--- a/src/Lib/Uuid.hh
+++ b/src/Lib/Uuid.hh
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "PreCompiledHeaders.hh"
+
 namespace Vivy
 {
 struct Uuid : QUuid {
diff --git a/src/Lib/Video.cc b/src/Lib/Video.cc
index e6b9a07022e0e77f352b5a90e664ea2111c9d882..db1bd987416dfd2787a06a04ae0ae02f4ed50a8d 100644
--- a/src/Lib/Video.cc
+++ b/src/Lib/Video.cc
@@ -1,5 +1,6 @@
-#include "Video.hh"
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Video.hh"
+#include "Lib/Utils.hh"
 
 using namespace Vivy;
 
diff --git a/src/Lib/Video.hh b/src/Lib/Video.hh
index 400feb30480d89cae9741a98c5cd9b2d7edabe2d..765f5691638d5bb2574f4ff94b54cab9fc1ba77e 100644
--- a/src/Lib/Video.hh
+++ b/src/Lib/Video.hh
@@ -4,7 +4,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "AbstractMediaContext.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/AbstractMediaContext.hh"
 
 namespace Vivy
 {
diff --git a/src/Main.cc b/src/Main.cc
index 1fcc24a12a4beb33e5f79e3135b0eeb6894b3ebb..f5f07f36794bf2f696a3d808ce235977c6f8c5fa 100644
--- a/src/Main.cc
+++ b/src/Main.cc
@@ -1,4 +1,5 @@
 #include "VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
 
 int
 main(int argc, char **argv) noexcept
diff --git a/src/PreCompiledHeaders.hh b/src/PreCompiledHeaders.hh
new file mode 100644
index 0000000000000000000000000000000000000000..42453c938ad1753d6d0a642c58ebdcc3ec04e145
--- /dev/null
+++ b/src/PreCompiledHeaders.hh
@@ -0,0 +1,142 @@
+/* For CCLS to be happy */
+#pragma once
+
+/* System headers */
+#include <memory>
+#include <vector>
+#include <atomic>
+#include <algorithm>
+#include <stdexcept>
+#include <sstream>
+#include <map>
+#include <utility>
+#include <locale>
+#include <functional>
+#include <initializer_list>
+#include <cstring>
+#include <string>
+#include <string_view>
+#include <cstdio>
+#include <iostream>
+#include <optional>
+#include <type_traits>
+#include <chrono>
+#include <climits>
+#include <ctype.h>
+#include <mutex>
+#include <iomanip>
+#include <filesystem>
+#include <bit>
+
+/* EXT_INC_PRIVATE */
+#include <mpv/client.h>
+#include "../vendor/lua-5.4.3/src/lua.hpp"
+
+/* QT_STRUCT_INC */
+#include <qglobal.h>
+#include <QThread>
+#include <QOperatingSystemVersion>
+#include <QtGlobal>
+#include <QObject>
+#include <QRegularExpression>
+#include <QRegExp>
+#include <QString>
+#include <QVariant>
+#include <QFile>
+#include <QDebug>
+#include <QHash>
+#include <QDir>
+#include <QTextStream>
+#include <QFileInfo>
+#include <QMessageLogger>
+#include <QUuid>
+#include <QPointer>
+#include <QProcess>
+#include <QTimer>
+#include <QStack>
+#include <QTemporaryFile>
+#include <QStandardPaths>
+#include <QList>
+#include <QVector>
+#include <QMap>
+#include <QSettings>
+#include <QStringList>
+#include <QMetaEnum>
+#include <QJsonObject>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonValue>
+
+/* QT_WIDGET_INC */
+#include <QCoreApplication>
+#include <QTextDocument>
+#include <QColor>
+#include <QPalette>
+#include <QWidget>
+#include <QIcon>
+#include <QFont>
+#include <QPixmap>
+#include <QApplication>
+#include <QCloseEvent>
+#include <QLabel>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QEvent>
+#include <QMouseEvent>
+#include <QTextEdit>
+#include <QDockWidget>
+#include <QMenu>
+#include <QFileDialog>
+#include <QMutex>
+#include <QMainWindow>
+#include <QPainter>
+#include <QPlainTextEdit>
+#include <QSlider>
+#include <QAbstractItemModel>
+#include <QHeaderView>
+#include <QPaintEvent>
+#include <QTableView>
+#include <QStyledItemDelegate>
+#include <QMessageBox>
+#include <QScrollBar>
+#include <QScrollArea>
+#include <QGraphicsPixmapItem>
+#include <QGraphicsSceneMouseEvent>
+#include <QPen>
+#include <QAction>
+#include <QGraphicsItem>
+#include <QGraphicsLineItem>
+#include <QTreeView>
+#include <QGraphicsView>
+#include <QGraphicsScene>
+#include <QWindow>
+#include <QAbstractScrollArea>
+#include <QGraphicsLineItem>
+#include <QGraphicsPixmapItem>
+#include <QClipboard>
+#include <QInputMethodEvent>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QTextBlock>
+#include <QTextCursor>
+#include <QTextDocumentFragment>
+#include <QMimeData>
+#include <QSharedPointer>
+#include <QStatusBar>
+#include <QBrush>
+#include <QFrame>
+#include <QSyntaxHighlighter>
+#include <QTextCharFormat>
+#include <QTabWidget>
+#include <QLayoutItem>
+#include <QLayout>
+#include <QEventLoop>
+#include <QImage>
+#include <QToolBar>
+#include <QMenuBar>
+#include <QDialogButtonBox>
+#include <QFileIconProvider>
+#include <QFontDatabase>
+#include <QTextCodec>
+#include <QListWidget>
diff --git a/src/UI/AboutWindow.cc b/src/UI/AboutWindow.cc
index 2faabee9bd54aac84530089fcaabed12e1b612e2..307c09a2b4c48a84c098257b47756b25a7e9b070 100644
--- a/src/UI/AboutWindow.cc
+++ b/src/UI/AboutWindow.cc
@@ -1,5 +1,6 @@
-#include "AboutWindow.hh"
-#include "../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/AboutWindow.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/AboutWindow.hh b/src/UI/AboutWindow.hh
index 73c8e640012f897620192da41318e23f3433113b..dc8b981348696830cd5f7137185c861da5d2615a 100644
--- a/src/UI/AboutWindow.hh
+++ b/src/UI/AboutWindow.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../VivyApplication.hh"
-#include "../Lib/Utils.hh"
-#include "../Lib/Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc
index d56a35bd2e8523d1a0511f5843403cbfa9ae9389..e0e39bbbc80d30d1c7abfede192a931f71368b05 100644
--- a/src/UI/AbstractDocumentView.cc
+++ b/src/UI/AbstractDocumentView.cc
@@ -1,4 +1,5 @@
-#include "AbstractDocumentView.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/AbstractDocumentView.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh
index 7745665b35e2bc5f669c86c4223afc0b839a0060..9a9fe00ceea3f48bd81c34aaa76f274ea844875f 100644
--- a/src/UI/AbstractDocumentView.hh
+++ b/src/UI/AbstractDocumentView.hh
@@ -4,9 +4,10 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
-#include "../Lib/AbstractDocument.hh"
-#include "UnclosableDockWidget.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
+#include "Lib/AbstractDocument.hh"
+#include "UI/UnclosableDockWidget.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DockWidgetTitleBar.cc b/src/UI/DockWidgetTitleBar.cc
index 46bc79c28f393361aef522ff04c94fee9394b6bf..0f4c28a114cd6800a724bf552e156da1ff1513bf 100644
--- a/src/UI/DockWidgetTitleBar.cc
+++ b/src/UI/DockWidgetTitleBar.cc
@@ -1,4 +1,5 @@
-#include "DockWidgetTitleBar.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DockWidgetTitleBar.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DockWidgetTitleBar.hh b/src/UI/DockWidgetTitleBar.hh
index f3eace6b0c63d4194878a6a9dc23b5cf6f041034..98f788ff31087324ecc343867cf6a99a7fb53657 100644
--- a/src/UI/DockWidgetTitleBar.hh
+++ b/src/UI/DockWidgetTitleBar.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../VivyApplication.hh"
-#include "../Lib/Log.hh"
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "UI/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/AssLinesModel.cc b/src/UI/DocumentViews/AssLinesModel.cc
index c02396a50156529b246b2c7126e18424ab52dadd..ef8a8262d4b388f59fbeac549780d13b746d4076 100644
--- a/src/UI/DocumentViews/AssLinesModel.cc
+++ b/src/UI/DocumentViews/AssLinesModel.cc
@@ -1,4 +1,5 @@
-#include "AssLinesModel.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/AssLinesModel.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/AssLinesModel.hh b/src/UI/DocumentViews/AssLinesModel.hh
index 60cc550b4cbdcbbf56b921187f8a671d42bf844c..bd55c1beadb52f7af47aeb3fd4475adba0abebe2 100644
--- a/src/UI/DocumentViews/AssLinesModel.hh
+++ b/src/UI/DocumentViews/AssLinesModel.hh
@@ -1,7 +1,8 @@
 #pragma once
 
-#include "../../Lib/Utils.hh"
-#include "../../Lib/Ass/Ass.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Ass/Ass.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/AssLinesView.cc b/src/UI/DocumentViews/AssLinesView.cc
index 022b8cfdcd0010806296269aef26132bb3ce367b..3537a2d1c1567bb2a0bee3c2d31f80d1892f60f0 100644
--- a/src/UI/DocumentViews/AssLinesView.cc
+++ b/src/UI/DocumentViews/AssLinesView.cc
@@ -1,5 +1,6 @@
-#include "AssLinesView.hh"
-#include "../../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/AssLinesView.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/AssLinesView.hh b/src/UI/DocumentViews/AssLinesView.hh
index 635b320cd95f7fea2661f8492a3dff7899f4c47e..e16481f2c9a1977e088c693ca4e131f90bcc8e0b 100644
--- a/src/UI/DocumentViews/AssLinesView.hh
+++ b/src/UI/DocumentViews/AssLinesView.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
index bab53a25f3755ba476fc24e7723e3dd70c699d6f..821c9de2ee0ce28c25c818f6a7a702419b8616dd 100644
--- a/src/UI/DocumentViews/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -1,5 +1,6 @@
-#include "AudioVisualizer.hh"
-#include "../../Lib/Audio.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/AudioVisualizer.hh"
+#include "Lib/Audio.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/AudioVisualizer.hh b/src/UI/DocumentViews/AudioVisualizer.hh
index 47032201caaf6ef875e0555c8c46205542c44150..170cb89b9296eeeb247345d013b61ae52dcd0de1 100644
--- a/src/UI/DocumentViews/AudioVisualizer.hh
+++ b/src/UI/DocumentViews/AudioVisualizer.hh
@@ -5,8 +5,9 @@
 #error "This is a C++ header"
 #endif
 
-#include "TimingView.hh"
-#include "../../Lib/Audio.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/TimingView.hh"
+#include "Lib/Audio.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/MpvContainer.cc b/src/UI/DocumentViews/MpvContainer.cc
index 1ba5067bdbee66a8ff2f8ca0c7c4de3e952759fb..c0e3c49b1d7921ea671f041f4520c0e6da3d3618 100644
--- a/src/UI/DocumentViews/MpvContainer.cc
+++ b/src/UI/DocumentViews/MpvContainer.cc
@@ -1,4 +1,5 @@
-#include "MpvContainer.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/MpvContainer.hh"
 
 using namespace Vivy;
 using namespace std::string_literals;
diff --git a/src/UI/DocumentViews/MpvContainer.hh b/src/UI/DocumentViews/MpvContainer.hh
index 37729f04dfa9ee9ee5ed2a04d6169645005ff90c..b83e6f9d65ccb9c6b4ecdd552da7982516e45a39 100644
--- a/src/UI/DocumentViews/MpvContainer.hh
+++ b/src/UI/DocumentViews/MpvContainer.hh
@@ -4,9 +4,10 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Utils.hh"
-#include "../../Lib/Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
 
 extern "C" {
 struct mpv_handle;
diff --git a/src/UI/DocumentViews/MpvControls.cc b/src/UI/DocumentViews/MpvControls.cc
index 453c87c5ff116415c0ee121c1bbd2329bfe93ca7..584fb7b26f8259cac7d47611e67c7184f7ecd800 100644
--- a/src/UI/DocumentViews/MpvControls.cc
+++ b/src/UI/DocumentViews/MpvControls.cc
@@ -1,5 +1,6 @@
-#include "MpvControls.hh"
-#include "MpvContainer.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/MpvControls.hh"
+#include "UI/DocumentViews/MpvContainer.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/MpvControls.hh b/src/UI/DocumentViews/MpvControls.hh
index 5c792dc72af07ec2866f5bc07e7bd6eaec077a7a..8f4e6dbd9d52252eb9a02717b79ca890daf097ca 100644
--- a/src/UI/DocumentViews/MpvControls.hh
+++ b/src/UI/DocumentViews/MpvControls.hh
@@ -4,8 +4,9 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/TimingBar.cc b/src/UI/DocumentViews/TimingBar.cc
index ac5fed95ed31e9700ce3fbe69eeaded26d5c975f..bc035eedf7b0eebd93bc58e0b8f3f8a8cfa98f4b 100644
--- a/src/UI/DocumentViews/TimingBar.cc
+++ b/src/UI/DocumentViews/TimingBar.cc
@@ -1,4 +1,5 @@
-#include "TimingBar.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/TimingBar.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/TimingBar.hh b/src/UI/DocumentViews/TimingBar.hh
index 583ee164782b1f1909a2c8f23a6dde6454d625cd..01c529ad728c1e4dfcec1f672cc64a73064ead30 100644
--- a/src/UI/DocumentViews/TimingBar.hh
+++ b/src/UI/DocumentViews/TimingBar.hh
@@ -4,6 +4,8 @@
 #error "This is a C++ header"
 #endif
 
+#include "PreCompiledHeaders.hh"
+
 namespace Vivy
 {
 class TimingBar final : public QGraphicsLineItem {
diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc
index e9db17e38c240717c21e814c98139e7585a80f16..c438efa4f83e847cce97d96cb084fb77c6039d79 100644
--- a/src/UI/DocumentViews/TimingScene.cc
+++ b/src/UI/DocumentViews/TimingScene.cc
@@ -1,5 +1,6 @@
-#include "TimingScene.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/TimingScene.hh"
+#include "Lib/Utils.hh"
 
 #include <QGraphicsLineItem>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh
index cb81a141d1e83c61d7f24fab55e140e956c2eacb..1d28e61afaf136d08260e2970b679260672f986a 100644
--- a/src/UI/DocumentViews/TimingScene.hh
+++ b/src/UI/DocumentViews/TimingScene.hh
@@ -1,8 +1,8 @@
 #pragma once
 
-#include "../../Lib/Utils.hh"
-#include "../../Lib/Ass/Ass.hh"
-#include "TimingBar.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Ass/Ass.hh"
+#include "UI/DocumentViews/TimingBar.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/TimingView.cc b/src/UI/DocumentViews/TimingView.cc
index c5391b1611aff4110d1a73336206bf10c4f3a680..cb8f6b1c43a6bc546d6382c6785d5df93fe4cb70 100644
--- a/src/UI/DocumentViews/TimingView.cc
+++ b/src/UI/DocumentViews/TimingView.cc
@@ -1,4 +1,5 @@
-#include "TimingView.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/TimingView.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/TimingView.hh b/src/UI/DocumentViews/TimingView.hh
index 0d68b4fa9f09d3e3fe9a42b8c5364894153ad25b..18773e3fce84f3296bc6b899c337b3f904875dd0 100644
--- a/src/UI/DocumentViews/TimingView.hh
+++ b/src/UI/DocumentViews/TimingView.hh
@@ -4,9 +4,10 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../Lib/Utils.hh"
-#include "TimingBar.hh"
-#include "TimingScene.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
+#include "UI/DocumentViews/TimingBar.hh"
+#include "UI/DocumentViews/TimingScene.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/DocumentViews/VideoView.cc b/src/UI/DocumentViews/VideoView.cc
index 30eee0e0863deaac58c2187232336f20395939a0..daefdbdbae7d3882c6f584f22de2f4dd66d9fb67 100644
--- a/src/UI/DocumentViews/VideoView.cc
+++ b/src/UI/DocumentViews/VideoView.cc
@@ -1,6 +1,7 @@
-#include "VideoView.hh"
-#include "MpvContainer.hh"
-#include "MpvControls.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/DocumentViews/VideoView.hh"
+#include "UI/DocumentViews/MpvContainer.hh"
+#include "UI/DocumentViews/MpvControls.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/DocumentViews/VideoView.hh b/src/UI/DocumentViews/VideoView.hh
index 20a97b8d6c519cd28d0b1d96e670161303582a9c..debff27d89483fa9934fc36fe11daf9dcb14e01c 100644
--- a/src/UI/DocumentViews/VideoView.hh
+++ b/src/UI/DocumentViews/VideoView.hh
@@ -4,7 +4,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/FakeVim/FakeVimActions.cc b/src/UI/FakeVim/FakeVimActions.cc
index 045fd3a244612bf2ee605aead272079aabd0c3b6..afb8aa91f3da6984d7ee48fc23790de6e68a7ca4 100644
--- a/src/UI/FakeVim/FakeVimActions.cc
+++ b/src/UI/FakeVim/FakeVimActions.cc
@@ -1,7 +1,7 @@
-#include "FakeVimActions.hh"
-#include "FakeVimHandler.hh"
-
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/FakeVim/FakeVimActions.hh"
+#include "UI/FakeVim/FakeVimHandler.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/FakeVim/FakeVimActions.hh b/src/UI/FakeVim/FakeVimActions.hh
index 69a9a01ecaf6892ed8fd30b433c5ca9d8367c413..4a1616250fd6d4ec3c3817bc95cceedee6694774 100644
--- a/src/UI/FakeVim/FakeVimActions.hh
+++ b/src/UI/FakeVim/FakeVimActions.hh
@@ -1,5 +1,6 @@
 #pragma once
 
+#include "PreCompiledHeaders.hh"
 #define FAKEVIM_STANDALONE
 
 namespace Vivy
diff --git a/src/UI/FakeVim/FakeVimHandler.cc b/src/UI/FakeVim/FakeVimHandler.cc
index 2cede1aa033ea1c6ababdef39987a71fbbf1be16..999f865b4374c8a415eebe24539c76e6590947aa 100644
--- a/src/UI/FakeVim/FakeVimHandler.cc
+++ b/src/UI/FakeVim/FakeVimHandler.cc
@@ -28,10 +28,11 @@
 //   if the last movement command was exclusive (MoveExclusive).
 //
 
-#include "FakeVimHandler.hh"
-#include "FakeVimActions.hh"
-#include "FakeVimTr.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/FakeVim/FakeVimHandler.hh"
+#include "UI/FakeVim/FakeVimActions.hh"
+#include "UI/FakeVim/FakeVimTr.hh"
+#include "Lib/Utils.hh"
 
 //#define DEBUG_KEY  1
 #if defined(DEBUG_KEY) && DEBUG_KEY
diff --git a/src/UI/FakeVim/FakeVimHandler.hh b/src/UI/FakeVim/FakeVimHandler.hh
index eb8fea4eb9cc07118b09c9d9a309cfa8161803f1..ea3832f3e78e5bdf8df043c0ccf76910a60732a7 100644
--- a/src/UI/FakeVim/FakeVimHandler.hh
+++ b/src/UI/FakeVim/FakeVimHandler.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Log.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
 
 #define FAKEVIM_STANDALONE
 
diff --git a/src/UI/FakeVim/FakeVimTr.hh b/src/UI/FakeVim/FakeVimTr.hh
index 4f2b78e9800816bdc5c24c99ab849a5da3e8e70f..5e7c7b844bd9321a95a80477ae89e5d6cd92d73b 100644
--- a/src/UI/FakeVim/FakeVimTr.hh
+++ b/src/UI/FakeVim/FakeVimTr.hh
@@ -1,5 +1,6 @@
 #pragma once
 
+#include "PreCompiledHeaders.hh"
 namespace Vivy
 {
 struct Tr {
diff --git a/src/UI/LogConsole.cc b/src/UI/LogConsole.cc
index 544392d5d937c1c2f9d9b78e3a5883ad935d4624..1151885498cb3e5f2faec3f6cbafa3370061fe05 100644
--- a/src/UI/LogConsole.cc
+++ b/src/UI/LogConsole.cc
@@ -1,4 +1,5 @@
-#include "LogConsole.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/LogConsole.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/LogConsole.hh b/src/UI/LogConsole.hh
index a388e330d81b87ff10e4ba93ee520bbf1ca30d16..c6be3e78ae08a749ce94f9a583e770e8650ad625 100644
--- a/src/UI/LogConsole.hh
+++ b/src/UI/LogConsole.hh
@@ -1,7 +1,8 @@
 #pragma once
 
-#include "Utils.hh"
-#include "../Lib/Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/Utils.hh"
+#include "Lib/Log.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 47e764e107ac56bf06c4912a9360098dda7200dd..6c564ae43eb53b08e71a837693a75f0ccfcde6da 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -1,13 +1,14 @@
-#include "../Lib/Document/VivyDocumentStore.hh"
-#include "../Lib/Script/ScriptStore.hh"
-#include "../Lib/Utils.hh"
-#include "../VivyApplication.hh"
-#include "MainWindow.hh"
-#include "PropertyModel.hh"
-#include "VivyDocumentView.hh"
-#include "AboutWindow.hh"
-#include "VivyFileIconProvider.hh"
-#include "AboutWindow.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
+#include "Lib/Script/ScriptStore.hh"
+#include "Lib/Utils.hh"
+#include "VivyApplication.hh"
+#include "UI/MainWindow.hh"
+#include "UI/PropertyModel.hh"
+#include "UI/VivyDocumentView.hh"
+#include "UI/AboutWindow.hh"
+#include "UI/VivyFileIconProvider.hh"
+#include "UI/AboutWindow.hh"
 
 #define DCL_MENU(menu, name) [[maybe_unused]] QMenu *menu##Menu = menuBar()->addMenu(name);
 
diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh
index 30a31af108f94ceb43ce3dc34aa06f905ab33c91..71dea3cd865cdb80efb063dd2c2c4fb52c1b036f 100644
--- a/src/UI/MainWindow.hh
+++ b/src/UI/MainWindow.hh
@@ -4,14 +4,15 @@
 #error "This is a C++ header"
 #endif
 
-#include "../VivyApplication.hh"
-#include "../Lib/Utils.hh"
-#include "../Lib/Log.hh"
-#include "../Lib/AbstractDocument.hh"
-#include "../Lib/Document/VivyDocumentStore.hh"
-#include "DocumentViews/AudioVisualizer.hh"
-#include "VivyDocumentView.hh"
-#include "ScriptDocumentView.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
+#include "Lib/AbstractDocument.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
+#include "UI/DocumentViews/AudioVisualizer.hh"
+#include "UI/VivyDocumentView.hh"
+#include "UI/ScriptDocumentView.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/PropertyModel.cc b/src/UI/PropertyModel.cc
index 9530ea77c4ee8315188235eb09b7e8cecf7d7c02..e45f224464a192e37fb58ee7e44adbb4b1fa6f27 100644
--- a/src/UI/PropertyModel.cc
+++ b/src/UI/PropertyModel.cc
@@ -1,4 +1,5 @@
-#include "PropertyModel.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/PropertyModel.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/PropertyModel.hh b/src/UI/PropertyModel.hh
index 45a21ab01096912dd8a8ee68f2de4982b2111f69..07254ea736966027c036e006a38f05f9ac659dc7 100644
--- a/src/UI/PropertyModel.hh
+++ b/src/UI/PropertyModel.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 //  auto model          = new PropertyModel(doc);
 //  QVBoxLayout *layout = new QVBoxLayout(this);
diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc
index 1f510c7c4f48db6686035121bd5229f4db3a34e1..9fabc4b3b906d2055902916b94deca0dbb9d0c1d 100644
--- a/src/UI/ScriptDocumentView.cc
+++ b/src/UI/ScriptDocumentView.cc
@@ -1,8 +1,9 @@
-#include "ScriptDocumentView.hh"
-#include "MainWindow.hh"
-#include "ScriptViews/ScriptEditor.hh"
-#include "ScriptViews/ScriptHighlighter.hh"
-#include "../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/ScriptDocumentView.hh"
+#include "UI/MainWindow.hh"
+#include "UI/ScriptViews/ScriptEditor.hh"
+#include "UI/ScriptViews/ScriptHighlighter.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh
index 0f7907352447f3bcb82c1081c242b519141016fd..a348e317342219b1583b07b56866a25bb71e1274 100644
--- a/src/UI/ScriptDocumentView.hh
+++ b/src/UI/ScriptDocumentView.hh
@@ -5,15 +5,16 @@
 #error "This is a C++ header"
 #endif
 
-#include "../VivyApplication.hh"
-#include "../Lib/Utils.hh"
-#include "../Lib/Log.hh"
-#include "../Lib/Script/ScriptDocument.hh"
-#include "AbstractDocumentView.hh"
-#include "FakeVim/FakeVimHandler.hh"
-#include "ScriptViews/EditorProxy.hh"
-#include "ScriptViews/ScriptHighlighter.hh"
-#include "ScriptViews/ScriptEditor.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
+#include "Lib/Script/ScriptDocument.hh"
+#include "UI/AbstractDocumentView.hh"
+#include "UI/FakeVim/FakeVimHandler.hh"
+#include "UI/ScriptViews/EditorProxy.hh"
+#include "UI/ScriptViews/ScriptHighlighter.hh"
+#include "UI/ScriptViews/ScriptEditor.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/ScriptViews/EditorProxy.cc b/src/UI/ScriptViews/EditorProxy.cc
index f262c96e8723db058439a30dd6c04ea828cb24cd..de96e991f7aac0d6e12a9da6b47c3d3887b08728 100644
--- a/src/UI/ScriptViews/EditorProxy.cc
+++ b/src/UI/ScriptViews/EditorProxy.cc
@@ -1,8 +1,9 @@
-#include "EditorProxy.hh"
-#include "../MainWindow.hh"
-#include "../FakeVim/FakeVimHandler.hh"
-#include "../FakeVim/FakeVimActions.hh"
-#include "../../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/ScriptViews/EditorProxy.hh"
+#include "UI/MainWindow.hh"
+#include "UI/FakeVim/FakeVimHandler.hh"
+#include "UI/FakeVim/FakeVimActions.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/ScriptViews/EditorProxy.hh b/src/UI/ScriptViews/EditorProxy.hh
index 2db6da9e889a6d51b1b62d6686ba6d7435039ed3..1ff5bdf9ffbd62843a5207cede39f2a53c53edc7 100644
--- a/src/UI/ScriptViews/EditorProxy.hh
+++ b/src/UI/ScriptViews/EditorProxy.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Log.hh"
-#include "ScriptEditor.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "UI/ScriptViews/ScriptEditor.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/ScriptViews/ScriptEditor.cc b/src/UI/ScriptViews/ScriptEditor.cc
index 4ba88645d892ba1848dd9e7d113b135b46a6d820..6f7de9cf28aaffe744b247462624c35b03a43436 100644
--- a/src/UI/ScriptViews/ScriptEditor.cc
+++ b/src/UI/ScriptViews/ScriptEditor.cc
@@ -1,5 +1,6 @@
-#include "ScriptEditor.hh"
-#include "ScriptHighlighter.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/ScriptViews/ScriptEditor.hh"
+#include "UI/ScriptViews/ScriptHighlighter.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/ScriptViews/ScriptEditor.hh b/src/UI/ScriptViews/ScriptEditor.hh
index 1a2391cf6a40495859c0be0eedf6ddb5dd1b58a6..f9afe789a37948e66ba29fa91ff2f1a9e2cc5fa5 100644
--- a/src/UI/ScriptViews/ScriptEditor.hh
+++ b/src/UI/ScriptViews/ScriptEditor.hh
@@ -4,9 +4,10 @@
 #error "This is a C++ header"
 #endif
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Log.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/ScriptViews/ScriptHighlighter.cc b/src/UI/ScriptViews/ScriptHighlighter.cc
index 6c50b405e8d066fed53d1f8a9118b9ceb3bc37ce..29e665e88f8552c5a554958b674f0cd59bb41f2b 100644
--- a/src/UI/ScriptViews/ScriptHighlighter.cc
+++ b/src/UI/ScriptViews/ScriptHighlighter.cc
@@ -1,7 +1,8 @@
-#include "ScriptHighlighter.hh"
-#include "../Theme/Theme.hh"
-#include "../../VivyApplication.hh"
-#include "../../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/ScriptViews/ScriptHighlighter.hh"
+#include "UI/Theme/Theme.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/ScriptViews/ScriptHighlighter.hh b/src/UI/ScriptViews/ScriptHighlighter.hh
index cf636bdb3fff70692d69f778314a76087ec09b15..3d30a3409e46eedad78f3b071da887b590dea2d6 100644
--- a/src/UI/ScriptViews/ScriptHighlighter.hh
+++ b/src/UI/ScriptViews/ScriptHighlighter.hh
@@ -4,7 +4,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Theme/Theme.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/Theme/Theme.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/Theme/Theme.cc b/src/UI/Theme/Theme.cc
index 7f60106d1a72ae47ba0209b39379674017be2503..c68fbd5b07891365e08c9202e73ef07243399c4c 100644
--- a/src/UI/Theme/Theme.cc
+++ b/src/UI/Theme/Theme.cc
@@ -1,6 +1,7 @@
-#include "Theme.hh"
-#include "../../VivyApplication.hh"
-#include "../../Lib/HostOsInfo.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/Theme/Theme.hh"
+#include "VivyApplication.hh"
+#include "Lib/HostOsInfo.hh"
 #if VIVY_MACOS
 #import "ThemeMac.hh"
 #endif
diff --git a/src/UI/Theme/Theme.hh b/src/UI/Theme/Theme.hh
index 532bcb6795f658e1049738e53c64adf6ae1e0afd..5716ec2c86c1ef4c5fe1bfd49d05843a3a615b3b 100644
--- a/src/UI/Theme/Theme.hh
+++ b/src/UI/Theme/Theme.hh
@@ -1,8 +1,9 @@
 #pragma once
 
-#include "../../VivyApplication.hh"
-#include "../../Lib/Utils.hh"
-#include "../../Lib/Log.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Utils.hh"
+#include "Lib/Log.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/UnclosableDockWidget.cc b/src/UI/UnclosableDockWidget.cc
index e08d2f73c83f754169d92306aba2ddcac6d4b490..975f5dc00a019fa29ce0ef38924866867e933843 100644
--- a/src/UI/UnclosableDockWidget.cc
+++ b/src/UI/UnclosableDockWidget.cc
@@ -1,5 +1,6 @@
-#include "UnclosableDockWidget.hh"
-#include "DockWidgetTitleBar.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/UnclosableDockWidget.hh"
+#include "UI/DockWidgetTitleBar.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/UnclosableDockWidget.hh b/src/UI/UnclosableDockWidget.hh
index 204a11720b207591c8d50e2422fa8d4555688a19..8f885753979a8d1586817721e46da5b495e8c585 100644
--- a/src/UI/UnclosableDockWidget.hh
+++ b/src/UI/UnclosableDockWidget.hh
@@ -1,6 +1,7 @@
 #pragma once
 
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/Utils.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/Utils.cc b/src/UI/Utils.cc
index 531e05119df8a7d1a2022581f2bc75197ccc8334..50ab3425e78d9c14d7ebb8a0d6340842c782edec 100644
--- a/src/UI/Utils.cc
+++ b/src/UI/Utils.cc
@@ -1,4 +1,5 @@
-#include "Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/Utils.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/Utils.hh b/src/UI/Utils.hh
index e5b71db13c6228348c797ba619b9be074ceae86d..788d81eb70f20d24ada712064422625ba11e756c 100644
--- a/src/UI/Utils.hh
+++ b/src/UI/Utils.hh
@@ -4,7 +4,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
 
 class QWidget;
 
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 86e155afd60eac27964e0f270e8dba6f6d8ff4f8..6cc127fa6bdcde6dac57a37aa233bf3b8d97f49a 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -1,12 +1,13 @@
-#include "VivyDocumentView.hh"
-#include "PropertyModel.hh"
-#include "Utils.hh"
-#include "DocumentViews/AudioVisualizer.hh"
-#include "DocumentViews/AssLinesView.hh"
-#include "DocumentViews/AssLinesModel.hh"
-#include "../VivyApplication.hh"
-#include "../Lib/Document/VivyDocument.hh"
-#include "../Lib/Document/VivyDocumentStore.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/VivyDocumentView.hh"
+#include "UI/PropertyModel.hh"
+#include "UI/Utils.hh"
+#include "UI/DocumentViews/AudioVisualizer.hh"
+#include "UI/DocumentViews/AssLinesView.hh"
+#include "UI/DocumentViews/AssLinesModel.hh"
+#include "VivyApplication.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index a17d1c34c8a0cdbb61d9ae12807d10a96c383266..47ce593ab458a42d1d7e79c9282a683f1c704645 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -4,15 +4,16 @@
 #error "This is a C++ header"
 #endif
 
-#include "../VivyApplication.hh"
-#include "../Lib/Log.hh"
-#include "../Lib/Document/VivyDocument.hh"
-#include "PropertyModel.hh"
-#include "UnclosableDockWidget.hh"
-#include "AbstractDocumentView.hh"
-#include "DocumentViews/VideoView.hh"
-#include "DocumentViews/AssLinesView.hh"
-#include "DocumentViews/AssLinesModel.hh"
+#include "PreCompiledHeaders.hh"
+#include "VivyApplication.hh"
+#include "Lib/Log.hh"
+#include "Lib/Document/VivyDocument.hh"
+#include "UI/PropertyModel.hh"
+#include "UI/UnclosableDockWidget.hh"
+#include "UI/AbstractDocumentView.hh"
+#include "UI/DocumentViews/VideoView.hh"
+#include "UI/DocumentViews/AssLinesView.hh"
+#include "UI/DocumentViews/AssLinesModel.hh"
 
 namespace Vivy
 {
diff --git a/src/UI/VivyFileIconProvider.cc b/src/UI/VivyFileIconProvider.cc
index f2cbef1086d273203d54b64efd42baa63feb10a1..eeeafd7371b30d36e4d959d9af307a2d414e25ca 100644
--- a/src/UI/VivyFileIconProvider.cc
+++ b/src/UI/VivyFileIconProvider.cc
@@ -1,5 +1,6 @@
-#include "VivyFileIconProvider.hh"
-#include "../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "UI/VivyFileIconProvider.hh"
+#include "VivyApplication.hh"
 
 using namespace Vivy;
 
diff --git a/src/UI/VivyFileIconProvider.hh b/src/UI/VivyFileIconProvider.hh
index d219b799ff9ce4677c226021d6c9179cbd8a07a5..edd7b0bf0ea1d8b6cbda1a8e43eceb19635d6ee5 100644
--- a/src/UI/VivyFileIconProvider.hh
+++ b/src/UI/VivyFileIconProvider.hh
@@ -4,8 +4,9 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
-#include "../VivyApplication.hh"
+#include "PreCompiledHeaders.hh"
+#include "Lib/Utils.hh"
+#include "VivyApplication.hh"
 
 namespace Vivy
 {
diff --git a/src/VivyApplication.cc b/src/VivyApplication.cc
index 3be55a7da0ea7b285d699476804fb4e43b44bfdf..f37e95cd229fe8138adfaf10b5ea259dcdd8ff93 100644
--- a/src/VivyApplication.cc
+++ b/src/VivyApplication.cc
@@ -1,3 +1,4 @@
+#include "PreCompiledHeaders.hh"
 #include "VivyApplication.hh"
 #include "UI/MainWindow.hh"
 #include "UI/DockWidgetTitleBar.hh"
diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh
index c802a011f505188c8dba07815c80a4c15e80f0d7..d5307b7d7af257ad803cbd07098206a0fd27bcdf 100644
--- a/src/VivyApplication.hh
+++ b/src/VivyApplication.hh
@@ -4,6 +4,8 @@
 #error "This is a C++ header"
 #endif
 
+#include "PreCompiledHeaders.hh"
+
 // Get the VivyApplication pointer
 #define vivyApp (static_cast<::Vivy::VivyApplication *>(VivyApplication::instance()))