diff --git a/lib/Routes/Opencast/UserRoles.php b/lib/Routes/Opencast/UserRoles.php
index 1e60256276bdc3bce109b43d897661b2fd053214..3dc1bf9cd33ae12c59a19c2ea87e575422372585 100644
--- a/lib/Routes/Opencast/UserRoles.php
+++ b/lib/Routes/Opencast/UserRoles.php
@@ -10,6 +10,8 @@ use Opencast\OpencastController;
 use Opencast\Models\VideosUserPerms;
 use Opencast\Models\VideosShares;
 use Opencast\Models\PlaylistsUserPerms;
+use Opencast\Models\Config;
+use Opencast\Helpers\PlaylistMigration;
 
 
 
@@ -25,6 +27,12 @@ class UserRoles extends OpencastController
         // parse username, they are of the type lti:instid:1234567890acbdef
         $plugin_id = $this->container->get('plugin')->getPluginId();
 
+        // Check whether all opencast configs support episode ID role access.
+        $episode_id_role_access = true;
+        foreach (Config::findBySQL('1') as $config) {
+            $episode_id_role_access &= $config->settings['episode_id_role_access'] ?? false;
+        }
+
         $user_id    = null;
         $share_uuid = null;
         $email      = null;
@@ -45,8 +53,11 @@ class UserRoles extends OpencastController
         if (!empty($share_uuid)) {
             $video_share = VideosShares::findByUuid($share_uuid);
             if (!empty($video_share)) {
-                $roles[] = $video_share->video->episode . '_read';
-                $roles[] = 'ROLE_EPISODE_' . $video_share->video->episode . '_READ';
+                if ($episode_id_role_access) {
+                    $roles[] = 'ROLE_EPISODE_' . $video_share->video->episode . '_READ';
+                } else {
+                    $roles[] = $video_share->video->episode . '_read';
+                }
             } else {
                 throw new Error('Share not found', 404);
             }
@@ -96,12 +107,18 @@ class UserRoles extends OpencastController
                     if (!$vperm->video->episode) continue;
 
                     if ($vperm->perm == 'owner' || $vperm->perm == 'write') {
-                        $roles[$vperm->video->episode . '_write'] = $vperm->video->episode . '_write';
-                        $roles['ROLE_EPISODE_' . $vperm->video->episode . '_READ'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_READ';
-                        $roles['ROLE_EPISODE_' . $vperm->video->episode . '_WRITE'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_WRITE';
+                        if ($episode_id_role_access) {
+                            $roles['ROLE_EPISODE_' . $vperm->video->episode . '_READ'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_READ';
+                            $roles['ROLE_EPISODE_' . $vperm->video->episode . '_WRITE'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_WRITE';
+                        } else {
+                            $roles[$vperm->video->episode . '_write'] = $vperm->video->episode . '_write';
+                        }
                     } else {
-                        $roles[$vperm->video->episode . '_read'] = $vperm->video->episode . '_read';
-                        $roles['ROLE_EPISODE_' . $vperm->video->episode . '_READ'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_READ';
+                        if ($episode_id_role_access) {
+                            $roles['ROLE_EPISODE_' . $vperm->video->episode . '_READ'] = 'ROLE_EPISODE_' . $vperm->video->episode . '_READ';
+                        } else {
+                            $roles[$vperm->video->episode . '_read'] = $vperm->video->episode . '_read';
+                        }
                     }
                 }
 
@@ -114,8 +131,11 @@ class UserRoles extends OpencastController
                 $stmt_courseware->execute([':user_id' => $user_id]);
 
                 while($episode = $stmt_courseware->fetchColumn()) {
-                    $roles[$episode . '_read'] = $episode . '_read';
-                    $roles['ROLE_EPISODE_' . $episode . '_READ'] = 'ROLE_EPISODE_' . $episode . '_READ';
+                    if ($episode_id_role_access) {
+                        $roles['ROLE_EPISODE_' . $episode . '_READ'] = 'ROLE_EPISODE_' . $episode . '_READ';
+                    } else {
+                        $roles[$episode . '_read'] = $episode . '_read';
+                    }
                 }
 
                 $stmt_courses = \DBManager::get()->prepare("SELECT seminar_id FROM seminar_user
@@ -162,39 +182,41 @@ class UserRoles extends OpencastController
 
                 // Handle playlist roles
 
-                // get all playlists the user has permissions on
-                foreach (PlaylistsUserPerms::findByUser_id($user_id) as $pperm) {
-                    if ($pperm->perm == 'owner' || $pperm->perm == 'write') {
-                        $roles[$pperm->playlist->service_playlist_id . '_write'] = 'PLAYLIST_' . $pperm->playlist->service_playlist_id . '_write';
-                    } else {
-                        $roles[$pperm->playlist->service_playlist_id . '_read'] = 'PLAYLIST_' . $pperm->playlist->service_playlist_id . '_read';
+                if (PlaylistMigration::isConverted()) {
+                    // get all playlists the user has permissions on
+                    foreach (PlaylistsUserPerms::findByUser_id($user_id) as $pperm) {
+                        if ($pperm->perm == 'owner' || $pperm->perm == 'write') {
+                            $roles[$pperm->playlist->service_playlist_id . '_write'] = 'PLAYLIST_' . $pperm->playlist->service_playlist_id . '_write';
+                        } else {
+                            $roles[$pperm->playlist->service_playlist_id . '_read'] = 'PLAYLIST_' . $pperm->playlist->service_playlist_id . '_read';
+                        }
                     }
-                }
 
-                // find playlists with write access
-                $stmt = \DBManager::get()->prepare('SELECT service_playlist_id FROM oc_playlist AS op
+                    // find playlists with write access
+                    $stmt = \DBManager::get()->prepare('SELECT service_playlist_id FROM oc_playlist AS op
                     INNER JOIN oc_playlist_seminar AS ops ON (ops.playlist_id = op.id)
                     WHERE ops.seminar_id IN (:courses)'
-                );
-                $stmt->bindValue(':courses', $courses_write, \StudipPDO::PARAM_ARRAY);
-                $stmt->execute();
+                    );
+                    $stmt->bindValue(':courses', $courses_write, \StudipPDO::PARAM_ARRAY);
+                    $stmt->execute();
 
-                foreach ($stmt->fetchAll(\PDO::FETCH_COLUMN) as $service_playlist_id) {
-                    $roles[$service_playlist_id . '_write'] = 'PLAYLIST_' . $service_playlist_id . '_write';
-                }
+                    foreach ($stmt->fetchAll(\PDO::FETCH_COLUMN) as $service_playlist_id) {
+                        $roles[$service_playlist_id . '_write'] = 'PLAYLIST_' . $service_playlist_id . '_write';
+                    }
 
-                // find playlists with read access
-                $stmt = \DBManager::get()->prepare('SELECT service_playlist_id FROM oc_playlist AS op
+                    // find playlists with read access
+                    $stmt = \DBManager::get()->prepare('SELECT service_playlist_id FROM oc_playlist AS op
                     INNER JOIN oc_playlist_seminar AS ops ON (ops.playlist_id = op.id)
                     WHERE ops.seminar_id IN (:courses)
                     AND ops.visibility = "visible"'
-                );
-                $stmt->bindValue(':courses', $courses_read, \StudipPDO::PARAM_ARRAY);
-                $stmt->execute();
+                    );
+                    $stmt->bindValue(':courses', $courses_read, \StudipPDO::PARAM_ARRAY);
+                    $stmt->execute();
 
-                foreach ($stmt->fetchAll(\PDO::FETCH_COLUMN) as $service_playlist_id) {
-                    // All seminar members have read permission on visible playlists
-                    $roles[$service_playlist_id . '_read'] = 'PLAYLIST_' . $service_playlist_id . '_read';
+                    foreach ($stmt->fetchAll(\PDO::FETCH_COLUMN) as $service_playlist_id) {
+                        // All seminar members have read permission on visible playlists
+                        $roles[$service_playlist_id . '_read'] = 'PLAYLIST_' . $service_playlist_id . '_read';
+                    }
                 }
             }
         } else {