diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
index 30970a2a9fec7df867b17cd0ab27e257081dde98..894a64125b32b0f23f5d2f279c265f7510bfbc11 100644
--- a/src/UI/DocumentViews/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -66,8 +66,19 @@ void
 AudioVisualizer::printSpectrum(QImage pixmap, qreal audioLength) noexcept
 {
     TimingView *timer   = new TimingView(pixmap, audioLength, this);
-    QVBoxLayout *layout = new QVBoxLayout;
+    QHBoxLayout *layout = new QHBoxLayout;
+
+    QSlider *slider = new QSlider(Qt::Vertical);
+    slider->setMinimum(0);
+    slider->setMaximum(100);
+    slider->setSingleStep(0);
+    slider->setPageStep(0);
+    slider->setValue(0);
+
+    connect(slider, &QSlider::valueChanged, timer->getTimingScene()->getAxis(),
+            &TimingAxis::refreshTicks);
 
     layout->addWidget(timer);
+    layout->addWidget(slider);
     setLayout(layout);
 }
diff --git a/src/UI/DocumentViews/TimingAxis.cc b/src/UI/DocumentViews/TimingAxis.cc
index 8abf1d709ba1d881534ca9698a24d19460f7b1ad..d674234b120e394c6af7ae559b91e097febbeb5e 100644
--- a/src/UI/DocumentViews/TimingAxis.cc
+++ b/src/UI/DocumentViews/TimingAxis.cc
@@ -12,9 +12,9 @@
 
 using namespace Vivy;
 
-TimingAxis::TimingAxis(qreal soundLength_, int x0_, int x1_, int y_) noexcept
-    : QGraphicsItem()
-    , audioLength(soundLength_)
+TimingAxis::TimingAxis(qreal audioLength_, int x0_, int x1_, int y_) noexcept
+    : QGraphicsObject()
+    , audioLength(audioLength_)
     , x0(x0_)
     , x1(x1_)
     , y(y_)
@@ -34,6 +34,7 @@ TimingAxis::boundingRect() const
 void
 TimingAxis::refreshTicks()
 {
+    qDebug() << "Refreshing ticks...";
     int nbAvailableTicks        = availableTicks.size();
     int minorTicksIndex         = 0;
     QGraphicsScene *parentScene = scene();
@@ -57,7 +58,7 @@ TimingAxis::refreshTicks()
 }
 
 void
-TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
     if (audioLength == 0)
         return;
