I was able to reproduce this, and I can see the difference in behavior between Beta2 and RTM. The cause is a small change we made in the WebPartManager.CreateWebPart() method, which takes a Control parameter and returns a GenericWebPart that wraps the Control. In Beta2, the Control would not be parented to the GenericWebPart until necessary (say in PreRender()). In RTM, we changed this behavior so that the Control is parented to the GenericWebPart immediately. We did this to make GenericWebParts more consistent with standard WebParts, and to fix a few small consistency bugs. This is why you are seeing different behavior on Beta2 vs. RTM. The second part of this issue involves the control lifecycle and when personalization data is applied. Normally, personalization data is applied in the InitComplete phase of the control lifecycle, which is before the Load phase. However, things work a little differently when a WebPart is first added to the page. When the WebPart is added to the control tree, it runs through its lifecycle to "catch up" with the rest of the page. If the WebPart is added to the page after the Load phase, this means the WebParts Load() method will be run before personalization data is applied. Getting back to your scenario, could you use the property value later in the lifecycle, say in PreRender() or Render()? Then the behavior when the WebPart is first added would be consistent with future requests.