Programming-in-the-large is concerned with how to combine relatively small software components into larger, meaningful wholes, in order to meet particular requirements for functionality and performance with minimal programming effort. Techniques for programming-in-the-large are important because of their potential for reducing the enormous cost of writing, debugging, and maintaining software, especially for very large systems. This research will explore languages and environments supporting programming-in-the-large for object-oriented, logic, and functional programming as well as their combinations, with some consideration of requirements for execution on parallel architectures. The project will build upon previous research on abstract data types, on multiparadigm programming (e.g., Eqlog, which unifies functional and logic programming, and FOOPS, which unifies functional and object- oriented programming) on "logical" programming, and on parameterized programming and reusable software for environments (OBJ2), and for ordinary imperative languages. Programming systems are growing larger and more complex. This research is aimed at establishing the ability to properly manage the construction and maintenance of enormous systems of programs.