Despite its powerful module system, ML has not yet evolved for the modern world of dynamic and open modular programming, to which more primitive languages have adapted better so far. We present the design and semantics of a simple yet expressive firstclass component system for ML. It provides dynamic linking in a type-safe and type-flexible manner, and allows selective execution in sandboxes. The system is defined solely by reduction to higherorder modules plus an extension with simple module-level dynamics, which we call packages. To represent components outside processes we employ generic pickling. We give a module calculus formalising the semantics of packages and pickling. Categories and Subject Descriptors D.3.3 [Language Constructs and Features]: Modules, packages; F.3.3 [Studies of Program Constructs]: Type structure General Terms Languages, Theory Keywords modules, units, separate compilation, dynamic linking, components, dynamic typing, distributed programming, pickling