diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
index cbfe36f28918148633843d3a846fc53ed3435f3a..1d60bf14a2eaaec54ee37ebec467e412453a1f7a 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
@@ -118,6 +118,16 @@ import org.videolan.vlc.providers.BrowserProvider
 import org.videolan.vlc.providers.FileBrowserProvider
 import org.videolan.vlc.providers.StorageProvider
 import org.videolan.vlc.providers.medialibrary.sanitizeGroups
+import org.videolan.vlc.remoteaccessserver.RemoteAccessServer.Companion.getServerFiles
+import org.videolan.vlc.remoteaccessserver.RemoteAccessServer.PlayerStatus
+import org.videolan.vlc.remoteaccessserver.RemoteAccessSession.verifyLogin
+import org.videolan.vlc.remoteaccessserver.utils.MediaZipUtils
+import org.videolan.vlc.remoteaccessserver.utils.serveAudios
+import org.videolan.vlc.remoteaccessserver.utils.servePlaylists
+import org.videolan.vlc.remoteaccessserver.utils.serveSearch
+import org.videolan.vlc.remoteaccessserver.utils.serveVideos
+import org.videolan.vlc.remoteaccessserver.websockets.RemoteAccessWebSockets
+import org.videolan.vlc.remoteaccessserver.websockets.WSIncomingMessage
 import org.videolan.vlc.util.FileUtils
 import org.videolan.vlc.util.Permissions
 import org.videolan.vlc.util.RemoteAccessUtils
@@ -132,16 +142,6 @@ import org.videolan.vlc.util.slugify
 import org.videolan.vlc.util.toByteArray
 import org.videolan.vlc.viewmodels.browser.FavoritesProvider
 import org.videolan.vlc.viewmodels.browser.PathOperationDelegate
-import org.videolan.vlc.remoteaccessserver.RemoteAccessServer.Companion.getServerFiles
-import org.videolan.vlc.remoteaccessserver.RemoteAccessServer.PlayerStatus
-import org.videolan.vlc.remoteaccessserver.RemoteAccessSession.verifyLogin
-import org.videolan.vlc.remoteaccessserver.utils.MediaZipUtils
-import org.videolan.vlc.remoteaccessserver.utils.serveAudios
-import org.videolan.vlc.remoteaccessserver.utils.servePlaylists
-import org.videolan.vlc.remoteaccessserver.utils.serveSearch
-import org.videolan.vlc.remoteaccessserver.utils.serveVideos
-import org.videolan.vlc.remoteaccessserver.websockets.RemoteAccessWebSockets
-import org.videolan.vlc.remoteaccessserver.websockets.WSIncomingMessage
 import java.io.BufferedWriter
 import java.io.File
 import java.io.FileNotFoundException
