Abstract. We explain a transformational approach to the design and verification of communicating concurrent systems. The transformations start form specifications that combine trace-based with state-based assertional reasoning about the desired communication behaviour, and yield concurrent implementations. We illustrate our approach by a case study proving correctness of implementations of safe and regular registers allowing concurrent writing and reading phases, originally due to Lamport.