diff --git a/src/Lib/Ass/Syl.cc b/src/Lib/Ass/Syl.cc
index 65d29a85cd80ce92f5a259edfed905f59f6440f1..2c5a3d217a8d5a86ceee4d5ee0de88427a2db40b 100644
--- a/src/Lib/Ass/Syl.cc
+++ b/src/Lib/Ass/Syl.cc
@@ -35,3 +35,9 @@ Syl::getContent() const noexcept
 {
     return content;
 }
+
+quint64
+Syl::getDuration() const noexcept
+{
+    return duration;
+}
diff --git a/src/Lib/Ass/Syl.hh b/src/Lib/Ass/Syl.hh
index 461746e90d6f8acf4027ddab62a3fcedf58bdb40..e112eef3a10a00c59cfad1eea6fc60b24d1b2e0d 100644
--- a/src/Lib/Ass/Syl.hh
+++ b/src/Lib/Ass/Syl.hh
@@ -21,7 +21,7 @@ public:
         ReadAssTags // Read ass tags
     };
 
-    explicit Syl(const Syl &) noexcept = default;
+    //explicit Syl(const Syl &) noexcept = default; // FIXME: define copy contructor
     explicit Syl(Line *const, const QString &,
                  ConstructMode mode = ConstructMode::ReadAssTags) noexcept;
 
@@ -29,6 +29,7 @@ public:
     ~Syl() noexcept             = default;
 
     QString getContent() const noexcept;
+    quint64 getDuration() const noexcept;
 
 private:
     static quint64 getDurationFromString(const QString &) noexcept;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
index 5d1b702ae1a2e10fdde1a1e2a62049508eb1d18f..12e2df3ae25b8db396a02748a57371608952820c 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
@@ -4,12 +4,29 @@
 #include <QGraphicsScene>
 
 #include "TimingUtils.hh"
+#include "TimingSyl.hh"
+#include "TimingSeparator.hh"
 
 using namespace Vivy;
 
-TimingLine::TimingLine(QGraphicsItem *parent)
-    : QGraphicsItem(parent)
+TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent)
+    : QGraphicsObject(parent)
+      , line(*lineptr)
 {
+    setPos(TimingUtils::posFromMs(int(line.getStart())*10), TimingUtils::axisHeight());
+    int currentTime = 0;
+    QVector<Ass::Syl> syls = line.getContent();
+    for (int i = 0; i < syls.size(); ++i){
+        int endSyl = currentTime + 10 * int(syls.at(i).getDuration());
+
+        TimingSyl* timingSyl = new TimingSyl(syls.at(i), currentTime, this);
+
+        // TODO: Here create the TimingSeparator and connect
+        TimingSeparator* timingSeparatorStart = new TimingSeparator(currentTime, i != 0 ? TimingSeparator::SeparatorStyle::Middle : TimingSeparator::SeparatorStyle::Start, this);
+        TimingSeparator* timingSeparatorEnd = new TimingSeparator(endSyl, i != syls.size()-1 ? TimingSeparator::SeparatorStyle::Middle : TimingSeparator::SeparatorStyle::End, this);
+
+        currentTime = endSyl;
+    }
 }
 
 QRectF
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
index 894a1431962ca97380ca56d5ed9844ef67092cc9..6b8be066cb4fce77f0f80294c5264d553e5b54c9 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
@@ -1,15 +1,21 @@
 #pragma once
 
