diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
index 5f41f1688a6d87c4c48a68b27961b28dc932b553..94b1c7f1abe7440b615f0383531337a0a04e7ab0 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
@@ -16,19 +16,21 @@
 
 using namespace Vivy;
 
-TimingAxis::TimingAxis(AudioContext::StreamPtr stream) noexcept
+TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int height_, int width_) noexcept
     : QGraphicsObject()
     , audioStream(stream)
+    , height(height_)
+    , width(width_)
 {
-    setPos(0, height);
     pen = QPen(axisColour);
     pen.setWidth(penWidth);
+    refreshTicks();
 }
 
 QRectF
 TimingAxis::boundingRect() const
 {
-    return QRectF(0, penWidth, scene()->width(), -height - penWidth);
+    return QRectF(0, penWidth, width + 2*penWidth, -height - penWidth);
 }
 
 /*
@@ -38,13 +40,10 @@ TimingAxis::boundingRect() const
 void
 TimingAxis::refreshTicks()
 {
-    qDebug() << "Refreshing ticks...";
     int nbAvailableTicks        = availableTicks.size();
-    QGraphicsScene *parentScene = scene();
     int minorTicksIndex         = 0;
     int length{ int(audioStream->getLength()) };
-    int width{ int(parentScene->width()) };
-    if (parentScene != nullptr) {
+    if (width != 0 && length != 0){
         for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) {
             if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) {
                 break;
@@ -52,6 +51,7 @@ TimingAxis::refreshTicks()
         }
     }
 
+    prepareGeometryChange();
     if (minorTicksIndex < nbAvailableTicks - 1) {
         minorTicks = availableTicks[minorTicksIndex];
         majorTicks = availableTicks[minorTicksIndex + 1];
@@ -59,7 +59,6 @@ TimingAxis::refreshTicks()
         minorTicks = 0;
         majorTicks = availableTicks[minorTicksIndex];
     }
-    update();
 }
 
 void
@@ -70,7 +69,6 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi
         return;
 
     int yText = -majorTicksHeight - timeDigitsMargin;
-    int width{ int(scene()->width()) };
 
     painter->setPen(pen);
     painter->drawLine(0, 0, audioLength, 0);
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
index 6359e7e620131e9ef312c57366e8b5034e38694c..1f7196e48a3a4d248bab70bc90fe568957355bb7 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
@@ -20,7 +20,7 @@ class TimingAxis final : public QGraphicsObject {
     Q_OBJECT
 
 public:
-    explicit TimingAxis(AudioContext::StreamPtr stream) noexcept;
+    explicit TimingAxis(AudioContext::StreamPtr stream, int height, int width) noexcept;
     ~TimingAxis() noexcept override = default;
 
     QRectF boundingRect() const override;
@@ -32,6 +32,8 @@ private:
     int penWidth{ 1 };
 
     AudioContext::StreamPtr audioStream;
+    int height{ 30 };
+    int width{ 0 };
 
     /*
      * We use ints here because
@@ -47,7 +49,6 @@ private:
     int majorTicksHeight{ 7 };
     int timeDigitsHeight{ 20 };
     int timeDigitsMargin{ 3 };
-    int height{ 30 };
 
     QString msToString(int i) const noexcept;
 
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
index b4327dedefe8aff068ca5f4593246997bc533e10..230827e017d68c6d8861f4c1ed7a103251f494f2 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
@@ -30,14 +30,19 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p
     , img(img_)
     , audioStream(stream)
 {
-    ax = new TimingAxis(stream);
+    int timingAxisHeight = 30;
 
+    // We put a common origin for the items at the bottom of the axis
     QPixmap pixmap(QPixmap::fromImage(img));
     backgroundImg = addPixmap(pixmap);
-    setSceneRect(QRect(pixmap.rect()));
+    backgroundImg->setPos(0, timingAxisHeight);
+
+    ax = new TimingAxis(stream, timingAxisHeight, pixmap.width());
     addItem(ax);
+    ax->setPos(0, timingAxisHeight);
 
-    ax->refreshTicks();
+    // Freeze the scene boundaries
+    setSceneRect(sceneRect());
 
     if (auto assDocument = currentVivyDocument->getAssSubDocument()) {
         QVector<Ass::LinePtr> lines = assDocument->getLines();
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
index bf971817726a67389304aa8d59150f1fda2154f9..8c31a37524e9ae029a1caa40ac9d38bc5cbfb82c 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
@@ -7,17 +7,18 @@ TimingView::TimingView(QGraphicsScene *scene, QImage img, AudioContext::StreamPt
     : QGraphicsView(scene, parent)
     , audioStream(stream)
 {
-    //setFixedHeight(img.height());
-    //setMaximumHeight(img.height());
+    int interestingViewHeight = int(scene->height() + horizontalScrollBar()->height());
+    setFixedHeight(interestingViewHeight);
+    setMaximumHeight(interestingViewHeight);
+
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
     setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum);
     QObject::connect(verticalScrollBar(), &QScrollBar::rangeChanged, this,
                      &TimingView::moveScrollBarToBottom);
-    verticalScrollBar()->setValue(verticalScrollBar()->maximum());
-    //horizontalScrollBar()->setValue(horizontalScrollBar()->minimum());
 
-    centerOn(0, height());
+    // We want to see the bottom part of the spectrum, the top is less important if a few pixels get trimmed
+    centerOn(0, interestingViewHeight);
 }
 
 void