Object-oriented programming promises to increase programmer productivity through better reuse of existing code. However, reuse is not yet pervasive in today’s object-oriented programs. Why is this so? We argue that one reason is that current programming languages and environments assume that components are perfectly coordinated. Yet in a world where programs are mostly composed out of reusable components, these components are not likely to be completely integrated because the sheer number of components would make global coordination impractical. Given that seemingly minor inconsistencies between individually designed components would exist, we examine how they can lead to integration problems with current programming language mechanisms. We discuss several reuse mechanisms that can adapt a component in place without requiring access to the component’s source code and without needing to re-typecheck it.