diff --git a/CMakeLists.txt b/CMakeLists.txt
index bc73970b37abf6bfa8ceca76ddf5616be52aa301..576c61967666eca9f7862575cde798f674be8f49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -90,13 +90,10 @@ target_precompile_headers(Vivy PRIVATE
 # More options and warnings
 target_compile_options(Vivy PRIVATE
     -Wall -Wextra -Wshadow -pedantic
-    -Wcast-align -Wconversion -Wsign-conversion
+    -Wcast-align -Wconversion -Wsign-conversion -Wunused-variable
     -Wmisleading-indentation -Wnull-dereference -Wdouble-promotion
     -Wformat=2
-    $<$<COMPILE_LANGUAGE:CXX>:
-        -Woverloaded-virtual
-        -Wnon-virtual-dtor
-    >
+    -Woverloaded-virtual -Wnon-virtual-dtor
 )
 
 if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
diff --git a/src/Document/CRTPSubDocument.cc b/src/Document/CRTPSubDocument.cc
index 85983b5e5389a04d152ba1fe50efd10d09e387a7..0f293d92880e38ce0aa25e7c2641e1472cb8ccc7 100644
--- a/src/Document/CRTPSubDocument.cc
+++ b/src/Document/CRTPSubDocument.cc
@@ -1,5 +1,8 @@
 #include "CRTPSubDocument.hh"
 
+#include <QJsonObject>
+#include <QJsonDocument>
+
 using namespace Vivy;
 
 // AudioSubDocument implementation
@@ -55,6 +58,24 @@ AudioSubDocument::initFromPath(const QString &path)
     qDebug() << "Audio OK for" << path;
 }
 
+QString
+AudioSubDocument::getElementName() const noexcept
+{
+    return "AudioSubDocument";
+}
+
+QJsonDocument
+AudioSubDocument::getProperties() const noexcept
+{
+    QJsonDocument ret;
+    QJsonObject object;
+    const QJsonDocument contextDocument = contextPtr->getProperties();
+    object.insert("File path", filePath);
+    object.insert("Audio context", contextDocument.object());
+    ret.setObject(object);
+    return ret;
+}
+
 // VideoSubDocument implementation
 
 // Init a video sub-document from a file
diff --git a/src/Document/CRTPSubDocument.hh b/src/Document/CRTPSubDocument.hh
index 29b1c620eceb0e0c442b238a2d43ac37dd67cd13..8189e7b251d6d9c2724f3b83329a8d1e61b2e9e1 100644
--- a/src/Document/CRTPSubDocument.hh
+++ b/src/Document/CRTPSubDocument.hh
@@ -77,6 +77,9 @@ public:
     AudioContext::StreamPtr getDefaultStream() const noexcept;
     int getStreamCount() const noexcept;
     AudioContext::StreamPtr getStream(int index) const noexcept;
+
+    QString getElementName() const noexcept;
+    QJsonDocument getProperties() const noexcept;
 };
 
 // Video document
diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 5e870b9cfd5de51fce3d66b39533eb4926d0df89..f1ba85a1648b31a6541112a6a82da7d9c24e5ad7 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -1,11 +1,14 @@
 #include "MainWindow.hh"
 #include "DialogHelp.hh"
+#include "PropertyView.hh"
 #include "VivyDocumentView.hh"
 #include "../Lib/Utils.hh"
 #include "../VivyApplication.hh"
 
 #include <functional>
+#include <QWindow>
 #include <optional>
+#include <QTreeView>
 #include <QFileInfo>
 #include <QStandardPaths>
 #include <QPixmap>
@@ -125,9 +128,40 @@ MainWindow::MainWindow(QWidget *parent) noexcept
 void
 MainWindow::openProperties(int index) noexcept
 {
-    if (index < 0)
+    if (index < 0) {
+        // TODO: May may want to do something when the user is clicking where
+        // no tab bar is openned (like open document?)
         return;
+    }
+
     qDebug().nospace() << "Tab n°" << index << " was double clicked";
+    VivyDocumentView *current = getTab(index);
+    if (auto document = current->getDocument().lock()) {
+        // FIXME: For now only display the audio document
+        if (auto audioDocuement = document->getAudioSubDocument()) {
+            QWidget *propertyWindow = new QWidget(this);
+            QVBoxLayout *layout     = new QVBoxLayout(propertyWindow);
+            QTreeView *view         = new QTreeView();
+            const QJsonDocument doc = audioDocuement->getProperties();
+            PropertyModel *model    = new PropertyModel(&doc, view);
+
+            view->setModel(model);
+            layout->addWidget(view);
+            propertyWindow->setWindowFlags(Qt::Window | Qt::Popup);
+            propertyWindow->setLayout(layout);
+
+            propertyWindow->show();
+
+            // Wait until the window is closed
+            QEventLoop loop;
+            connect(propertyWindow, SIGNAL(destroyed()), &loop, SLOT(quit()));
+            loop.exec();
+        }
+    }
+
+    else {
+        qCritical().nospace() << "The document from the tab n°" << index << " was already deleted";
+    }
 }
 
 std::weak_ptr<VivyDocument>
diff --git a/src/UI/PropertyView.cc b/src/UI/PropertyView.cc
index 43f42f9c622e447009df42b3ac2e3e135bd91753..ee01924632db446e93bd5899725b82ba741ef129 100644
--- a/src/UI/PropertyView.cc
+++ b/src/UI/PropertyView.cc
@@ -122,13 +122,13 @@ PropertyModel::PropertyModel(QObject *parent) noexcept
     headers.append("value");
 }
 
-PropertyModel::PropertyModel(const QJsonDocument *json, QObject *parent) noexcept
+PropertyModel::PropertyModel(const QJsonDocument *properties, QObject *parent) noexcept
     : QAbstractItemModel(parent)
 {
     headers.append("key");
     headers.append("value");
     try {
-        loadJson(json);
+        loadJson(properties);
     } catch (const std::runtime_error &e) {
         qCritical() << "Failed to create the property model object:" << e.what();
     }