This paper focuses on the dynamic reconfiguration of component-based software systems. From a structural point of view, such systems are made of components linked together through their provided and required services, the code of components being defined by modules (e.g., jar files). Today, the ability to reconfigure component-based systems at runtime faces limitations. Some component frameworks allow to dynamically reconfigure components -starting or stopping them, or changing how they are wired together for instancebut forbid any dynamic evolution of the modules defining their code. Other frameworks allow to dynamically update modules but at the cost of loosing control on component wires, preventing software architects or tools alike to decide how components are wired together. In this paper, we propose a component framework that addresses these limitations through a unified approach for the management of components and modules. Our approach uniquely enables to reconfigure both components and modules at runtime, without restrictions. We prototyped the proposed framework in Java and exercised various dynamic reconfigurations of componentbased systems. Furthermore, we formalized this framework and proved the correctness of its reconfiguration protocol with the Coq proof assistant.files defined in M 1 by those defined in M 2 . Such reconfigurations are complementary to components reconfigurations that allow to manipulate components without changing their code (e.g., starting or stopping components, replacing a component by a newly started one instanciated from the same module). Module reconfigurations are useful to upgrade components to new versions or to adapt the code of components, for load management reasons, for instance. However, existing component frameworks do not fully support module reconfigurations at runtime.Several Java-based component frameworks [7][8][9] imply to shutdown and restart the entire system to manage module reconfigurations, mainly because modules are simply managed through setting up the classpath of the Java Runtime Environment. With the recent Tapestry industrial Java-based component framework [10], some component classes may be dynamically updated but only at the condition component interfaces do not evolve.Alternate approaches [11, 12] propose to use dynamic software updating (DSU) techniques [13] to allow updating the code of a component without any shutdown-restart. Despite being useful, such techniques face restrictions and are not guaranteed to succeed, which makes them suited to use at debug time but unreliable to use at production time.Other component frameworks, either industrial [2][3][4]14] or academic [15,16], leverage a module platform such as OSGi [17] or the NetBean Platform Module System [18] to manage the dynamic update of Java modules. Module platforms manage module updates through micro-rebooting the necessary components only, avoiding the global downtime imposed by a global shutdown-restart approach. However, such platforms autonomously decide how modules are link...