Existing module systems for Java-like languages have been developed
to handle JAR hell, but have flat constraint systems and do not have the
ability to easily maintain consistency of shared dependencies.

The module system presented in this paper is able to express the common operations
in current use on Java modules, has a version constraint system based on module interfaces and
the \textbf{extends} and \textbf{overrides} relations, and can handle shared dependency 
consistency through \textbf{merge}. We have
also provided an implementation to demonstrate that it is
possible to realize this module system in an actual Java compiler, a small case study in JHotdraw
to demonstrate its use,
and a translation from OSGi bundles into the proposed system to show that it can express version
constraints in OSGi bundles.
