diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index aaba10b..605b285 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -20,6 +20,8 @@ const HIDE_TIMEOUT = 0.2;
 
 const ICON_SIZE = 24;
 
+const NOTIFICATION_BUTTON_SIZE = 36;
+
 const State = {
     HIDDEN:  0,
     SHOWING: 1,
@@ -266,6 +268,30 @@ Notification.prototype = {
         button.connect('clicked', Lang.bind(this, function() { this.emit('action-invoked', id); }));
     },
 
+    addIconButton: function(id, label) {
+        if (!this._buttonBox) {
+            if (this._bannerBodyText)
+                this._addBannerBody();
+
+            let box = new St.BoxLayout({name: 'notification-actions' });
+            this.setActionArea(box, { x_expand: false,
+                                    x_fill: false,
+                                    x_align: St.Align.MIDDLE });
+
+            this._buttonBox = box;
+        }
+
+        let button = new St.Clickable({ reactive: true });
+        button.child = St.TextureCache.get_default().load_icon_name(id, NOTIFICATION_BUTTON_SIZE);
+        // Fall back if we can't find an icon
+        if (!button.child) {
+            this.addButton(id, label);
+        } else {
+            this._buttonBox.add(button);
+            button.connect('clicked', Lang.bind(this, function() { this.emit('action-invoked', id); }));
+        }
+    },
+
     setUrgent: function(urgent) {
         this.urgent = urgent;
     },
diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
index 300cdcc..57eac0b 100644
--- a/js/ui/notificationDaemon.js
+++ b/js/ui/notificationDaemon.js
@@ -210,7 +210,7 @@ NotificationDaemon.prototype = {
 
         if (actions.length) {
             for (let i = 0; i < actions.length - 1; i += 2)
-                notification.addButton(actions[i], actions[i + 1]);
+                notification.addIconButton(actions[i], actions[i + 1]);
             notification.connect('action-invoked', Lang.bind(this, this._actionInvoked, source, id));
         }
 
