diff --git a/src/UI/DocumentViews/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
index f48c885e230a0d43675bf75c0e05066c24722018..1ce4b217ee353b8c9c5bfe6374c717f7160aefd5 100644
--- a/src/UI/DocumentViews/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -6,8 +6,8 @@ using namespace Vivy;
 #define MAXPIXVALUE 7 // Some magix AV magic stuff
 
 AudioVisualizer::AudioVisualizer(AudioContext::StreamPtr stream, QWidget *parent)
-    : audioStream(stream),
-    QWidget(parent)
+    : QWidget(parent)
+    , audioStream(stream)
 {
     if (!audioStream->isDecoded()) {
         qDebug() << "Need to decode data for stream" << audioStream->getStreamIndex();
diff --git a/src/UI/DocumentViews/TimingAxis.cc b/src/UI/DocumentViews/TimingAxis.cc
index ca0ed613859d1a18f265dadbb45ea7f758825046..f7bdb827cd322f72df84fab3f6c085fbf12620f2 100644
--- a/src/UI/DocumentViews/TimingAxis.cc
+++ b/src/UI/DocumentViews/TimingAxis.cc
@@ -37,12 +37,13 @@ TimingAxis::refreshTicks()
 {
     qDebug() << "Refreshing ticks...";
     int nbAvailableTicks        = availableTicks.size();
-    int minorTicksIndex         = 0;
     QGraphicsScene *parentScene = scene();
+    int minorTicksIndex         = 0;
+    quint64 length { audioStream->getLength() };
+    quint64 width { quint64(scene()->width()) };
     if (parentScene != nullptr){
         for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++){
-            if (parentScene->width() / (qreal(audioStream->getLength()) * availableTicks[minorTicksIndex]) < minBetweenMinor){
-                minorTicksIndex = minorTicksIndex == 0 ? 0 : minorTicksIndex - 1;
+            if (width * quint64(availableTicks[minorTicksIndex]) / length >= minBetweenMinor){
                 break;
             }
         }
@@ -52,7 +53,7 @@ TimingAxis::refreshTicks()
         minorTicks = availableTicks[minorTicksIndex];
         majorTicks = availableTicks[minorTicksIndex + 1];
     } else {
-        minorTicks = -1;
+        minorTicks = 0;
         majorTicks = availableTicks[minorTicksIndex];
     }
 }
@@ -61,31 +62,43 @@ void TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
     if (audioStream->getLength() == 0)
         return;
 
+    qDebug() << "Painting axis...";
     int ticks_base = y+ticksBase;
     int yText = ticks_base - majorTicksHeight - timeDigitsMargin;
     int majorTicksUp = ticks_base - majorTicksHeight;
     int minorTicksUp = ticks_base - minorTicksHeight;
+    quint64 length { audioStream->getLength() };
+    quint64 width { quint64(scene()->width()) };
 
     painter->drawLine(x0, ticks_base, x1, ticks_base);
 
-    for (int i = majorTicks; i < x1-x0; i += majorTicks){
-        painter->drawText(QPoint(x0+i, yText), msToString(i));
-        painter->drawLine(int(x0+i), majorTicksUp, int(x0+i), ticks_base);
+    for (quint64 i = 0; i < length; i += majorTicks){
+        int pos = x0 + int(posFromMs(i, width, length));
+        painter->drawText(QPoint(pos, yText), msToString(i));
+        painter->drawLine(int(pos), majorTicksUp, int(pos), ticks_base);
     }
-    if (minorTicks >= 0)
-        for (int i = minorTicks; i < x1-x0; i += minorTicks)
+    if (minorTicks > 0){
+        for (quint64 i = 0; i < length; i += minorTicks){
+            quint64 pos = quint64(x0) + posFromMs(i, width, length);
             if (fmod(i, majorTicks) != 0)
-                painter->drawLine(int(x0+i), minorTicksUp, int(x0+i), ticks_base);
+                painter->drawLine(int(pos), minorTicksUp, int(pos), ticks_base);
+        }
+    }
 }
 
 QString
-TimingAxis::msToString(int t) const noexcept
+TimingAxis::msToString(quint64 i) const noexcept
 {
-    qDebug() << "GOT " << t;
-    QString ret(QString::number(t/1000) + QString(".") + QString::number(t % 1000 / majorTicks));
-    if (t >= 60000)
-        ret.prepend(QString::number(t/60000) + QString(":"));
-    if (t >= 360000)
-        ret.prepend(QString::number(t/360000) + QString(":"));
+    QString ret(QStringLiteral("%1").arg(i % 60000 / 1000, i>= 60000 ? 2 : 1, 10, QLatin1Char('0')) + QString(".") + QString::number(i % 1000 / majorTicks));
+    if (i >= 60000)
+        ret.prepend(QString::number(i/60000) + QString(":"));
+    if (i >= 360000)
+        ret.prepend(QString::number(i/360000) + QString(":"));
     return ret;
 }
+
+inline quint64
+TimingAxis::posFromMs(quint64 t, quint64 width, quint64 length) const noexcept
+{
+    return t * width / length;
+}
diff --git a/src/UI/DocumentViews/TimingAxis.hh b/src/UI/DocumentViews/TimingAxis.hh
index 6a8ec7ef96cddc174228f616ccda6ff70bc7f1e1..c8694985e22cc82f464f910c5463c9fd050c58a9 100644
--- a/src/UI/DocumentViews/TimingAxis.hh
+++ b/src/UI/DocumentViews/TimingAxis.hh
@@ -34,10 +34,10 @@ private:
      * qPainter->drawLine() and qPainter->drawText()
      * restrict us to ints anyways
      */
-    QVector<int> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
-    qreal minBetweenMinor{ 5 };
-    int minorTicks;
-    int majorTicks;
+    QVector<quint64> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
+    quint64 minBetweenMinor{ 10 };
+    quint64 minorTicks;
+    quint64 majorTicks;
 
     int minorTicksHeight { 3  };
     int majorTicksHeight { 7  };
@@ -49,7 +49,8 @@ private:
     int x1{ 0 };
     int y{ 0 };
 
-    QString msToString(int t) const noexcept;
+    QString msToString(quint64 i) const noexcept;
+    inline quint64 posFromMs(quint64 t, quint64 width, quint64 length) const noexcept;
 
 protected:
 public slots: