As my projects get larger I feel an urge to formalize my unit handling. Actually I put related units in a subdirectory with the name of the module (or package, ... whatever), let's say "foo". In this directory there's a file "foo.pas" that I want to be used by other modules. I often have a file "foo_types.pas" that holds (surprise) some type definitions, constants and tool functions ("foo_typesconststools.pas" would be more appropriate). However I don't distinguish between internal types (only used by the foo module) and external definitions (something that other modules need if they want to use the classes in "foo.pas"). What's your approach to handle this? I also consider abstract classes, frameworks, patterns (MVC, factories,...).