Abstract-Synchronous programs were introduced to simplify the development of reactive systems hiding the complexity and indeterminism of the interleaving while taking full advantage of possible concurrency. The introduction of communication networks enabled the creation of distributed systems presenting the programmer with a new burden of interleaving and non determinism due to the asynchronous communication medium. Again this complexity should be hidden from the user while taking full advantage of the possible concurrency to improve performance. Many algorithms for the automatic distributions of synchronous programs have been proposed so far, but they are not suitable for large scale system because they do not preserve the compositionality of the original code: the modularity of the synchronous program is lost. As a result the subsystems are not re-usable and a small local change results in the recompilation and re-distribution of the overall system. This solution is cumbersome and unpractical in many real-world applications. In this paper we introduce an algorithm for the distribution of synchronous programs that preserves the modularity and allows separate compilation and subsystem re-use.