-#include <QGraphicsItem>
+#include <QGraphicsObject>
+
+#include "../../../Lib/Ass/Ass.hh"
 
 namespace Vivy
 {
-class TimingLine final : public QGraphicsItem {
+class TimingLine final : public QGraphicsObject {
+    Q_OBJECT
 public:
-    explicit TimingLine(QGraphicsItem *parent = nullptr);
+    explicit TimingLine(Ass::Line*, QGraphicsItem* = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
+
+private:
+    Ass::Line line;
 };
 
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
index 78f5195eb2bc115036225fe4ad1ea351c9505286..53ea04fcdd66a4e6c3dda8e43a43d3ab6d523e58 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
@@ -20,6 +20,10 @@
 
 #include "TimingUtils.hh"
 
+#include "TimingAxis.hh"
+#include "TimingCursor.hh"
+#include "TimingLine.hh"
+
 using namespace Vivy;
 
 TimingScene::TimingScene(QWidget *parent) noexcept
@@ -60,7 +64,7 @@ TimingScene::rebuildScene()
 
     TimingUtils::setAudioHeight(pixmap.height());
     TimingUtils::setAudioWidth(img.width());
-    TimingUtils::setAudioLength(audioStream->getLength());
+    TimingUtils::setAudioLength(int(audioStream->getLength()));
 
     ax = new TimingAxis();
     addItem(ax);
@@ -76,7 +80,11 @@ TimingScene::rebuildScene()
     if (auto assDocument = currentVivyDocument->getAssSubDocument()) {
         QVector<Ass::LinePtr> lines = assDocument->getLines();
         for (int i = 0; i < lines.size(); ++i) {
-            if (auto line = lines.at(i).get()) {}
+            if (auto line = lines.at(i).get()) {
+                TimingLine* timingLine = new TimingLine(line);
+                addItem(timingLine);
+                // TODO: Here connect timingLine.linechanged to lineassmodel or something
+            }
         }
     }
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
index 832923b11650f383b0ab23eea9acef7e22324a65..bfa2f3ba892e61a2d00b3f7a378a7ad63fa061ca 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
@@ -3,7 +3,6 @@
 #include "../../../Lib/Utils.hh"
 #include "../../../Lib/Audio.hh"
 #include "../../../Lib/Ass/Ass.hh"
-#include "TimingBar.hh"
 #include "TimingAxis.hh"
 #include "TimingCursor.hh"
 
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
index a06827c5a6ddf522d117ac9b542a43c372ea12a1..aae1083b801c13ab279ae2670796b36152d1ed51 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
@@ -7,18 +7,56 @@
 
 using namespace Vivy;
 
-TimingSeparator::TimingSeparator(QGraphicsItem *parent)
-    : QGraphicsItem(parent)
+TimingSeparator::TimingSeparator(int time, SeparatorStyle style_, QGraphicsItem* parent)
+    : QGraphicsObject(parent)
+    , style(style_)
 {
+    setPos(TimingUtils::posFromMs(time), 0);
+
+    switch(style){
+    case SeparatorStyle::Start:
+        pen = QPen(QColor(0, 0, 255));
+        break;
+    case SeparatorStyle::Middle:
+        pen = QPen(QColor(180, 0, 180));
+        break;
+    case SeparatorStyle::End:
+        pen = QPen(QColor(255, 0, 0));
+        break;
+    }
+    // Putting even-size width seems to be undefined behaviour for pixel drawing : stick to odd
+    pen.setWidth(1);
 }
 
 QRectF
 TimingSeparator::boundingRect() const
 {
-    return QRectF();
+    return QRectF(-widthPaw, 0, 2*widthPaw, TimingUtils::audioHeight());
 }
 
 void
 TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 {
+    painter->setPen(pen);
+    int height = TimingUtils::audioHeight();
+
+    int top = 1 + pen.width()/2;
+    int bottom = height - 1 - pen.width()/2;
+
+    painter->drawLine(0, top, 0, bottom);
+
+    switch(style){
+    case SeparatorStyle::Start:
+        painter->drawLine(0, top, widthPaw, top);
+        painter->drawLine(0, bottom, widthPaw, bottom);
+        break;
+    case SeparatorStyle::Middle:
+        painter->drawLine(-widthPaw, top, widthPaw, top);
+        painter->drawLine(-widthPaw, bottom, widthPaw, bottom);
+        break;
+    case SeparatorStyle::End:
+        painter->drawLine(-widthPaw, top, 0, top);
+        painter->drawLine(-widthPaw, bottom, 0, bottom);
+        break;
+    }
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
index a86b8e934c12cefb6a65801bc94819d7530ecac6..72d648c73220e3d8c300ae3f7cc2de10ecb702ef 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
@@ -1,15 +1,28 @@
 #pragma once
 
-#include <QGraphicsItem>
+#include <QGraphicsObject>
 
 namespace Vivy
 {
-class TimingSeparator final : public QGraphicsItem {
+class TimingSeparator final : public QGraphicsObject {
+    Q_OBJECT
 public:
-    explicit TimingSeparator(QGraphicsItem *parent = nullptr);
+    enum class SeparatorStyle {
+        Start,
+        Middle,
+        End
+    };
+
+public:
+    explicit TimingSeparator(int, SeparatorStyle style = SeparatorStyle::Middle, QGraphicsItem *parent = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
+
+private:
+    SeparatorStyle style;
+    int widthPaw = 5;
+    QPen pen;
 };
 
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
index 93dcc959079f430c120777d3f0d4edcdb75e446a..80ec74e14d1939e2b9cc75ac5f39d21b50a8b388 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
@@ -4,21 +4,25 @@
 #include <QGraphicsScene>
 
 #include "TimingUtils.hh"
+#include "TimingSeparator.hh"
 
 using namespace Vivy;
 
-TimingSyl::TimingSyl(QGraphicsItem *parent)
-    : QGraphicsItem(parent)
+TimingSyl::TimingSyl(Ass::Syl syl_, int startTime, QGraphicsItem *parent)
+    : QGraphicsObject(parent)
+      , syl(syl_)
 {
+    setPos(TimingUtils::posFromMs(startTime), 0);
 }
 
 QRectF
 TimingSyl::boundingRect() const
 {
-    return QRectF();
+    return QRectF(0, 0, int(syl.getDuration()),TimingUtils::audioHeight());
 }
 
 void
 TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 {
+    painter->drawText(boundingRect(), Qt::AlignCenter, syl.getContent());
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
index 768beb42b61ca051baecbfa7c730d35ce0b41505..fcf74aea60089e621e2b2347f52f286b5ad8213c 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
@@ -1,15 +1,21 @@
 #pragma once
 
-#include <QGraphicsItem>
+#include <QGraphicsObject>
+
+#include "../../../Lib/Ass/Ass.hh"
 
 namespace Vivy
 {
-class TimingSyl final : public QGraphicsItem {
+class TimingSyl final : public QGraphicsObject {
+    Q_OBJECT
 public:
-    explicit TimingSyl(QGraphicsItem *parent = nullptr);
+    explicit TimingSyl(Ass::Syl, int, QGraphicsItem *parent = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
+
+private:
+    Ass::Syl syl;
 };
 
 }