diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6ee0dc3dcbeb45ee95a851e59e8a9f3c7e1891b..2a90b008c6a8bfbe275391350ef6de1c21913abc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.5)
 
-project(Vivy VERSION 0.1)
+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
@@ -28,16 +28,16 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
 # Grab all files
 file(GLOB Vivy_SRC
     "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"
     "${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/*.h"
     "${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"
 )
 set(PROJECT_SOURCES
@@ -70,22 +70,24 @@ target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
 target_precompile_headers(Vivy PRIVATE
     # ASS headers
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh>"
-
-    # Utils
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Utils.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/AudioUtils.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Audio.hh>"
+    "${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"
+
+    # Utils & Misc, will disapear
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/AudioUtils.hh"
+
+    # Libs
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Utils.hh"
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Audio.hh"
 
     # Document headers
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh>"
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh>"
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh"
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh"
+    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh"
 )
 
 # More options and warnings
diff --git a/src/Ass/AssFactory.hh b/src/Ass/AssFactory.hh
index 48f849b01cc6ef60afbaa5b4d18627b59d24f439..e5343ec97deae93cbd864fa1844ca2fb72512b4a 100644
--- a/src/Ass/AssFactory.hh
+++ b/src/Ass/AssFactory.hh
@@ -1,7 +1,7 @@
 #ifndef VIVY_ASS_FACTORY_H
 #define VIVY_ASS_FACTORY_H
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "Style.hh"
 #include "Line.hh"
 
diff --git a/src/AudioUtils.cc b/src/AudioUtils.cc
index fde8a4cc30ba1f37e04d8b18585b4f44c3b4dca6..cab709b2e0fb4111bf335f389e605a12b90932e4 100644
--- a/src/AudioUtils.cc
+++ b/src/AudioUtils.cc
@@ -1,5 +1,4 @@
 #include "AudioUtils.hh"
-#include "Audio.hh" // Will be renamed into AudioUtils.hh ...
 
 #define MAXPIXVALUE 7 /* Some magix AV magic stuff */
 
diff --git a/src/Document/CRTPSubDocument.hh b/src/Document/CRTPSubDocument.hh
index 7d1dcebd18c52306bf41cf8f0cb4a4cd97fb1875..a624698b5a6443266d7bbdc631e97194d82a9adb 100644
--- a/src/Document/CRTPSubDocument.hh
+++ b/src/Document/CRTPSubDocument.hh
@@ -5,12 +5,13 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
+#include "../Lib/Audio.hh"
 #include "../Ass/Ass.hh"
 #include <QString>
 #include <memory>
 
-/* Types for the different documents */
+// Types for the different documents
 
 namespace Vivy
 {
@@ -29,7 +30,7 @@ enum class AssDocumentType : quint64 {
     ASS = Vivy::Utils::to_underlying(Vivy::Utils::DocumentType::ASS),
 };
 
-/* The Big CRTP class for all common things to all the subdocuments */
+// The Big CRTP class for all common things to all the subdocuments
 template <class CRTPSubDocumentType, class Document> class CRTPSubDocument {
 public:
     using Type = CRTPSubDocumentType;
@@ -53,7 +54,14 @@ public:
         qDebug() << "Init document from file " << path;
         auto ret      = std::unique_ptr<Document>(new Document());
         ret->filePath = path;
-        ret->initFromPath(path);
+
+        try {
+            ret->initFromPath(path); // May throw
+        } catch (const std::runtime_error &e) {
+            qDebug() << "Failed to init document from file" << path;
+            ret.reset();
+        }
+
         return ret;
     }
 
@@ -68,26 +76,33 @@ public:
     }
 };
 
-/* Audio document */
+// Audio document
 class AudioSubDocument final : public CRTPSubDocument<AudioDocumentType, AudioSubDocument> {
 private:
     const QStringList &suffixList = Vivy::Utils::audioFileSuffix;
 
-    inline void initFromPath([[maybe_unused]] const QString &path) noexcept
+    inline void initFromPath(const QString &path)
     {
+        if (contextPtr)
+            qDebug() << "Replacing the audio contetx by a new one for file" << path;
+        contextPtr.reset(new AudioContext(path)); // May throw
+
         qDebug() << "Audio OK for" << path;
     }
 
     explicit AudioSubDocument() = default;
     friend CRTPSubDocument<AudioDocumentType, AudioSubDocument>;
+
+private:
+    std::unique_ptr<AudioContext> contextPtr;
 };
 
-/* Video document */
+// Video document
 class VideoSubDocument final : public CRTPSubDocument<VideoDocumentType, VideoSubDocument> {
 private:
     const QStringList &suffixList = Vivy::Utils::videoFileSuffix;
 
-    inline void initFromPath([[maybe_unused]] const QString &path) noexcept
+    inline void initFromPath([[maybe_unused]] const QString &path)
     {
     }
 
@@ -95,11 +110,11 @@ private:
     friend CRTPSubDocument<VideoDocumentType, VideoSubDocument>;
 };
 
