def onTrackFinished(self):
        if self.scrobbler is not None:
            deferLater(reactor, 0, self.scrobbler.scrobble, self.playlist.currentTrack)

        if self.playlist.stepNext() is None:
            self.onPlaylistFinished()
            return

        while True:
            try:
                self.player.feed(self.playlist.currentTrack, clear=False)
            except IOError:
                # next track not found on disk
                currentPosition = self.playlist.currentPosition
                self.playlist.remove(currentPosition, emit=False)

                if currentPosition >= len(self.playlist._reg):
                    # no more tracks
                    self.onPlaylistFinished()
                    break
                else:
                    # try next
                    self.playlist.start(currentPosition)
            else:
                # track loaded successfuly
                self.player.start()
                self.onPlaybackStarted()
                break