diff --git gnome-about/gnome-about.in gnome-about/gnome-about.in
index a73ee6e..8d79fe6 100755
--- gnome-about/gnome-about.in
+++ gnome-about/gnome-about.in
@@ -36,7 +36,7 @@ import gtk
 
 import gnome
 import cairo
-from math import pi
+from math import pi, ceil
 
 import os, sys, random, time, gettext
 
@@ -337,6 +337,7 @@ class VertAnimatedLabel (AnimatedLabel):
     '''Vertically animated label'''
 
     rewind_text       = ""
+    no_resize         = False
     last_label_height = 0
 
     def rewind_animate (self):
@@ -344,7 +345,9 @@ class VertAnimatedLabel (AnimatedLabel):
         self.source = None
         if self.state == -2:
             self.item = self.rewind_text
+            self.no_resize = True
             self.make_label ()
+            self.no_resize = False
             label_height = self.label.size_request ()[1]
             total_height = self.height + label_height
             self.pos = float (self.last_label_height) / total_height
@@ -421,12 +424,44 @@ class VertAnimatedLabel (AnimatedLabel):
         self.current = gtk.Alignment (0.0, 1.0)
         label_height = self.label.size_request ()[1]
         height = self.size_request ()[1]
+        if not self.no_resize:
+            if height < label_height:
+                self.set_size_request (self.width, label_height)
+                height = label_height
+                self.height = height
+            elif height > label_height * 2.5:
+                self.set_size_request (self.width, int (label_height * 2.5))
+                height = int (label_height * 2.5)
+                self.height = height
+            self.label.connect ("style-set", self.on_style_set)
         self.current.set_size_request (-1, 2 * label_height + height)
         self.current.add (self.label)
         self.put (self.current, 0, - label_height)
         self.pos = 1.0
         self.show_all ()
 
+    def on_style_set (self, *args):
+        '''Update Layout height if a style change (such as a font change)
+made the label bigger than the container'''
+        label_height = self.label.get_layout ().get_pixel_size ()[1] + 10
+        height = self.size_request ()[1]
+        if height < label_height:
+            self.set_size_request (self.size_request ()[0], label_height)
+            height = label_height
+        elif height > label_height * 2.5:
+            self.set_size_request (self.size_request ()[0],
+                                   int (label_height * 2.5))
+            height = int (label_height * 2.5)
+        else:
+            return
+        self.height = height
+        if self.state == 1:
+            width = self.current.size_request ()[0]
+            self.current.set_size_request (width, 2 * label_height + height)
+            self.move (self.current, 0, - label_height)
+            real_pos = float (label_height) / (height + label_height)
+            self.current.set (0.5, real_pos, 0, 0)
+
 class HorzAnimatedLabel (AnimatedLabel):
     '''Horizontally animated label'''
 
@@ -470,12 +505,30 @@ class HorzAnimatedLabel (AnimatedLabel):
         self.current = gtk.Alignment (1.0, 0.0)
         label_width = self.label.size_request ()[0]
         width = self.size_request ()[0]
+        self.label.connect ("style-set", self.on_style_set)
         self.current.set_size_request (2 * label_width + width, -1)
         self.current.add (self.label)
         self.put (self.current, - label_width, 0)
         self.pos = 1.0
         self.show_all ()
 
+    def on_style_set (self, *args):
+        '''Update Layout height if a style change (such as a font change)
+made the label bigger than the container'''
+        label_height = self.label.get_layout ().get_pixel_size ()[1] + 10
+        height = self.size_request ()[1]
+        if height < label_height:
+            self.set_size_request (self.size_request ()[0], label_height)
+            height = label_height
+            self.height = height
+        elif height > label_height * 1.2:
+            self.set_size_request (self.size_request ()[0],
+                                   int (label_height * 1.2))
+            height = int (label_height * 1.2)
+        else:
+            return
+        self.height = height
+
 class WindowedLabel (gtk.Label):
     '''Custom gtk.Label with an overlapping input-only gtk.gdk.Window'''
 
