A basic step towards flexibility in work flow systems is the consistent and effective management of work flow evolution, i.e. of changing existing work flows while they are operational. One of the most challenging issue is the handling of running instances when their schemata are modified: simple solutions can be devised, but they often imply loosing all the work done or failing in capturing the advantages offered by work flow modifications; this is unacceptable for many applications. In this paper we address the problem of work flow evolution, from both a static and a dynamic point of view. We define a complete, minimal, and consistent set of modification primitives that allow modifications of work flow schemata and we introduce a taxonomy of policies to manage evolution of running instances when the corresponding work flow schema is modified. Formal criteria are introduced, based on a simple work flow conceptual model, in order to determine which running instances can be transparently migrated to the new version. A case study, relating the assembling of a desktop computer, will exemplfy the introduced concepts.