         }
 
         // Update UI
+        let progress = nowPlayingProgress
+        let isPlaying = avPlayer.rate != 0
         delegate?.updateTrackInfo(with: trackInfo, artwork: albumImage)
-        updatePlaybackInfo()
+        delegate?.updatePlaybackState(isPlaying: isPlaying, progress: progress)
 
         // Update the Now Playing Info
         var nowPlayingInfo: [String : Any] = [
-            MPNowPlayingInfoPropertyElapsedPlaybackTime: 0 as NSNumber,
-            MPNowPlayingInfoPropertyPlaybackRate: 1 as NSNumber,
+            MPNowPlayingInfoPropertyElapsedPlaybackTime: progress.elapsedTime as NSNumber,
+            MPNowPlayingInfoPropertyPlaybackRate: avPlayer.rate as NSNumber,
             MPMediaItemPropertyTitle: trackInfo.title,
             MPMediaItemPropertyPlaybackDuration: currentItem.asset.duration.seconds,
             MPMediaItemPropertyArtwork: MPMediaItemArtwork(boundsSize: albumImage.size) { size in

            _self.seek(to: event.positionTime) {}
            return .success
        }
        remote.changePlaybackPositionCommand.addTarget(self) { player in

        }
    }

    private func addPeriodicTimeObserver() {

            avPlayer.rate = newValue.rate
            updatePlaybackInfo()
        }
    }

    var nowPlayingProgress: NowPlayingProgress {
        return NowPlayingProgress(
            elapsedTime: avPlayer.currentTime().seconds,
            duration: avPlayer.currentItem?.asset.duration.seconds ?? 0.0
        )
    }

    init?(itemUrls: [URL], delegate: MediaPlayerDelegate?) {
