diff --git a/app/models/shared_access.rb b/app/models/shared_access.rb
index eb88a555c0bb28c38f881e699607e579f6b790c6..6451bd42e00dde2b58c20f36c7e73f166cd64f11 100644
--- a/app/models/shared_access.rb
+++ b/app/models/shared_access.rb
@@ -2,4 +2,5 @@
 
 class SharedAccess < ApplicationRecord
   belongs_to :room
+  belongs_to :user
 end
diff --git a/lib/tasks/migrations/migrations.rake b/lib/tasks/migrations/migrations.rake
index 8ab761e250d2bbb82aed17c736ee449645326212..117d5fdd20f5b9ce253c9715d1431120fa854c65 100644
--- a/lib/tasks/migrations/migrations.rake
+++ b/lib/tasks/migrations/migrations.rake
@@ -1,4 +1,5 @@
 # frozen_string_literal: true
+# rubocop:disable all
 
 namespace :migrations do
   DEFAULT_ROLES_MAP = { "admin" => "Administrator", "user" => "User" }.freeze
@@ -15,21 +16,22 @@ namespace :migrations do
 
     Role.unscoped
         .select(:id, :name)
+        .includes(:role_permissions)
         .where.not(name: COMMON[:filtered_roles])
         .find_each(batch_size: COMMON[:batch_size]) do |r|
       # RolePermissions
-      role_permissions_hash = RolePermission.where(role_id: r.id).pluck(:name, :value).to_h
-      # Returns nil if the RolePermission value is the same as the corresponding default value in V3
+      role_permissions_hash = r.role_permissions.pluck(:name, :value).to_h
+
       role_permissions = {
-        CreateRoom: role_permissions_hash['can_create_rooms'] == "true" ? nil : "false",
-        CanRecord: role_permissions_hash['can_launch_recording'] == "true" ? nil : "false",
-        ManageUsers: role_permissions_hash['can_manage_users'] == "false" ? nil : "true",
-        ManageRoles: role_permissions_hash['can_edit_roles'] == "false" ? nil : "true",
+        CreateRoom: role_permissions_hash['can_create_rooms'] == "true" ? "true" : "false",
+        CanRecord: role_permissions_hash['can_launch_recording'] == "true" ? "true" : "false",
+        ManageUsers: role_permissions_hash['can_manage_users'] == "true" ? "true" : "false",
+        ManageRoles: role_permissions_hash['can_edit_roles'] == "true" ? "true" : "false",
         # In V3, can_manage_room_recordings is split into two distinct permissions: ManageRooms and ManageRecordings
-        ManageRooms: role_permissions_hash['can_manage_rooms_recordings'] == "false" ? nil : "true",
-        ManageRecordings: role_permissions_hash['can_manage_room_recordings'] == "false" ? nil : "true",
-        ManageSiteSettings: role_permissions_hash['can_edit_site_settings'] == "false" ? nil : "true"
-      }.compact
+        ManageRooms: role_permissions_hash['can_manage_rooms_recordings'] == "true" ? "true" : "false",
+        ManageRecordings: role_permissions_hash['can_manage_rooms_recordings'] == "true" ? "true" : "false",
+        ManageSiteSettings: role_permissions_hash['can_edit_site_settings'] == "true" ? "true" : "false"
+      }
 
       params = { role: { name: r.name.capitalize,
                          role_permissions: role_permissions } }
@@ -115,15 +117,15 @@ namespace :migrations do
                         {}
                       else
                         {
-                          record: parsed_room_settings["recording"] == false ? nil : "true",
-                          muteOnStart: parsed_room_settings["muteOnStart"] == false ? nil : "true",
-                          glAnyoneCanStart: parsed_room_settings["anyoneCanStart"] == false ? nil : "true",
-                          glAnyoneJoinAsModerator: parsed_room_settings["joinModerator"] == false ? nil : "true",
-                          guestPolicy: parsed_room_settings["requireModeratorApproval"] == false ? nil : "ASK_MODERATOR",
-                        }.compact
+                          record: parsed_room_settings["recording"] == true ? "true" : "false",
+                          muteOnStart: parsed_room_settings["muteOnStart"] == true ? "true" : "false",
+                          glAnyoneCanStart: parsed_room_settings["anyoneCanStart"] == true ? "true" : "false",
+                          glAnyoneJoinAsModerator: parsed_room_settings["joinModerator"] == true ? "true" : "false",
+                          guestPolicy: parsed_room_settings["requireModeratorApproval"] == true ? "ASK_MODERATOR" : "ALWAYS_ACCEPT"
+                        }
                       end
 
-      shared_users_emails = SharedAccess.joins(:user).where(room_id: r.id).pluck(:'users.email')
+      shared_users_emails = r.shared_access.joins(:user).pluck(:'users.email')
 
       params = { room: { friendly_id: r.uid,
                          name: r.name,