diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index ceaccaa..b95ff2b 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -69,6 +69,8 @@ const UserListItem = new Lang.Class({
 
         this._userWidget = new UserWidget.UserWidget(this.user);
         layout.add(this._userWidget.actor);
+        this._userWidget.connect('label-updated',
+                                 Lang.bind(this, this._onLabelUpdated));
 
         this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
                                                  scale_x: 0 });
@@ -78,6 +80,10 @@ const UserListItem = new Lang.Class({
         this._onUserChanged();
     },
 
+    _onLabelUpdated: function(newLabel) {
+        this.actor.accessible_name = newLabel.text;
+    },
+
     _onUserChanged: function() {
         this._updateLoggedIn();
     },
diff --git a/js/ui/userWidget.js b/js/ui/userWidget.js
index 314aae0..4253674 100644
--- a/js/ui/userWidget.js
+++ b/js/ui/userWidget.js
@@ -7,6 +7,7 @@ const AccountsService = imports.gi.AccountsService;
 const GLib = imports.gi.GLib;
 const Gio = imports.gi.Gio;
 const Lang = imports.lang;
+const Signals = imports.signals;
 const St = imports.gi.St;
 
 const Params = imports.misc.params;
@@ -75,7 +76,7 @@ const UserWidgetLabel = new Lang.Class({
                                              y_align: Clutter.ActorAlign.CENTER });
         this.add_child(this._userNameLabel);
 
-        this._currentLabel = null;
+        this.currentLabel = null;
 
         this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
         this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
@@ -114,9 +115,9 @@ const UserWidgetLabel = new Lang.Class({
              natUserNameWidth, natUserNameHeight] = this._userNameLabel.get_preferred_size();
 
         if (natRealNameWidth <= availWidth)
-            this._currentLabel = this._realNameLabel;
+                        _updateLabel (this._realNameLabel);
         else
-            this._currentLabel = this._userNameLabel;
+                        _updateLabel (this._userNameLabel);
 
         let childBox = new Clutter.ActorBox();
         childBox.x1 = 0;
@@ -124,11 +125,17 @@ const UserWidgetLabel = new Lang.Class({
         childBox.x2 = availWidth;
         childBox.y2 = availHeight;
 
-        this._currentLabel.allocate(childBox, flags);
+        this.currentLabel.allocate(childBox, flags);
+    },
+
+    _updateLabel: function (newLabel) {
+        this.currentLabel = newLabel;
+
+        this.emit('label-updated', newLabel);
     },
 
     vfunc_paint: function() {
-        this._currentLabel.paint();
+        this.currentLabel.paint();
     },
 
     _updateUser: function() {
@@ -141,6 +148,7 @@ const UserWidgetLabel = new Lang.Class({
         }
     },
 });
+Signals.addSignalMethods(UserWidgetLabel.prototype);
 
 const UserWidget = new Lang.Class({
     Name: 'UserWidget',
@@ -155,14 +163,19 @@ const UserWidget = new Lang.Class({
         this._avatar = new Avatar(user);
         this.actor.add_child(this._avatar.actor);
 
-        this._label = new UserWidgetLabel(user);
-        this.actor.add_child(this._label);
+        this.label = new UserWidgetLabel(user);
+        this.actor.add_child(this.label);
+        this.label.connect('label-updated', Lang.bind(this, this._labelUpdated));
 
         this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUser));
         this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUser));
         this._updateUser();
     },
 
+    _labelUpdated: function (newLabel) {
+        this.emit('label-updated', newLabel);
+    },
+
     _onDestroy: function() {
         if (this._userLoadedId != 0) {
             this._user.disconnect(this._userLoadedId);
@@ -179,3 +192,4 @@ const UserWidget = new Lang.Class({
         this._avatar.update();
     }
 });
+Signals.addSignalMethods(UserWidget.prototype);