@@ -850,7 +850,7 @@ fun Route.setupRouting(appContext: Context, scope: CoroutineScope) {
             }
             val list = ArrayList<RemoteAccessServer.PlayQueueItem>(stream.size)
             stream.forEachIndexed { index, mediaLibraryItem ->
-                list.add(RemoteAccessServer.PlayQueueItem(3000L + index, mediaLibraryItem.title, " ", 0, mediaLibraryItem.artworkMrl
+                list.add(RemoteAccessServer.PlayQueueItem(mediaLibraryItem.id, mediaLibraryItem.title, " ", 0, mediaLibraryItem.artworkMrl
                         ?: "", false, "", (mediaLibraryItem as MediaWrapper).uri.toString(), true, favorite = mediaLibraryItem.isFavorite))
             }
             call.respondJson(convertToJson(list))
@@ -950,7 +950,10 @@ fun Route.setupRouting(appContext: Context, scope: CoroutineScope) {
 
                 val medias = appContext.getFromMl {
                     if (path?.isNotBlank() == true) {
-                        arrayOf(MLServiceLocator.getAbstractMediaWrapper(Uri.parse(path)))
+                        if (id.toLong() > 0)
+                            arrayOf(getMedia(id.toLong()))
+                        else
+                            arrayOf(MLServiceLocator.getAbstractMediaWrapper(Uri.parse(path)))
                     } else when (type) {
                         "album" -> getAlbum(id.toLong()).tracks
                         "artist" -> getArtist(id.toLong()).tracks
@@ -969,7 +972,7 @@ fun Route.setupRouting(appContext: Context, scope: CoroutineScope) {
                 }
                 if (medias.isEmpty()) call.respond(HttpStatusCode.NotFound)
                 else {
-                    if (medias.size == 1 && medias[0].id == RemoteAccessServer.getInstance(appContext).service?.currentMediaWrapper?.id) {
+                    if (medias.size == 1 && medias[0].id == RemoteAccessServer.getInstance(appContext).service?.currentMediaWrapper?.id && medias[0].uri == RemoteAccessServer.getInstance(appContext).service?.currentMediaWrapper?.uri) {
                         call.respond(HttpStatusCode.OK)
                         return@get
                     }
diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessServer.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessServer.kt
index f79545101914f409c5b32c2e457a7f7dbb3d8586..609087140d125ed6900d4899e966023ce0467fe6 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessServer.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessServer.kt
@@ -59,7 +59,6 @@ import io.ktor.server.plugins.cachingheaders.CachingHeaders
 import io.ktor.server.plugins.callloging.CallLogging
 import io.ktor.server.plugins.compression.Compression
 import io.ktor.server.plugins.compression.matchContentType
-import io.ktor.server.plugins.compression.minimumSize
 import io.ktor.server.plugins.cors.routing.CORS
 import io.ktor.server.plugins.origin
 import io.ktor.server.plugins.partialcontent.PartialContent
@@ -152,6 +151,7 @@ class RemoteAccessServer(private val context: Context) : PlaybackService.Callbac
     var service: PlaybackService? = null
     private val networkSharesResult = ArrayList<MediaLibraryItem>()
     private val networkDiscoveryRunning = AtomicBoolean(false)
+    private var lastPlayedLocation = ""
 
 
     private val _serverStatus = MutableLiveData(ServerStatus.NOT_INIT)
@@ -709,6 +709,14 @@ class RemoteAccessServer(private val context: Context) : PlaybackService.Callbac
      * @param event the event sent
      */
     override fun onMediaPlayerEvent(event: MediaPlayer.Event) {
+        service?.currentMediaLocation?.let {
+            if (it.isNotEmpty() && lastPlayedLocation != service?.currentMediaLocation) {
+                lastPlayedLocation = it
+            }
+        }
+        if (event.type == MediaPlayer.Event.EncounteredError) {
+            AppScope.launch {  RemoteAccessWebSockets.sendToAll(GenericError(context.getString(R.string.invalid_location, lastPlayedLocation))) }
+        }
         if (event.type != MediaPlayer.Event.TimeChanged) return
         if (System.currentTimeMillis() - lastNowPlayingSendTime < NOW_PLAYING_TIMEOUT) return
         lastNowPlayingSendTime = System.currentTimeMillis()
@@ -913,6 +921,7 @@ class RemoteAccessServer(private val context: Context) : PlaybackService.Callbac
     data class MLRefreshNeeded(val refreshNeeded: Boolean = true) : WSMessage(WSMessageType.ML_REFRESH_NEEDED)
     data class BrowserDescription(val path: String, val description: String) : WSMessage(WSMessageType.BROWSER_DESCRIPTION)
     data class PlaybackControlForbidden(val forbidden: Boolean = true): WSMessage(WSMessageType.PLAYBACK_CONTROL_FORBIDDEN)
+    data class GenericError(val text: String): WSMessage(WSMessageType.ERROR)
     data class NetworkShares(val shares: List<PlayQueueItem>): WSMessage(WSMessageType.NETWORK_SHARES)
     data class SearchResults(val albums: List<PlayQueueItem>, val artists: List<PlayQueueItem>, val genres: List<PlayQueueItem>, val playlists: List<PlayQueueItem>, val videos: List<PlayQueueItem>, val tracks: List<PlayQueueItem>)
     data class BreadcrumbItem(val title: String, val path: String)
@@ -961,6 +970,8 @@ class RemoteAccessServer(private val context: Context) : PlaybackService.Callbac
         BROWSER_DESCRIPTION,
         @Json(name = "playback-control-forbidden")
         PLAYBACK_CONTROL_FORBIDDEN,
+        @Json(name = "error")
+        ERROR,
         @Json(name = "network-shares")
         NETWORK_SHARES
     }
diff --git a/build.gradle b/build.gradle
index 27fd9e7d87152332887d4eccf84bb8445bd9fb90..227e656f4b0a5ee4b77c0488144baf4e87c2a6b4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -42,7 +42,7 @@ ext {
     versionCode = 3060330
     versionName = project.hasProperty('forceVlc4') && project.getProperty('forceVlc4') ? '4.0.0-preview - ' + versionCode : '3.6.4 Beta 3'
     vlcMajorVersion = project.hasProperty('forceVlc4') && project.getProperty('forceVlc4') ? 4 : 3
-    remoteAccessVersion = '0.4.0'
+    remoteAccessVersion = '0.5.0'
     libvlcVersion = vlcMajorVersion == 3 ? '3.6.0' :'4.0.0-eap18'
     medialibraryVersion = vlcMajorVersion == 3 ? '0.13.13-rc15' : '0.13.13-vlc4-rc15'
     minSdkVersion = 17
diff --git a/buildsystem/compile-remoteaccess.sh b/buildsystem/compile-remoteaccess.sh
index 1ebe51f2ec8213e23b2c414ee15b58f26212570f..81a716491451443bce163c921a53370da9534671 100755
--- a/buildsystem/compile-remoteaccess.sh
+++ b/buildsystem/compile-remoteaccess.sh
@@ -57,7 +57,7 @@ done
 ##############################
   diagnostic "Setting up the Remote Access project"
 
-  REMOTE_ACCESS_TESTED_HASH=c0e259d9af41d24fc82d7bbafc7df2345d129bc2
+  REMOTE_ACCESS_TESTED_HASH=a0fb5c209f506da0dd1cb1f9ff01b9f9a49eb489
   REMOTE_ACCESS_REPOSITORY=https://code.videolan.org/videolan/remoteaccess
 
   : ${VLC_REMOTE_ACCESS_PATH:="$(pwd -P)/application/remote-access-client/remoteaccess"}