-/* ASS document */
+// ASS document
 class AssSubDocument final : public CRTPSubDocument<AssDocumentType, AssSubDocument> {
     const QStringList &suffixList = Vivy::Utils::assFileSuffix;
 
-    inline void initFromPath([[maybe_unused]] const QString &path) noexcept
+    inline void initFromPath([[maybe_unused]] const QString &path)
     {
         Ass::AssFactory factory(path);
         factory.getStyles(styles);
diff --git a/src/Document/VivyDocument.cc b/src/Document/VivyDocument.cc
index 74ec47a3f4565c0e9f265f09aaf0a2014199b420..53dd53d970cfc5c0a9deb365aa9e8380753d957b 100644
--- a/src/Document/VivyDocument.cc
+++ b/src/Document/VivyDocument.cc
@@ -1,5 +1,5 @@
 #include "VivyDocument.hh"
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 
 #include <QFileInfo>
 #include <QString>
diff --git a/src/Document/VivyDocument.hh b/src/Document/VivyDocument.hh
index 16bef9dc8ed6eefea979c33d96a364209a9b8638..4d7fa9e4031e5eb3375068aae948eca0557e95e6 100644
--- a/src/Document/VivyDocument.hh
+++ b/src/Document/VivyDocument.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "CRTPSubDocument.hh"
 
 #include <memory>
diff --git a/src/Document/VivyDocumentStore.hh b/src/Document/VivyDocumentStore.hh
index f25fd3f7d374840596fa81ee0df07a38ddc4db66..047a49ab29172b076b88a43af606f681fde0d5fa 100644
--- a/src/Document/VivyDocumentStore.hh
+++ b/src/Document/VivyDocumentStore.hh
@@ -2,7 +2,7 @@
 #define VIVY_DOCUMENTSTORE_H
 
 #include "VivyDocument.hh"
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 
 #include <QMap>
 #include <QString>
diff --git a/src/Audio.cc b/src/Lib/Audio.cc
similarity index 100%
rename from src/Audio.cc
rename to src/Lib/Audio.cc
diff --git a/src/Audio.hh b/src/Lib/Audio.hh
similarity index 100%
rename from src/Audio.hh
rename to src/Lib/Audio.hh
diff --git a/src/Utils.cc b/src/Lib/Utils.cc
similarity index 100%
rename from src/Utils.cc
rename to src/Lib/Utils.cc
diff --git a/src/Utils.hh b/src/Lib/Utils.hh
similarity index 100%
rename from src/Utils.hh
rename to src/Lib/Utils.hh
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 929659291b851e1147cdaa0f2a27935f85d227f7..212abaf9f3312c909a0d2f02a33de2bde7e46c2c 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -1,7 +1,7 @@
 #include "MainWindow.hh"
 #include "DialogHelp.hh"
 #include "VivyDocumentView.hh"
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "../VivyApplication.hh"
 
 #include <functional>
diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh
index 7947e04aa3f34777dee6ec1eda10bde46f0cbcd7..fc3e60ea739a7be2ca75da3e4132855c9afd72af 100644
--- a/src/UI/MainWindow.hh
+++ b/src/UI/MainWindow.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "AudioVisualizer.hh"
 #include "../Document/VivyDocumentStore.hh"
 #include "VivyDocumentView.hh"
diff --git a/src/UI/TimingScene.cc b/src/UI/TimingScene.cc
index 042149bd2c27427c35f64f3d82fa8e3f4046a9f7..7d2e21156582e7c6c77de94958b53785c057cb1a 100644
--- a/src/UI/TimingScene.cc
+++ b/src/UI/TimingScene.cc
@@ -1,5 +1,5 @@
 #include "TimingScene.hh"
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 
 #include <QGraphicsLineItem>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/TimingScene.hh b/src/UI/TimingScene.hh
index ed6742f95b9bbc8addb2c18016f0591c6bf0a53d..860acecbc35628983b137e517385f82da36cf1ef 100644
--- a/src/UI/TimingScene.hh
+++ b/src/UI/TimingScene.hh
@@ -1,7 +1,7 @@
 #ifndef VIVY_TIMING_SCENE_H
 #define VIVY_TIMING_SCENE_H
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "../Ass/Ass.hh"
 #include "TimingBar.hh"
 
diff --git a/src/UI/TimingView.hh b/src/UI/TimingView.hh
index 3358226c85aa09ca5516e89c82c2e9dffaac3c44..b2f11f792576e7d66b1e2628ae2cefb12bb51e67 100644
--- a/src/UI/TimingView.hh
+++ b/src/UI/TimingView.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Utils.hh"
+#include "../Lib/Utils.hh"
 #include "TimingBar.hh"
 #include "TimingScene.hh"