Precisely. The problem though arises after you've implemented a system that uses an object of type Bar throughout and now you want to reimplement Bar while still maintaining the base class. In this case, you need to insert an implementation of Bar that can still access the base class without a namespace collision. The suggestion of using a factory addresses this because the factory deals with System::Bar - a namespace that can stay unique - while providing objects that can have their namespace location be moot. That is, the factory provides an object with the Bar interface but whether it's implemented as Custom::Bar or System::Bar is irrelevant. Now managing the factory hasn't been discussed but would require a registration process to indicate which implementation to use.