diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9051c25e3f96269df42e62d1d650cbc5b8ebbbb8..5d1d913f01bcc3adfb2c394d6c8745125a3bdf25 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 
+# Find all dependencies
 find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
 find_library(AVCODEC_LIBRARY avcodec REQUIRED)
@@ -20,16 +21,17 @@ find_library(AVUTIL_LIBRARY avutil 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/*.c"
+)
+file(GLOB Vivy_INC
+    "${CMAKE_CURRENT_SOURCE_DIR}/inc/vivy/*.h"
+)
 set(PROJECT_SOURCES
-    main.cpp
-    mainwindow.cpp
-    mainwindow.h
-    audioVisualizer.h
-    audioVisualizer.cpp
-    timer.h
-    timer.cpp
-    timingBar.h
-    timingBar.cpp
+    ${Vivy_SRC}
+    ${Vivy_INC}
 )
 
 if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
@@ -43,14 +45,17 @@ else()
     )
 endif()
 
+# Link dependencies to Vivy
 target_link_libraries(Vivy PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
 target_link_libraries(Vivy PRIVATE ${AVCODEC_LIBRARY})
 target_link_libraries(Vivy PRIVATE ${AVUTIL_LIBRARY})
 target_link_libraries(Vivy PRIVATE ${SWRESAMPLE_LIBRARY})
 target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
 
+target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
+
 set_target_properties(Vivy PROPERTIES
-    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
+    MACOSX_BUNDLE_GUI_IDENTIFIER vivy.iiens.net
     MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
     MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
 )
diff --git a/audioVisualizer.h b/inc/vivy/audioVisualizer.h
similarity index 92%
rename from audioVisualizer.h
rename to inc/vivy/audioVisualizer.h
index dd07f3a63c930c0c5aacc399d7716ce3df78f955..04fa824651546b7fa8f772376ca94af4f0d1f54a 100644
--- a/audioVisualizer.h
+++ b/inc/vivy/audioVisualizer.h
@@ -16,7 +16,7 @@ class AudioVisualizer : public QWidget
 
 public:
     AudioVisualizer(QWidget *parent = nullptr);
-    ~AudioVisualizer();
+    ~AudioVisualizer() = default;
 
 
 public slots:
diff --git a/mainwindow.h b/inc/vivy/mainwindow.h
similarity index 95%
rename from mainwindow.h
rename to inc/vivy/mainwindow.h
index 0545c3730123a510eced27bcb95b3055c13d7853..7d613b7363989610078dcb557e0b00ace1f7d96e 100644
--- a/mainwindow.h
+++ b/inc/vivy/mainwindow.h
@@ -17,7 +17,7 @@ class MainWindow : public QMainWindow
 
 public:
     MainWindow(QWidget *parent = nullptr);
-    ~MainWindow();
+    ~MainWindow() = default;
 
 private slots:
     void openAudioFile();
diff --git a/timer.h b/inc/vivy/timer.h
similarity index 93%
rename from timer.h
rename to inc/vivy/timer.h
index 40157d5ac545e9231f7e59e5d2f50a8fe90e69a4..67a7af669ab88fd5381e8c3d9f26d317c5f53456 100644
--- a/timer.h
+++ b/inc/vivy/timer.h
@@ -14,7 +14,8 @@
 #include <QVector>
 #include <QGraphicsLineItem>
 #include <QGraphicsPixmapItem>
-#include "timingBar.h"
+
+#include <vivy/timingBar.h>
 
 #define TO_ADD_TO_IMAGE_HEIGHT 2
 
@@ -24,7 +25,7 @@ class Timer : public QGraphicsView
 
 public:
     Timer(QImage img, QWidget *parent = nullptr);
-    ~Timer();
+    ~Timer() = default;
 
     QPainter painter;
     QGraphicsScene* scene = new QGraphicsScene;
diff --git a/timingBar.h b/inc/vivy/timingBar.h
similarity index 96%
rename from timingBar.h
rename to inc/vivy/timingBar.h
index 3519d4a373295848e2c41578ef8a363fb8981a60..b956a3cd824819185d5c4d8287d7f74902a5215f 100644
--- a/timingBar.h
+++ b/inc/vivy/timingBar.h
@@ -18,7 +18,7 @@ class TimingBar : public QGraphicsLineItem
 {
 public:
     TimingBar(QLine, QColor, QWidget *parent = nullptr);
-    ~TimingBar();
+    ~TimingBar() = default;
 
 protected:
     //void mousePressEvent(QGraphicsSceneMouseEvent*);
diff --git a/audioVisualizer.cpp b/src/audioVisualizer.cc
similarity index 79%
rename from audioVisualizer.cpp
rename to src/audioVisualizer.cc
index 4441f070d776365986ab335d0a4e098e9f918ac0..0d78e6b47d86545646d1b86571e73eb6480213dc 100644
--- a/audioVisualizer.cpp
+++ b/src/audioVisualizer.cc
@@ -1,14 +1,10 @@
-#include "audioVisualizer.h"
+#include <vivy/audioVisualizer.h>
 
 AudioVisualizer::AudioVisualizer(QWidget *parent)
     : QWidget(parent)
 {
 }
 
-AudioVisualizer::~AudioVisualizer()
-{
-}
-
 void AudioVisualizer::printSpectrum(QImage pixmap)
 {
     Timer *timer = new Timer(pixmap);
diff --git a/main.cpp b/src/main.cc
similarity index 84%
rename from main.cpp
rename to src/main.cc
index 9dbace13de68b99a53cf3848be17e1125b83df0d..a378040f73bc96e67a047aa6f1c29ad4ea096a80 100644
--- a/main.cpp
+++ b/src/main.cc
@@ -1,4 +1,4 @@
-#include "mainwindow.h"
+#include <vivy/mainwindow.h>
 
 #include <QApplication>
 
diff --git a/mainwindow.cpp b/src/mainwindow.cc
similarity index 97%
rename from mainwindow.cpp
rename to src/mainwindow.cc
index 8dc3350189d33b40d0abb62d271616f75fd7b0ee..3f513c18e12d21db23b0fedb4e8bcd95610ecae6 100644
--- a/mainwindow.cpp
+++ b/src/mainwindow.cc
@@ -1,7 +1,8 @@
-#include "mainwindow.h"
+#include <vivy/mainwindow.h>
+
 #include <iostream>
-#include <string.h>
-#include <stdio.h>
+#include <cstring>
+#include <cstdio>
 #include <QStandardPaths>
 
 extern "C" {
@@ -30,11 +31,8 @@ MainWindow::MainWindow(QWidget *parent)
     statusBar()->showMessage("QSimulate has started");
 }
 
-MainWindow::~MainWindow()
-{
-}
-
-int decode_audio_file(const char* path, const int sample_rate, double** data, int* size) {
+static int
+decode_audio_file(const char* path, const int sample_rate, double** data, int* size) {
 
     // initialize all muxers, demuxers and protocols for libavformat
     // (does nothing if called twice during the course of one program execution)
diff --git a/timer.cpp b/src/timer.cc
similarity index 96%
rename from timer.cpp
rename to src/timer.cc
index 975090082153cc10eab42b9f12dafe73685f16a8..53bd62ba922556460762bb51cd363367a7b246d5 100644
--- a/timer.cpp
+++ b/src/timer.cc
@@ -1,4 +1,4 @@
-#include "timer.h"
+#include <vivy/timer.h>
 
 Timer::Timer(QImage img, QWidget *parent)
     : QGraphicsView(parent),
@@ -12,11 +12,6 @@ Timer::Timer(QImage img, QWidget *parent)
     setScene(scene);
 }
 
-Timer::~Timer()
-{
-}
-
-
 void Timer::mousePressEvent(QMouseEvent* event){
     QPoint pos = event->pos();
     pos.rx() += horizontalScrollBar()->value();
diff --git a/timingBar.cpp b/src/timingBar.cc
similarity index 95%
rename from timingBar.cpp
rename to src/timingBar.cc
index 7edc742bda13cb4837a67fb802f82e564e7cdc34..25ddc752a74583df4a626c454b89a71853162c04 100644
--- a/timingBar.cpp
+++ b/src/timingBar.cc
@@ -1,4 +1,4 @@
-#include "timingBar.h"
+#include <vivy/timingBar.h>
 
 #define BAR_DEMI_WIDTH 2
 #define BAR_WIDTH 4
@@ -12,10 +12,6 @@ TimingBar::TimingBar(QLine line, QColor color, QWidget *parent)
     setCursor(Qt::PointingHandCursor);
 }
 
-TimingBar::~TimingBar()
-{
-}
-
 /*
 void TimingBar::mousePressEvent(QGraphicsSceneMouseEvent* event){
     fprintf(stderr, "CLICKED\n");