diff --git a/src/UI/DocumentViews/TimingAxis.hh b/src/UI/DocumentViews/TimingAxis.hh
index fff80a97c65b73d454de7746c8e675808b7476af..812f040d27d2c19f32e57b6cee226928f2a76671 100644
--- a/src/UI/DocumentViews/TimingAxis.hh
+++ b/src/UI/DocumentViews/TimingAxis.hh
@@ -12,7 +12,9 @@
 
 namespace Vivy
 {
-class TimingAxis final : public QGraphicsItem {
+class TimingAxis final : public QGraphicsObject {
+    Q_OBJECT
+
 public:
     explicit TimingAxis(qreal audioLength, int x0, int x1, int y) noexcept;
     ~TimingAxis() noexcept override = default;
diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc
index b81e90c483b4c30fedc8a25667766fe1f6274246..c58afb16b62cf11c831a7a96a789ae5feb349b10 100644
--- a/src/UI/DocumentViews/TimingScene.cc
+++ b/src/UI/DocumentViews/TimingScene.cc
@@ -26,8 +26,8 @@ TimingScene::TimingScene(QImage img_, qreal soundLength_, QWidget *parent) noexc
     , soundLength(soundLength_)
 {
     QPixmap pixmap(QPixmap::fromImage(img));
-    backgroundImg  = addPixmap(pixmap);
-    TimingAxis *ax = new TimingAxis(soundLength, 0, pixmap.width(), 10);
+    backgroundImg = addPixmap(pixmap);
+    ax            = new TimingAxis(soundLength, 0, pixmap.width(), 10);
     addItem(ax);
     ax->refreshTicks();
 }
@@ -91,3 +91,9 @@ TimingScene::bg() noexcept
 {
     return backgroundImg;
 }
+
+TimingAxis *
+TimingScene::getAxis()
+{
+    return ax;
+}
diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh
index 31f4b5484d19f970863c2dd6cdbaf719cfb3b0a2..67c8749aec1b9d08033d61dcab4c406c34793013 100644
--- a/src/UI/DocumentViews/TimingScene.hh
+++ b/src/UI/DocumentViews/TimingScene.hh
@@ -28,11 +28,14 @@ private:
     qreal soundLength{ 0 };
     Ass::LineWeakPtr currentLine{};
     TimingMode timingMode{ TimingMode::Line };
+    TimingAxis *ax;
 
 public:
     QGraphicsPixmapItem *bg() noexcept;
     void mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept override;
 
+    TimingAxis *getAxis();
+
 private:
     void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
     void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
diff --git a/src/UI/DocumentViews/TimingView.cc b/src/UI/DocumentViews/TimingView.cc
index 8da43146f31237066143e87c7516cc61f26b8ae0..0944c024955b84be365f922ac81a5da189126538 100644
--- a/src/UI/DocumentViews/TimingView.cc
+++ b/src/UI/DocumentViews/TimingView.cc
@@ -5,7 +5,7 @@ using namespace Vivy;
 TimingView::TimingView(QImage img, qreal soundLength, QWidget *parent) noexcept
     : QGraphicsView(parent)
 {
-    scene = new TimingScene(img, soundLength, this);
+    currentScene = new TimingScene(img, soundLength, this);
     setFixedHeight(img.height());
     setMaximumHeight(img.height());
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
@@ -16,7 +16,7 @@ TimingView::TimingView(QImage img, qreal soundLength, QWidget *parent) noexcept
     verticalScrollBar()->setValue(verticalScrollBar()->maximum());
     horizontalScrollBar()->setValue(horizontalScrollBar()->minimum());
 
-    setScene(scene);
+    setScene(currentScene);
 }
 
 void
@@ -34,10 +34,10 @@ TimingView::mousePressEvent(QMouseEvent *event) noexcept
     int x = event->pos().x() + horizontalScrollBar()->value();
 
     QGraphicsItem *got;
-    if ((got = scene->itemAt(pos, QTransform())) == nullptr || got == scene->bg()) {
-        const int height = static_cast<int>(scene->height());
-        scene->addItem(new TimingBar(QLine(x, 0, x, height),
-                                     event->button() == Qt::LeftButton ? startColour : endColour));
+    if ((got = currentScene->itemAt(pos, QTransform())) == nullptr || got == currentScene->bg()) {
+        const int height = static_cast<int>(currentScene->height());
+        currentScene->addItem(new TimingBar(
+            QLine(x, 0, x, height), event->button() == Qt::LeftButton ? startColour : endColour));
     }
 
     QGraphicsView::mousePressEvent(event);
@@ -48,3 +48,9 @@ TimingView::moveScrollBarToBottom(int, int max) noexcept
 {
     verticalScrollBar()->setValue(max);
 }
+
+TimingScene *
+TimingView::getTimingScene() const
+{
+    return static_cast<TimingScene *>(scene());
+}
diff --git a/src/UI/DocumentViews/TimingView.hh b/src/UI/DocumentViews/TimingView.hh
index 4c878ec6c62c2e491b440f2d344529118677626e..c9c8032d6161604361edafd57bdd30097d4f2dcb 100644
--- a/src/UI/DocumentViews/TimingView.hh
+++ b/src/UI/DocumentViews/TimingView.hh
@@ -23,10 +23,12 @@ public:
     explicit TimingView(QImage, qreal, QWidget * = nullptr) noexcept;
     ~TimingView() noexcept override = default;
 
+    TimingScene *getTimingScene() const;
+
     void wheelEvent(QWheelEvent *) noexcept override;
 
 private:
-    TimingScene *scene{ nullptr };
+    TimingScene *currentScene{ nullptr };
 
 public slots:
     void mousePressEvent(QMouseEvent *event) noexcept override;