diff --git a/goffice/canvas/goc-item.c b/goffice/canvas/goc-item.c
index 5453106..b6c3688 100644
--- a/goffice/canvas/goc-item.c
+++ b/goffice/canvas/goc-item.c
@@ -572,12 +572,14 @@ goc_item_bounds_changed (GocItem *item)
 {
 	g_return_if_fail (GOC_IS_ITEM (item));
 	if (item->cached_bounds) {
+		GocItem *cur = item;
 		goc_item_invalidate (item);
 		do {
-			item->cached_bounds = FALSE;
-			item = GOC_ITEM (item->parent);
-		} while (item);
+			cur->cached_bounds = FALSE;
+			cur = GOC_ITEM (cur->parent);
+		} while (cur);
 	}
+	goc_item_invalidate (item);
 }
 
 /**
