diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index aaba10b..6082f56 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -163,7 +163,9 @@ Notification.prototype = {
             this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
                                                    vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
                                                    hscrollbar_policy: Gtk.PolicyType.NEVER,
-                                                   vshadows: true });
+                                                   vshadows: true,
+                                                   x: 0,
+                                                   y: 0 });
             this.actor.add(this._scrollArea, { row: 1,
                                                col: 1 });
             this._contentArea = new St.BoxLayout({ name: 'notification-body',
@@ -270,6 +272,21 @@ Notification.prototype = {
         this.urgent = urgent;
     },
 
+    setImage: function(image) {
+      if (this._image)  
+          this._image.destroy();
+
+        let bg = new St.Bin({ x: 0, y: 0, width: 100, height: 100 });
+
+        bg.child = image;
+        bg.child.opacity = 128;
+        bg.child.lower_bottom();
+
+        this._image = bg;
+
+        this.actor.add(bg, { row: 1, col: 1 });
+    },
+
     _styleChanged: function() {
         let [has_spacing, spacing] = this.actor.get_theme_node().get_length('spacing-columns', false);
         this._spacing = has_spacing ? spacing : 0;
diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
index 300cdcc..c0f1b9f 100644
--- a/js/ui/notificationDaemon.js
+++ b/js/ui/notificationDaemon.js
@@ -173,7 +173,7 @@ NotificationDaemon.prototype = {
                     source.setApp(app);
             });
         } else {
-            source.update(icon, hints);
+            source.update(appName, hints);
         }
 
         summary = GLib.markup_escape_text(summary, -1);
@@ -208,6 +208,23 @@ NotificationDaemon.prototype = {
             notification.update(summary, body, true);
         }
 
+        if (hints.image_data || hints.icon_data) {
+            let image = null;
+
+            if (hints.image_data) // The correct way
+                image = hints.image_data;
+            else                  // The legacy way
+                image = hints.icon_data;
+
+            let [width, height, rowStride, hasAlpha,
+                 bitsPerSample, nChannels, data] = image;
+            let bg = St.TextureCache.get_default().load_from_raw(data, data.length,
+                                                                 hasAlpha, width, height,
+                                                                 rowStride, 100);
+            if (bg)
+                notification.setImage(bg);
+        }
+
         if (actions.length) {
             for (let i = 0; i < actions.length - 1; i += 2)
                 notification.addButton(actions[i], actions[i + 1]);
@@ -311,11 +328,6 @@ Source.prototype = {
                 return textureCache.load_uri_async(uri, size, size);
             } else
                 return textureCache.load_icon_name(this._icon, size);
-        } else if (this._iconData) {
-            let [width, height, rowStride, hasAlpha,
-                 bitsPerSample, nChannels, data] = this._iconData;
-            return textureCache.load_from_raw(data, data.length, hasAlpha,
-                                              width, height, rowStride, size);
         } else {
             let stockIcon;
             switch (this._urgency) {
