diff --git a/bigbluebutton-client/branding/default/style/css/V2Theme.css b/bigbluebutton-client/branding/default/style/css/V2Theme.css
index 314a9db970b168379cb30977e5e5395956fea7e9..557b1e7c8bc1734c651c6e69e531a6bcb28c9992 100755
--- a/bigbluebutton-client/branding/default/style/css/V2Theme.css
+++ b/bigbluebutton-client/branding/default/style/css/V2Theme.css
@@ -1792,6 +1792,7 @@ users|UsersWindow {
 	iconSettings    : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Settings");
 	iconClearStatus : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_ClearStatus");
 	iconRooms       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Rooms");
+	iconSaveNames   : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Save");
 	horizontalAlign : center;
 }
 
diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties
index 0651c28fd2b9b8aaedfe16a28fc3062a57c3e390..9dff7aba6a4556e851b345db49cecdfa64e5bf43 100755
--- a/bigbluebutton-client/locale/en_US/bbbResources.properties
+++ b/bigbluebutton-client/locale/en_US/bbbResources.properties
@@ -180,6 +180,9 @@ bbb.users.settings.muteAll = Mute All Users
 bbb.users.settings.muteAllExcept = Mute All Users Except Presenter
 bbb.users.settings.unmuteAll = Turn Off Meeting Mute
 bbb.users.settings.clearAllStatus = Clear all status icons
+bbb.users.settings.userExport = Save User Names
+bbb.users.userExport.complete = User names saved
+bbb.users.userExport.error = Error saving user names
 bbb.users.emojiStatusBtn.toolTip = Update my status icon
 bbb.users.roomMuted.text = Users Muted
 bbb.users.roomLocked.text = Viewers Locked
@@ -191,7 +194,7 @@ bbb.users.muteMeBtnTxt.muted = Muted
 bbb.users.waitingBtn.label = {0} users waiting
 bbb.users.guestPolicyBtn.label = Guest policy
 bbb.users.guestPolicyBtn.toolTip = Change guest policy
-bbb.users.usersGrid.contextmenu.exportusers = Copy User Names
+bbb.users.usersGrid.contextmenu.exportusers = Save User Names
 bbb.users.usersGrid.accessibilityName = Users List. Use the arrow keys to navigate.
 bbb.users.usersGrid.nameItemRenderer = Name
 bbb.users.usersGrid.nameItemRenderer.youIdentifier = you
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
index 6a45a3efbe79b708e25d1c308fd3571a7bf56182..1b7ecb8729215fe2d598c80114cc21e6b2c0c536 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
@@ -71,6 +71,7 @@ $Id: $
 		
 		import mx.binding.utils.BindingUtils;
 		import mx.collections.ArrayCollection;
+		import mx.controls.Alert;
 		import mx.controls.Menu;
 		import mx.controls.dataGridClasses.DataGridColumn;
 		import mx.controls.listClasses.IListItemRenderer;
@@ -329,13 +330,29 @@ $Id: $
       
       private function exportUsersItemHandler(e:ContextMenuEvent):void {
         if (e.target.caption == ResourceUtil.getInstance().getString("bbb.users.usersGrid.contextmenu.exportusers")) {
-          var userNames:String = "";
-          var returnStr:String = (Capabilities.os.indexOf("Windows") >= 0 ? "\r\n" : "\r");
-          for (var i:int = 0; i < users.length; i++) {
-            userNames += users[i].name + returnStr;
+          exportUserNamesToFile();
+        }
+      }
+      
+      private function exportUserNamesToFile():void {
+        var userNames:String = "";
+        var returnStr:String = (Capabilities.os.indexOf("Windows") >= 0 ? "\r\n" : "\r");
+        if (users.length > 0) {
+          userNames = users[0].name;
+          for (var i:int = 1; i < users.length; i++) {
+            userNames += returnStr + users[i].name;
           }
-          System.setClipboard(userNames);
         }
+        
+        var fileRef:FileReference = new FileReference();
+        
+        fileRef.addEventListener(Event.COMPLETE, function(evt:Event):void {
+          Alert.show(ResourceUtil.getInstance().getString('bbb.users.userExport.complete'), "", Alert.OK);
+        });
+        fileRef.addEventListener(IOErrorEvent.IO_ERROR, function(evt:Event):void {
+          Alert.show(ResourceUtil.getInstance().getString('bbb.users.userExport.error'), "", Alert.OK);
+        });
+        fileRef.save(userNames, "roster.txt");
       }
       
       private function updateNumberofUsers(numUsers:int):void {
@@ -426,6 +443,8 @@ $Id: $
 		if (partOptions.enableGuestUI) {
 			paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.guestSettings'), handler: guestSettings});
 		}
+		
+		paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.userExport'), icon: getStyle('iconSaveNames'), handler: exportUserNamesToFile});
         
         // make sure the previous menu is closed before opening a new one
         // This could be improved to include a flag that tells if the menu is open,