diff --git a/backup/backuplib.php b/backup/backuplib.php
index c96bec3361f..836c3a2a413 100644
--- a/backup/backuplib.php
+++ b/backup/backuplib.php
@@ -721,7 +721,7 @@
             /// write local course overrides here?
             write_role_overrides_xml($bf, $context, 3);
             /// write role_assign code here
-            write_role_assignments_xml($bf, $context, 3, $preferences);
+            write_role_assignments_xml($bf, $preferences, $context, 3);
             //Print header end
             fwrite ($bf,end_tag("HEADER",2,true));
         } else {
@@ -990,7 +990,7 @@
                         $context = get_context_instance(CONTEXT_BLOCK, $instance->id);
                         write_role_overrides_xml($bf, $context, 4);
                         /// write role_assign code here
-                        write_role_assignments_xml($bf, $context, 4, $preferences);
+                        write_role_assignments_xml($bf, $preferences, $context, 4);
                         //End Block
                         fwrite ($bf,end_tag('BLOCK',3,true));
                     }
@@ -1128,7 +1128,7 @@
                // get all the role_capabilities overrides in this mod
                write_role_overrides_xml($bf, $context, 6);
                /// write role_assign code here
-               write_role_assignments_xml($bf, $context, 6, $preferences);         
+               write_role_assignments_xml($bf, $preferences, $context, 6);
                /// write role_assign code here
 
                fwrite ($bf,end_tag("MOD",5,true));
@@ -1288,7 +1288,7 @@
 
                 write_role_overrides_xml($bf, $context, 4);
                 /// write role_assign code here
-                write_role_assignments_xml($bf, $context, 4, $preferences);
+                write_role_assignments_xml($bf, $preferences, $context, 4);
                 //End User tag
                 fwrite ($bf,end_tag("USER",3,true));
                 //Do some output
@@ -2670,12 +2670,13 @@
     }
 
     /* function to print xml for assignment */
-    function write_role_assignments_xml($bf, $context, $startlevel, $preferences) {
+    function write_role_assignments_xml($bf, $preferences, $context, $startlevel) {
     /// write role_assign code here
         fwrite ($bf, start_tag("ROLES_ASSIGNMENTS", $startlevel, true));
 
         if ($roles = get_roles_with_assignment_on_context($context)) {
             foreach ($roles as $role) {
+            /// Skip non-selected roles
                 if (!isset($preferences->backuproleassignments[$role->id])) {
                     continue;
                 }
@@ -2686,19 +2687,22 @@
                 fwrite ($bf, start_tag("ASSIGNMENTS", $startlevel+2, true));
                 if ($assignments = get_users_from_role_on_context($role, $context)) {
                     foreach ($assignments as $assignment) {
-                        fwrite ($bf, start_tag("ASSIGNMENT", $startlevel+3, true));
-                        fwrite ($bf, full_tag("USERID", $startlevel+4, false, $assignment->userid));
-                        fwrite ($bf, full_tag("HIDDEN", $startlevel+4, false, $assignment->hidden));
-                        fwrite ($bf, full_tag("TIMESTART", $startlevel+4, false, $assignment->timestart));
-                        fwrite ($bf, full_tag("TIMEEND", $startlevel+4, false, $assignment->timeend));
-                        fwrite ($bf, full_tag("TIMEMODIFIED", $startlevel+4, false, $assignment->timemodified));
-                        if (!isset($assignment->modifierid)) {
-                            $assignment->modifierid = 0;
+                    /// Role assignments are only sent to backup if the user is one target user
+                        if (backup_getid($preferences->backup_unique_code, 'user', $assignment->userid)) {
+                            fwrite ($bf, start_tag("ASSIGNMENT", $startlevel+3, true));
+                            fwrite ($bf, full_tag("USERID", $startlevel+4, false, $assignment->userid));
+                            fwrite ($bf, full_tag("HIDDEN", $startlevel+4, false, $assignment->hidden));
+                            fwrite ($bf, full_tag("TIMESTART", $startlevel+4, false, $assignment->timestart));
+                            fwrite ($bf, full_tag("TIMEEND", $startlevel+4, false, $assignment->timeend));
+                            fwrite ($bf, full_tag("TIMEMODIFIED", $startlevel+4, false, $assignment->timemodified));
+                            if (!isset($assignment->modifierid)) {
+                                $assignment->modifierid = 0;
+                            }
+                            fwrite ($bf, full_tag("MODIFIERID", $startlevel+4, false, $assignment->modifierid));
+                            fwrite ($bf, full_tag("ENROL", $startlevel+4, false, $assignment->enrol));
+                            fwrite ($bf, full_tag("SORTORDER", $startlevel+4, false, $assignment->sortorder));
+                            fwrite ($bf, end_tag("ASSIGNMENT", $startlevel+3, true));
                         }
-                        fwrite ($bf, full_tag("MODIFIERID", $startlevel+4, false, $assignment->modifierid));
-                        fwrite ($bf, full_tag("ENROL", $startlevel+4, false, $assignment->enrol));
-                        fwrite ($bf, full_tag("SORTORDER", $startlevel+4, false, $assignment->sortorder));
-                        fwrite ($bf, end_tag("ASSIGNMENT", $startlevel+3, true));
                     }
                 }
                 fwrite ($bf, end_tag("ASSIGNMENTS", $startlevel+2, true));