diff --git a/GooCalendar/Calendar.py b/GooCalendar/Calendar.py
index 18493a689f416e4abeb8a50c7817d8ccb1878e18_R29vQ2FsZW5kYXIvQ2FsZW5kYXIucHk=..8eb98e034c2e1d74d5d38e637bde0d0f9243abd9_R29vQ2FsZW5kYXIvQ2FsZW5kYXIucHk= 100644
--- a/GooCalendar/Calendar.py
+++ b/GooCalendar/Calendar.py
@@ -206,6 +206,10 @@
         day_width_max = (w - timeline_w) / 7
         day_width = max(day_width_min, day_width_max)
         day_height = h
+        width, height = self.get_size_request()
+        new_width = int(timeline_w + 7 * day_width)
+        if (width != new_width and day_width_min >= day_width_max):
+            self.set_size_request(new_width, height)  # Minimum widget size
 
         # Redraw all days.
         weeks = util.my_monthdatescalendar(self.cal, *self.selected_date)
@@ -326,6 +330,12 @@
                     self.selected_day = box
 
             y_pos += day_height
+        
+        width = self.get_size_request()
+        new_width = int(7 * day_width)
+        new_height = int(14 * box.line_height)
+        if (width != new_width and day_width == day_width_min):
+            self.set_size_request(new_width, new_height)
 
     def _get_day_item(self, find_date):
         weeks = util.my_monthdatescalendar(self.cal, *find_date.timetuple())
@@ -488,6 +498,12 @@
         self.timeline.bg_color = border_color
         self.timeline.text_color = text_color
         self.timeline.update()
+        width, height = self.get_size_request()
+        min_line_height = self.timeline.min_line_height
+        line_height = self.timeline.line_height
+        new_height = int(max_y + 24 * min_line_height)
+        if (height != new_height):
+            self.set_size_request(width, new_height)
 
         # Draw non-all-day events.
         for date in dates:
@@ -533,7 +549,7 @@
                         self.on_event_item_button_press_event)
                     self.event_items.append(event_item)
                     self.get_root_item().add_child(event_item)
-                    minute_height = self.timeline.line_height / 60
+                    minute_height = line_height / 60.0
                     y_off1 = top_offset_mins * minute_height
                     y_off2 = bottom_offset_mins * minute_height
                     column_width = day.width / parallel
diff --git a/GooCalendar/TimelineItem.py b/GooCalendar/TimelineItem.py
index 18493a689f416e4abeb8a50c7817d8ccb1878e18_R29vQ2FsZW5kYXIvVGltZWxpbmVJdGVtLnB5..8eb98e034c2e1d74d5d38e637bde0d0f9243abd9_R29vQ2FsZW5kYXIvVGltZWxpbmVJdGVtLnB5 100644
--- a/GooCalendar/TimelineItem.py
+++ b/GooCalendar/TimelineItem.py
@@ -51,8 +51,8 @@
         return self._width
 
     @property
-    def line_height(self):
+    def min_line_height(self):
         style = self.cal.get_style()
         font_descr = style.font_desc.copy()
         pango_size = font_descr.get_size()
         logical_height = 0
@@ -55,10 +55,10 @@
         style = self.cal.get_style()
         font_descr = style.font_desc.copy()
         pango_size = font_descr.get_size()
         logical_height = 0
-        ink_padding_top = 0
+        self.ink_padding_top = 0
         for n in range(24):
             natural_extents = self.timeline_text[n].get_natural_extents()
             logical_rect = natural_extents[1]
             logical_height = max(logical_height, logical_rect[3])
             ink_rect = natural_extents[0]
@@ -60,7 +60,7 @@
         for n in range(24):
             natural_extents = self.timeline_text[n].get_natural_extents()
             logical_rect = natural_extents[1]
             logical_height = max(logical_height, logical_rect[3])
             ink_rect = natural_extents[0]
-            ink_padding_top = max(ink_padding_top, ink_rect[0])
+            self.ink_padding_top = max(self.ink_padding_top, ink_rect[0])
         line_height = int(math.ceil(float(logical_height) / pango.SCALE))
@@ -66,2 +66,3 @@
         line_height = int(math.ceil(float(logical_height) / pango.SCALE))
+        return line_height
         
@@ -67,3 +68,4 @@
         
-        # If we have more vertical space, use it and center the text
+    @property
+    def line_height(self):
         self.padding_top = 0
@@ -69,5 +71,6 @@
         self.padding_top = 0
+        line_height = self.min_line_height
         if line_height < self.height / 24:
             line_height = self.height / 24
             pango_size = self.cal.get_style().font_desc.get_size()
             padding_top = (line_height - pango_size / pango.SCALE) / 2
@@ -70,8 +73,9 @@
         if line_height < self.height / 24:
             line_height = self.height / 24
             pango_size = self.cal.get_style().font_desc.get_size()
             padding_top = (line_height - pango_size / pango.SCALE) / 2
-            padding_top -= int(math.ceil(float(ink_padding_top) / pango.SCALE))
+            padding_top -= int(math.ceil(float(self.ink_padding_top) /
+                pango.SCALE))
             self.padding_top = padding_top
         return line_height