@@ -689,6 +742,8 @@ class GnomeAboutHeader (gtk.Layout):
     width   = 0
     height  = 0
 
+    widgets = None
+
     def __init__ (self, program, links):
         '''Initialize object, plug map signal'''
         super (GnomeAboutHeader, self).__init__ () 
@@ -707,7 +762,6 @@ class GnomeAboutHeader (gtk.Layout):
         if header:
             self.put (header, 0, 0)
             current_y = header.get_pixbuf ().get_height ()
-            base_y = current_y + 4
             line = self.create_line ()
             image = gtk.Image ()
             image.set_from_pixmap (line, None)
@@ -716,9 +770,6 @@ class GnomeAboutHeader (gtk.Layout):
         logo = self.load_logo ()
         if logo:
             self.put (logo, 0, 0)
-            logo_size = logo.get_size_request ()
-            current_x += logo_size[0] + 25
-            current_y = logo_size[1] + 20
 
         dot = self.create_dot ()
 
@@ -733,18 +784,66 @@ class GnomeAboutHeader (gtk.Layout):
         for widget in widgets:
             if put_widgets > 0:
                 if dot:
-                    image = gtk.Image ()
-                    image.set_from_pixmap (dot, None)
-                    self.put (image, current_x + 5, base_y + 6)
+                    widget.dot = gtk.Image ()
+                    widget.dot.set_from_pixmap (dot, None)
+                    self.put (widget.dot, 0, 0)
+                else:
+                    widget.dot = -1
+            else:
+                widget.dot = None
+            self.put (widget, 0, 0)
+            put_widgets += 1
+
+        if len (widgets):
+            '''Minor workaround : we connect the last created widget
+style-set signal (and not the container's one) to make sure that all
+children styles have been updated (otherwise the container is updated
+first)'''
+            widgets[-1].connect ("style-set", self.on_style_set)
+
+        self.widgets = {
+                        "header" : header,
+                        "logo"   : logo,
+                        "links"  : widgets
+                       }
+
+        self.place_widgets ()
+        self.show_all ()
+
+    def place_widgets (self):
+        '''Place widgets at the right place in the header'''
+        current_x = 0
+        current_y = 0
+        base_y = 0
+
+        header = self.widgets["header"]
+        if header:
+            self.move (header, 0, 0)
+            current_y = header.get_pixbuf ().get_height ()
+            base_y = current_y + 4
+
+        logo = self.widgets["logo"]
+        if logo:
+            self.move (logo, 0, 0)
+            logo_size = logo.get_size_request ()
+            current_x += logo_size[0] + 25
+            current_y = logo_size[1] + 20
+
+        links = self.widgets["links"]
+        for widget in links:
+            if widget.dot:
+                if widget.dot != -1:
+                    height = widget.get_layout ().get_pixel_size ()[1]
+                    dot_height = widget.dot.get_pixmap ()[0].get_size ()[1]
+                    y = int (ceil (float (height) / 2)) - dot_height / 2
+                    self.move (widget.dot, current_x + 5, base_y + y)
                 current_x += 16
-            self.put (widget, current_x, base_y)
+            self.move (widget, current_x, base_y)
             current_x += widget.size_request ()[0]
-            put_widgets += 1
 
         self.width = current_x + 10
         self.height = current_y
         self.set_size_request (self.width, self.height)
-        self.show_all ()
 
     def load_header (self):
         '''Load a random header image as a gtk.Image'''
@@ -813,6 +912,13 @@ class GnomeAboutHeader (gtk.Layout):
         context.paint ()
         return pixmap
 
+    def on_style_set (self, label, old_style):
+        '''Style changed, let's replace widgets'''
+        gtk.Widget.do_style_set (label, old_style)
+        if not self.widgets:
+            return
+        self.place_widgets ()
+
 gobject.type_register (GnomeAboutHeader)
 
 class GnomeAbout (gtk.Dialog):
