The Java programming language provides numerous features to support the construction of large programs, but could do more to reduce JAR hell and simplify application packaging. This talk will describe how modular programs can address these issues, and how Java language and VM features can be designed to make programs more modular while retaining compatibility with legacy code.