Description: Software development has changed. Developers no longer build large systems from scratch, but rather assemble them from existing components. Many products, both open and closed source, are now stable enough to build on top of these components and developers have finally tired of re-inventing the wheel and have begun to work with them. This is very good, as it seems that object-oriented software construction is delivering on one of its best promises: reusability. However, assembling independently developed components is itself a non-trivial task that can lead into complex integration problems, as well as tightly coupled code, if not performed correctly.