diff --git a/loading.py b/loading.py
index dc05c527bcf6482edb303f9be91069fba7d41f3f..c49e033992f0c95b6a5fe4171335793a288915c9 100644
--- a/loading.py
+++ b/loading.py
@@ -1,6 +1,6 @@
 from st3m.ui.view import BaseView, ViewTransitionBlend
 import gc
-import sys_display
+import time
 
 import song
 import utils
@@ -43,5 +43,10 @@ class LoadingView(BaseView):
         utils.blm_timeout(self, delta_ms)
         if self.vm.transitioning or not self.is_active(): return
         #gc.collect()
-        self.vm.replace(song.SongView(self.app, self.song, self.difficulty), ViewTransitionBlend())
+        t = time.ticks_ms()
+        view = song.SongView(self.app, self.song, self.difficulty)
+        t = time.ticks_ms() - t
+        if t < 2000:
+            time.sleep_ms(2000 - t)
+        self.vm.replace(view, ViewTransitionBlend())
         gc.collect()
diff --git a/midireader.py b/midireader.py
index 26a981dab5896ac5c3dc580970a616b16c28d294..25f26757d498e85bdd44bc732f30d702374569ba 100644
--- a/midireader.py
+++ b/midireader.py
@@ -124,6 +124,9 @@ class MidiReader(midi.MidiOutStream):
     self.track = Track()
     self.nTracks = -1
     self.ignored = False
+    
+    self.current_tempo_marker = 0
+    self.scaledTime = 0
 
   def addEvent(self, track, event):
     time = event.time
@@ -139,26 +142,27 @@ class MidiReader(midi.MidiOutStream):
     #elif track < len(self.tracks):
     #  self.tracks[track].addEvent(time, event)
 
-  def abs_time(self):
-    def ticksToBeats(ticks, bpm):
-      return (60000.0 * ticks) / (bpm * self.ticksPerBeat)
+  def ticksToBeats(self, ticks, bpm):
+    return (60000.0 * ticks) / (bpm * self.ticksPerBeat)
 
+  def abs_time(self):
     if self.bpm:
       currentTime = midi.MidiOutStream.abs_time(self)
 
-      # Find out the current scaled time.
-      # Yeah, this is reeally slow, but fast enough :)
-      scaledTime      = 0.0
-      tempoMarkerTime = 0.0      # Find out the current scaled time.
+      if self.current_tempo_marker == 0:
+        tempoMarkerTime, currentBpm = 0.0, self.bpm 
+      else:
+        tempoMarkerTime, currentBpm = self.tempoMarkers[self.current_tempo_marker - 1]
 
-      currentBpm      = self.bpm
-      for i in range(len(self.tempoMarkers)):
-        time, bpm = self.tempoMarkers[i]
+      while len(self.tempoMarkers) > self.current_tempo_marker:
+        time, bpm = self.tempoMarkers[self.current_tempo_marker]
         if time > currentTime:
           break
-        scaledTime += ticksToBeats(time - tempoMarkerTime, currentBpm)
+        self.scaledTime += self.ticksToBeats(time - tempoMarkerTime, currentBpm)
+        self.current_tempo_marker += 1
         tempoMarkerTime, currentBpm = time, bpm
-      return scaledTime + ticksToBeats(currentTime - tempoMarkerTime, currentBpm)
+
+      return self.scaledTime + self.ticksToBeats(currentTime - tempoMarkerTime, currentBpm)
     return 0.0
 
   def header(self, format, nTracks, division):