current situation let's say the control hierarchy is w window p parent c stack d stack e button f button g button h button i entry w = NewWindow() p = NewParent(w.Handle) w.SetChild(c) p.SetChild(c) c.SetParent(p) d.SetParent(p) e.SetParent(p) f.SetParent(p) g.SetParent(p) p.Update() c.Resize() c.Add(h) h.SetParent(p) p.Update() c.Resize() d.Remove(1) f.SetParent(NULL) p.Update() c.Resize() g.Hide() p.Update() c.Resize() w.SetChild(i) p.SetChild(i) c.SetParent(NULL) d.SetParent(NULL) ... i.SetParent(p) ... p.Update() i.Resize() w.SetChild(NULL) p.SetChild(NULL) i.SetParent(NULL) p.Update() w.SetChild(i) (again) w.Destroy() p.Destroy() i.Destroy() TODO - rename these methods - p.DeferUpdate()/p.EndDeferUpdate()