     }
 
     func fetchTrackDetails() {
-        weak var _self = self
-        playlistLoader.fetchTracks().on(
-            next: { (index, track) in
-                UIScheduler().schedule {
-                    if let __self = _self {
-                        __self.tableView?.reloadRowsAtIndexPaths([NSIndexPath(forItem: index, inSection: 0)],
-                            withRowAnimation: UITableViewRowAnimation.None)
-                        Playlist.notifyChange(.Updated(__self.playlist))
-                    }
-                }
-                return
-            }, error: { error in
-                self.tableView.reloadData()
-            }, completed: {
-                self.tableView.reloadData()
-        }).start()
+        playlistLoader.fetchTracks()
     }
 
     // MARK: UITableViewDataSource

        ptc.callback = {(playlist: Playlist?) in
            if let p = playlist {
                switch p.appendTracks(tracks) {
                case .Success:
                    if p == self.playlist {
                        var indexes: [NSIndexPath] = []
                        let offset = p.tracks.count-1
                        for i in offset..<tracks.count + offset {
                            indexes.append(NSIndexPath(forItem: i, inSection: 0))
                        }
                        self.tableView.insertRowsAtIndexPaths(indexes, withRowAnimation: UITableViewRowAnimation.Fade)
                    }
                case .Failure:
                    let message = "Failed to add tracks".localize()
                    UIAlertController.show(self, title: "MusicFav", message: message, handler: { action in })

            }
            return
        })
    }

    func isPlaylistPlaying() -> Bool {
