diff --git a/CMakeLists.txt b/CMakeLists.txt
index 576c61967666eca9f7862575cde798f674be8f49..f308c7b9013f00e328cdc6c270328f265dca50e4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,45 +1,35 @@
 cmake_minimum_required(VERSION 3.5)
 
+# Alpho Vivy, CXX only
 project(Vivy VERSION 0.1 LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
 cmake_policy(SET CMP0100 NEW) # Let cmake use moc and uic for .hh files
+cmake_policy(SET CMP0009 NEW) # Do not follow symlinks with GLOB_RECURSE
 
+# For Qt
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
+# C++20, at least we try
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+# Pthread ftw
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 
-# Find all dependencies
-find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
+# Find Qt dependencies
+find_package(QT NAMES Qt6 Qt5      COMPONENTS Widgets REQUIRED)
 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
-find_library(AVCODEC_LIBRARY avcodec 4.0 REQUIRED)
-find_library(AVUTIL_LIBRARY avutil 4.0 REQUIRED)
-find_library(SWRESAMPLE_LIBRARY swresample REQUIRED)
-find_library(AVFORMAT_LIBRARY avformat REQUIRED)
 
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
+# Find others dependencies
+find_library(AVCODEC_LIBRARY    avcodec     4.0 REQUIRED)
+find_library(AVUTIL_LIBRARY     avutil      4.0 REQUIRED)
+find_library(SWRESAMPLE_LIBRARY swresample      REQUIRED)
+find_library(AVFORMAT_LIBRARY   avformat        REQUIRED)
 
 # Grab all files
-file(GLOB Vivy_SRC
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.cc"
-)
-file(GLOB Vivy_INC
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.hh"
-)
+file(GLOB_RECURSE Vivy_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc")
+file(GLOB_RECURSE Vivy_INC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh")
 set(PROJECT_SOURCES
     ${Vivy_SRC}
     ${Vivy_INC}
@@ -68,24 +58,7 @@ target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
 
 # Headers related things
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
-target_precompile_headers(Vivy PRIVATE
-    # ASS headers
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh"
-
-    # Libs
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Utils.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Audio.hh"
-
-    # Document headers
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh"
-)
+target_precompile_headers(Vivy PRIVATE ${Vivy_INC})
 
 # More options and warnings
 target_compile_options(Vivy PRIVATE
@@ -96,11 +69,16 @@ target_compile_options(Vivy PRIVATE
     -Woverloaded-virtual -Wnon-virtual-dtor
 )
 
+# Some compiler specific warnings and options
 if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     target_compile_options(Vivy PRIVATE
-        -Wno-unused-private-field # Skip the unused private fields for now
+        -Wno-unused-private-field   # Skip the unused private fields for now
+        -fopenmp                    # We do OpenMP here
     )
+    target_link_libraries(Vivy PRIVATE -fopenmp)
 elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
+    target_compile_options(Vivy PRIVATE -fopenmp)
+    target_link_libraries(Vivy PRIVATE -fopenmp)
 endif()
 
 set_target_properties(Vivy PROPERTIES
diff --git a/src/Ass/Ass.hh b/src/Lib/Ass/Ass.hh
similarity index 100%
rename from src/Ass/Ass.hh
rename to src/Lib/Ass/Ass.hh
diff --git a/src/Ass/AssFactory.cc b/src/Lib/Ass/AssFactory.cc
similarity index 100%
rename from src/Ass/AssFactory.cc
rename to src/Lib/Ass/AssFactory.cc
diff --git a/src/Ass/AssFactory.hh b/src/Lib/Ass/AssFactory.hh
similarity index 98%
rename from src/Ass/AssFactory.hh
rename to src/Lib/Ass/AssFactory.hh
index e5343ec97deae93cbd864fa1844ca2fb72512b4a..48f849b01cc6ef60afbaa5b4d18627b59d24f439 100644
--- a/src/Ass/AssFactory.hh
+++ b/src/Lib/Ass/AssFactory.hh
@@ -1,7 +1,7 @@
 #ifndef VIVY_ASS_FACTORY_H
 #define VIVY_ASS_FACTORY_H
 
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 #include "Style.hh"
 #include "Line.hh"
 
diff --git a/src/Ass/Char.cc b/src/Lib/Ass/Char.cc
similarity index 100%
rename from src/Ass/Char.cc
rename to src/Lib/Ass/Char.cc
diff --git a/src/Ass/Char.hh b/src/Lib/Ass/Char.hh
similarity index 100%
rename from src/Ass/Char.hh
rename to src/Lib/Ass/Char.hh
diff --git a/src/Ass/Line.cc b/src/Lib/Ass/Line.cc
similarity index 100%
rename from src/Ass/Line.cc
rename to src/Lib/Ass/Line.cc
diff --git a/src/Ass/Line.hh b/src/Lib/Ass/Line.hh
similarity index 100%
rename from src/Ass/Line.hh
rename to src/Lib/Ass/Line.hh
diff --git a/src/Ass/Style.cc b/src/Lib/Ass/Style.cc
similarity index 100%
rename from src/Ass/Style.cc
rename to src/Lib/Ass/Style.cc
diff --git a/src/Ass/Style.hh b/src/Lib/Ass/Style.hh
similarity index 100%
rename from src/Ass/Style.hh
rename to src/Lib/Ass/Style.hh
diff --git a/src/Ass/StyleProperties.hh b/src/Lib/Ass/StyleProperties.hh
similarity index 100%
rename from src/Ass/StyleProperties.hh
rename to src/Lib/Ass/StyleProperties.hh
diff --git a/src/Ass/Syl.cc b/src/Lib/Ass/Syl.cc
similarity index 100%
rename from src/Ass/Syl.cc
rename to src/Lib/Ass/Syl.cc
diff --git a/src/Ass/Syl.hh b/src/Lib/Ass/Syl.hh
similarity index 100%
rename from src/Ass/Syl.hh
rename to src/Lib/Ass/Syl.hh
diff --git a/src/Document/CRTPSubDocument.cc b/src/Lib/Document/CRTPSubDocument.cc
similarity index 100%
rename from src/Document/CRTPSubDocument.cc
rename to src/Lib/Document/CRTPSubDocument.cc
diff --git a/src/Document/CRTPSubDocument.hh b/src/Lib/Document/CRTPSubDocument.hh
similarity index 98%
rename from src/Document/CRTPSubDocument.hh
rename to src/Lib/Document/CRTPSubDocument.hh
index 16c86dd2445540464ff6be2e93dd2889e1836676..f89b26f65e235f3c3b3fd72a22510c7afd7cebdd 100644
--- a/src/Document/CRTPSubDocument.hh
+++ b/src/Lib/Document/CRTPSubDocument.hh
@@ -5,8 +5,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
-#include "../Lib/Audio.hh"
+#include "../Utils.hh"
+#include "../Audio.hh"
 #include "../Ass/Ass.hh"
 #include <QString>
 #include <memory>
diff --git a/src/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc
similarity index 99%
rename from src/Document/VivyDocument.cc
rename to src/Lib/Document/VivyDocument.cc
index ed97966b2407efbd5ce2e206aa00a13f9d350702..66708df9e199808ec77e5c2ef8a3d81ecec88df1 100644
--- a/src/Document/VivyDocument.cc
+++ b/src/Lib/Document/VivyDocument.cc
@@ -1,5 +1,5 @@
 #include "VivyDocument.hh"
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 
 #include <QFileInfo>
 #include <QString>
diff --git a/src/Document/VivyDocument.hh b/src/Lib/Document/VivyDocument.hh
similarity index 98%
rename from src/Document/VivyDocument.hh
rename to src/Lib/Document/VivyDocument.hh
index 8e29b3db4a94544c6923e313368d6229c6c9de59..da2f91a95ee2c198ba894db732bfe149a367b926 100644
--- a/src/Document/VivyDocument.hh
+++ b/src/Lib/Document/VivyDocument.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 #include "CRTPSubDocument.hh"
 
 #include <memory>
diff --git a/src/Document/VivyDocumentStore.cc b/src/Lib/Document/VivyDocumentStore.cc
similarity index 100%
rename from src/Document/VivyDocumentStore.cc
rename to src/Lib/Document/VivyDocumentStore.cc
diff --git a/src/Document/VivyDocumentStore.hh b/src/Lib/Document/VivyDocumentStore.hh
similarity index 97%
rename from src/Document/VivyDocumentStore.hh
rename to src/Lib/Document/VivyDocumentStore.hh
index 047a49ab29172b076b88a43af606f681fde0d5fa..f25fd3f7d374840596fa81ee0df07a38ddc4db66 100644
--- a/src/Document/VivyDocumentStore.hh
+++ b/src/Lib/Document/VivyDocumentStore.hh
@@ -2,7 +2,7 @@
 #define VIVY_DOCUMENTSTORE_H
 
 #include "VivyDocument.hh"
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 
 #include <QMap>
 #include <QString>
diff --git a/src/UI/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
similarity index 98%
rename from src/UI/AudioVisualizer.cc
rename to src/UI/DocumentViews/AudioVisualizer.cc
index d55f2d1c986db66c176a81183e5be70cd40eeb0e..fa8d02c1314b267a7ffb04687bb6c56070372e5c 100644
--- a/src/UI/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -1,5 +1,5 @@
 #include "AudioVisualizer.hh"
-#include "../Lib/Audio.hh"
+#include "../../Lib/Audio.hh"
 
 #include <algorithm>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/AudioVisualizer.hh b/src/UI/DocumentViews/AudioVisualizer.hh
similarity index 97%
rename from src/UI/AudioVisualizer.hh
rename to src/UI/DocumentViews/AudioVisualizer.hh
index 3273d285bba08de8865e08be657cf62ba414a483..451d50800979bca9f137b3fd2dfcd3842715629b 100644
--- a/src/UI/AudioVisualizer.hh
+++ b/src/UI/DocumentViews/AudioVisualizer.hh
@@ -6,7 +6,7 @@
 #endif
 
 #include "TimingView.hh"
-#include "../Lib/Audio.hh"
+#include "../../Lib/Audio.hh"
 #include <QWidget>
 #include <QString>
 
diff --git a/src/UI/TimingBar.cc b/src/UI/DocumentViews/TimingBar.cc
similarity index 100%
rename from src/UI/TimingBar.cc
rename to src/UI/DocumentViews/TimingBar.cc
diff --git a/src/UI/TimingBar.hh b/src/UI/DocumentViews/TimingBar.hh
similarity index 100%
rename from src/UI/TimingBar.hh
rename to src/UI/DocumentViews/TimingBar.hh
diff --git a/src/UI/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc
similarity index 98%
rename from src/UI/TimingScene.cc
rename to src/UI/DocumentViews/TimingScene.cc
index 7d2e21156582e7c6c77de94958b53785c057cb1a..3c916fd0868d3364b69b0822c233357dd9667f94 100644
--- a/src/UI/TimingScene.cc
+++ b/src/UI/DocumentViews/TimingScene.cc
@@ -1,5 +1,5 @@
 #include "TimingScene.hh"
-#include "../Lib/Utils.hh"
+#include "../../Lib/Utils.hh"
 
 #include <QGraphicsLineItem>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh
similarity index 95%
rename from src/UI/TimingScene.hh
rename to src/UI/DocumentViews/TimingScene.hh
index 860acecbc35628983b137e517385f82da36cf1ef..901de0fa63c48079797dd50018e5ce51cf85e018 100644
--- a/src/UI/TimingScene.hh
+++ b/src/UI/DocumentViews/TimingScene.hh
@@ -1,8 +1,8 @@
 #ifndef VIVY_TIMING_SCENE_H
 #define VIVY_TIMING_SCENE_H
 
-#include "../Lib/Utils.hh"
-#include "../Ass/Ass.hh"
+#include "../../Lib/Utils.hh"
+#include "../../Lib/Ass/Ass.hh"
 #include "TimingBar.hh"
 
 #include <QWidget>
diff --git a/src/UI/TimingView.cc b/src/UI/DocumentViews/TimingView.cc
similarity index 100%
rename from src/UI/TimingView.cc
rename to src/UI/DocumentViews/TimingView.cc
diff --git a/src/UI/TimingView.hh b/src/UI/DocumentViews/TimingView.hh
similarity index 96%
rename from src/UI/TimingView.hh
rename to src/UI/DocumentViews/TimingView.hh
index b2f11f792576e7d66b1e2628ae2cefb12bb51e67..8f4328faa9cc0116a3ac25f342ce4a5881bf93d6 100644
--- a/src/UI/TimingView.hh
+++ b/src/UI/DocumentViews/TimingView.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
+#include "../../Lib/Utils.hh"
 #include "TimingBar.hh"
 #include "TimingScene.hh"
 
diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh
index 45910f4ad7eeb36c2bf936e2b7c45af528758a48..dc6944449cbf0a612794856da294181a0136c4f9 100644
--- a/src/UI/MainWindow.hh
+++ b/src/UI/MainWindow.hh
@@ -6,8 +6,8 @@
 #endif
 
 #include "../Lib/Utils.hh"
-#include "AudioVisualizer.hh"
-#include "../Document/VivyDocumentStore.hh"
+#include "../Lib/Document/VivyDocumentStore.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "VivyDocumentView.hh"
 #include <QMainWindow>
 
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 962f33d430093c88a9596464b462fa5d00b217ac..e7d540127368b3d90055ea89928990a289b1cef5 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -1,8 +1,8 @@
 #include "VivyDocumentView.hh"
-#include "AudioVisualizer.hh"
 #include "PropertyModel.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "../VivyApplication.hh"
-#include "../Document/VivyDocument.hh"
+#include "../Lib/Document/VivyDocument.hh"
 
 #include <QHeaderView>
 #include <QTreeView>
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index 70535b45f472a8ca9595433d2da015a157f6a7aa..28d991b855140c748e890ce0ef5edb46f6eee12b 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -5,8 +5,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Document/VivyDocument.hh"
-#include "AudioVisualizer.hh"
+#include "../Lib/Document/VivyDocument.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "DocumentView.hh"
 #include "PropertyModel.hh"
 
diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh
index 4492f05473899d8e764ae4c2598cdd3520f8e4c3..579f9b78c273d7ba936d3e98b0960d702f529c66 100644
--- a/src/VivyApplication.hh
+++ b/src/VivyApplication.hh
@@ -9,7 +9,7 @@
 
 #include <QApplication>
 #include <QPixmap>
-#include "Document/VivyDocumentStore.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
 #include <memory>
 
 namespace Vivy