No, it sounds like you're on a pretty good path. You may want to define some Interface objects for your component objects to implement as well since that's their definition. For example, if you have some common parameter elements in your MDI forms, you could define an IMyMdiForm interface declaration, then all MDI forms you use would implement it, even in the external components. Interfaces make things easier in the exact situation you're describing since you don't have to declare specific classes as long as it implements the proper interface.