This paper addresses the problem of building tools for integrated programming environments. Integrated environments have the desirable property that the tools in it can share a database of common structures. But they have the undesirable property that these tools are hard to build because typically a single representation of the database must serve all tools. The solution proposed in this work allows tools to maintain appropriate representations or "views" of the objects they manipulate while retaining the benefits of shared access to common structures. We illustrate the approach with two examples of tools for an environment for programming-in-the-large, and outline current work in progress on efficient implementations of these ideas.