diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 46b7abf..95f8a58 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -85,7 +85,7 @@ StTooltip StLabel {
     padding: 2px 12px;
     background-color: rgba(0,0,0,0.9);
     color: #ffffff;
-    font-size: 0.8em;
+    font-size: 1em;
     font-weight: normal;
     text-align: center;
 }
@@ -470,7 +470,7 @@ StTooltip StLabel {
     background: rgba(0,0,0,0.8);
     border: 1px solid rgba(128,128,128,0.40);
     border-radius: 10px;
-    font-size: 9pt;
+    font-size: 10.5pt;
     padding: 2px 8px;
     -shell-caption-spacing: 4px;
 }
@@ -602,7 +602,8 @@ StTooltip StLabel {
     padding: 4px 12px;
     spacing: 4px;
     color: #6f6f6f;
-    font-size: .8em;
+    font-size: 10.5pt;
+    font-weight: bold;
 }
 
 .search-section-results {
@@ -648,12 +649,15 @@ StTooltip StLabel {
 
 .icon-grid {
     spacing: 36px;
-    -shell-grid-item-size: 118px;
+    -shell-grid-item-size: 142px;
+}
+
+.icon-grid .overview-icon {
 }
 
 .contact-grid {
     spacing: 36px;
-    -shell-grid-item-size: 272px; /* 2 * -shell-grid-item-size + spacing */
+    -shell-grid-item-size: 320px; /* 2 * -shell-grid-item-size + spacing */
 }
 
 .icon-grid .overview-icon {
@@ -716,15 +720,15 @@ StTooltip StLabel {
     border-radius: 4px;
     padding: 3px;
     border: 1px rgba(0,0,0,0);
-    font-size: 7.5pt;
+    font-size: 10.5pt;
     color: white;
     transition-duration: 100;
     text-align: center;
 }
 
 .contact {
-    width: 272px; /* Same width as two normal results + spacing */
-    height: 118px; /* Aspect ratio = 1.75. Normal US business card ratio */
+    width: 320px; /* Same width as two normal results + spacing */
+    height: 182px; /* Aspect ratio = 1.75. Normal US business card ratio */
     border-radius: 4px;
     padding: 3px;
     border: 1px rgba(0,0,0,0);
@@ -793,7 +797,6 @@ StTooltip StLabel {
 }
 
 .app-well-menu {
-    font-size: 9pt;
 }
 
 /* LookingGlass */
@@ -1481,7 +1484,7 @@ StTooltip StLabel {
     border-radius: 24px;
     padding: 20px;
 
-    font-size: 9pt;
+    font-size: 10.5pt;
     color: white;
 }
 
diff --git a/data/theme/running-indicator.svg b/data/theme/running-indicator.svg
index ebe7ecf..9238cef 100644
--- a/data/theme/running-indicator.svg
+++ b/data/theme/running-indicator.svg
@@ -10,8 +10,8 @@
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="119.97824"
-   height="119.97824"
+   width="240"
+   height="240"
    id="svg7355"
    version="1.1"
    inkscape:version="0.48.1 r9760"
@@ -36,24 +36,25 @@
      guidetolerance="10"
      inkscape:pageopacity="1"
      inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1141"
+     inkscape:window-width="1680"
+     inkscape:window-height="992"
      id="namedview4173"
-     showgrid="false"
-     inkscape:zoom="8.1348081"
-     inkscape:cx="81.120662"
-     inkscape:cy="58.117986"
+     showgrid="true"
+     inkscape:zoom="5.752178"
+     inkscape:cx="93.986979"
+     inkscape:cy="38.16182"
      inkscape:window-x="0"
      inkscape:window-y="26"
      inkscape:window-maximized="1"
-     inkscape:current-layer="g30864" />
+     inkscape:current-layer="g30864"
+     units="px" />
   <defs
      id="defs7357">
     <radialGradient
        xlink:href="#linearGradient36429"
        id="radialGradient7461"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.011539,0,0,0.57582113,-0.39262194,71.83807)"
+       gradientTransform="matrix(2.0230882,0,0,1.1516625,-11.785367,-28.327323)"
        cx="47.428951"
        cy="167.16817"
        fx="47.428951"
@@ -97,31 +98,31 @@
        fx="49.067139"
        cy="242.50381"
        cx="49.067139"
-       gradientTransform="matrix(1.1891549,0,0,0.15252127,-9.281289,132.52772)"
+       gradientTransform="matrix(2.3783218,0,0,0.30504791,-29.562791,93.054104)"
        gradientUnits="userSpaceOnUse"
        id="radialGradient7488"
        xlink:href="#linearGradient36471" />
   </defs>
   <g
      id="layer1"
-     transform="matrix(1.6213276,0,0,1.6213276,-431.6347,-272.5745)">
+     transform="matrix(1.6213276,0,0,1.6213276,-431.6347,-152.55275)">
     <g
        style="display:inline"
        id="g30864"
        transform="translate(255.223,70.118091)">
       <rect
-         ry="3.4593496"
-         rx="3.4593496"
-         y="99.596962"
-         x="12.596948"
-         height="71.116341"
-         width="71.116341"
+         ry="6.9188204"
+         rx="6.9187341"
+         y="27.191435"
+         x="14.193904"
+         height="142.23517"
+         width="142.2334"
          id="rect14000"
-         style="opacity:0.37187500000000001;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
+         style="opacity:0.371875;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
       <path
          id="rect34520"
-         d="m 83.273151,166.72152 c 0,1.96759 -1.584022,3.55163 -3.551629,3.55163 l -63.443032,0 c -1.967608,0 -3.551648,-1.58402 -3.551643,-3.55164 0,-5.85318 0,-5.85318 0,0"
-         style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
+         d="m 155.54702,161.4429 c 0,3.93525 -3.16805,7.10339 -7.10329,7.10339 l -126.886704,0 c -3.935236,0 -7.103332,-3.1681 -7.103322,-7.10341 0,-11.70656 0,-11.70656 0,0"
+         style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:2.00002265;stroke-opacity:1"
          connector-curvature="0"
          inkscape:connector-curvature="0"
          sodipodi:nodetypes="ccscc" />
diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js
index e65f966..bf1b35c 100644
--- a/js/ui/iconGrid.js
+++ b/js/ui/iconGrid.js
@@ -3,11 +3,13 @@
 const Clutter = imports.gi.Clutter;
 const Shell = imports.gi.Shell;
 const St = imports.gi.St;
+const Pango = imports.gi.Pango;
 
 const Lang = imports.lang;
 const Params = imports.misc.params;
 
 const ICON_SIZE = 48;
+const PADDING = 5;
 
 
 function BaseIcon(label, createIcon) {
@@ -21,7 +23,8 @@ BaseIcon.prototype = {
                                         showLabel: true });
         this.actor = new St.Bin({ style_class: 'overview-icon',
                                   x_fill: true,
-                                  y_fill: true });
+                                  y_fill: true,
+                                  request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
         this.actor._delegate = this;
         this.actor.connect('style-changed',
                            Lang.bind(this, this._onStyleChanged));
@@ -41,8 +44,15 @@ BaseIcon.prototype = {
 
         box.add_actor(this._iconBin);
 
+        this._debug = false;
+
         if (params.showLabel) {
+            //if (label.indexOf("Claws") != -1)
+            //    this._debug = true;
             this.label = new St.Label({ text: label });
+            this.label.clutter_text.line_wrap = true;
+            this.label.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
+            this.label.clutter_text.ellipsize = Pango.EllipsizeMode.END;
             box.add_actor(this.label);
         } else {
             this.label = null;
@@ -59,41 +69,80 @@ BaseIcon.prototype = {
         let availWidth = box.x2 - box.x1;
         let availHeight = box.y2 - box.y1;
 
-        let iconSize = availHeight;
+        if (this._debug)
+            log("allocate: " + box.x1 + "," + box.y1 + " (" + availWidth + "x" + availHeight + ")");
 
         let [iconMinHeight, iconNatHeight] = this._iconBin.get_preferred_height(-1);
         let [iconMinWidth, iconNatWidth] = this._iconBin.get_preferred_width(-1);
-        let preferredHeight = iconNatHeight;
 
         let childBox = new Clutter.ActorBox();
 
         if (this.label) {
-            let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(-1);
-            preferredHeight += this._spacing + labelNatHeight;
+            // In order to support multiple lines and ellipsing, we consider
+            // the minimum space for the label to be whatever is left after
+            // the icon has taken what it wants.
+            let labelMinHeight = availHeight - iconNatHeight - this._spacing * 3;
+            let [dummy, labelNatHeight] = this.label.get_preferred_height(availWidth);
+
+            let preferredHeight = iconNatHeight + this._spacing * 3 + labelNatHeight;
 
             let labelHeight = availHeight >= preferredHeight ? labelNatHeight
                                                              : labelMinHeight;
-            iconSize -= this._spacing + labelHeight;
 
             childBox.x1 = 0;
             childBox.x2 = availWidth;
-            childBox.y1 = iconSize + this._spacing;
+            childBox.y1 = iconNatHeight + this._spacing;
             childBox.y2 = childBox.y1 + labelHeight;
             this.label.allocate(childBox, flags);
         }
 
         childBox.x1 = Math.floor((availWidth - iconNatWidth) / 2);
-        childBox.y1 = Math.floor((iconSize - iconNatHeight) / 2);
         childBox.x2 = childBox.x1 + iconNatWidth;
+        childBox.y1 = this._spacing;
         childBox.y2 = childBox.y1 + iconNatHeight;
         this._iconBin.allocate(childBox, flags);
     },
 
     _getPreferredWidth: function(actor, forHeight, alloc) {
-        this._getPreferredHeight(actor, -1, alloc);
+        if (this._debug)
+            log("getPreferredWidth: " + forHeight);
+        let [iconMinWidth, iconNatWidth] = this._iconBin.get_preferred_width(forHeight);
+        alloc.min_size = iconMinWidth;
+        alloc.natural_size = iconNatWidth;
+
+        if (this.label) {
+            let labelHeight;
+
+            if (forHeight < 0) {
+                labelHeight = forHeight;
+            } else {
+                let [iconMinHeight, iconNatHeight] = this._iconBin.get_preferred_height(-1);
+                labelHeight = forHeight - iconNatHeight - this._spacing;
+                if (labelHeight < 0)
+                    labelHeight = 0;
+            }
+
+            if (this._debug)
+                log("getPreferredWidth (label): " + labelHeight);
+
+            let [labelMinWidth, labelNatWidth] = this.label.get_preferred_width(labelHeight);
+
+            if (labelMinWidth > alloc.min_size)
+                alloc.min_size = labelMinWidth;
+            if (labelNatWidth > alloc.natural_size)
+                alloc.natural_size = labelNatWidth;
+        }
+
+        alloc.min_size += this._spacing * 2
+        alloc.natural_size += this._spacing * 2
+
+        if (this._debug)
+            log("=>" + alloc.min_size + " to " + alloc.natural_size);
     },
 
     _getPreferredHeight: function(actor, forWidth, alloc) {
+        if (this._debug)
+            log("getPreferredHeight: " + forWidth);
         let [iconMinHeight, iconNatHeight] = this._iconBin.get_preferred_height(forWidth);
         alloc.min_size = iconMinHeight;
         alloc.natural_size = iconNatHeight;
@@ -103,6 +152,12 @@ BaseIcon.prototype = {
             alloc.min_size += this._spacing + labelMinHeight;
             alloc.natural_size += this._spacing + labelNatHeight;
         }
+
+        alloc.min_size += this._spacing * 2
+        alloc.natural_size += this._spacing * 2
+
+        if (this._debug)
+            log("=>" + alloc.min_size + " to " + alloc.natural_size);
     },
 
     // This can be overridden by a subclass, or by the createIcon
@@ -244,13 +299,29 @@ IconGrid.prototype = {
         let columnIndex = 0;
         let rowIndex = 0;
         for (let i = 0; i < children.length; i++) {
-            let [childMinWidth, childMinHeight, childNaturalWidth, childNaturalHeight]
-                = children[i].get_preferred_size();
+            let childMinWidth, childMinHeight, childNaturalWidth, childNaturalHeight;
+            let width, height;
+
+            if (children[i].get_request_mode() == Clutter.RequestMode.HEIGHT_FOR_WIDTH) {
+                [childMinWidth, childNaturalWidth]
+                    = children[i].get_preferred_width(this._item_size);
+                width = Math.min(this._item_size, childNaturalWidth);
+                [childMinHeight, childNaturalHeight]
+                    = children[i].get_preferred_height(width);
+                height = Math.min(this._item_size, childNaturalHeight);
+            } else {
+                [childMinHeight, childNaturalHeight]
+                    = children[i].get_preferred_height(this._item_size);
+                height = Math.min(this._item_size, childNaturalHeight);
+                [childMinWidth, childNaturalWidth]
+                    = children[i].get_preferred_width(height);
+                width = Math.min(this._item_size, childNaturalWidth);
+            }
+
+            width = this._item_size;
 
-            /* Center the item in its allocation horizontally */
-            let width = Math.min(this._item_size, childNaturalWidth);
+            /* Center the item in its allocation */
             let childXSpacing = Math.max(0, width - childNaturalWidth) / 2;
-            let height = Math.min(this._item_size, childNaturalHeight);
             let childYSpacing = Math.max(0, height - childNaturalHeight) / 2;
 
             let childBox = new Clutter.ActorBox();
