Software updates are dynamic if they are applied at run time. In this talk, we present ongoing work on dynamic updates for modular software. In the last decades, most research on dynamic software updates propose a practical update framework for specific monolithic software (such as C or Java programs). In our work, we take a theoretical approach and study dynamic updates of a general system. We provide a formal definition of an update in terms of (local) trace theory, and distinguish between atomic updates and incremental updates. An atomic update stops the software, applies the update, and restarts the software. We consider atomic updates to be correct by construction. An incremental update can upgrade one or more parts of the software to a new version, while other parts still run the old version. Correctness of incremental updates is non-trivial and we propose a notion of correctness for incremental updates. We present two (abstract) update strategies and justify their correctness. Finally, we give some hints on how our update framework can be implemented in a microservices architecture, such as Kubernetes.