Wow... thanks, Patrick. Hmm, this is not the behaviour one would expect, but who says life should be predictable :sigh:. My workaround was: ----------------------------- using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace RegionTest { public partial class Form1 : Form { RegionData[] regionData = new RegionData[2]; int currRegionIndex = 0; MyControl myControl = new MyControl(); public Form1() { InitializeComponent(); GraphicsPath gp0 = new GraphicsPath(); gp0.AddEllipse(myControl.ClientRectangle); regionData[0] = (new Region(gp0)).GetRegionData(); GraphicsPath gp1 = new GraphicsPath(); gp1.AddRectangle(myControl.ClientRectangle); regionData[1] = (new Region(gp1)).GetRegionData(); myControl.Region = new Region(region[0]); Controls.Add(myControl); } private void button1_Click(object sender, EventArgs e) { currRegionIndex = (currRegionIndex + 1) % 2; myControl.Region = new Region(regionData[currRegionIndex]); myControl.Refresh(); } } } ----------------------------- which in the end is similar to yours in efficiency (I guess) but yours is more elegant. Tom