This module covers the concepts of distributed systems and the underlying principles of distributed computing and discusses the issues and various solutions proposed in the distributed computing community. Specifically, communication and broadcast, election algorithms, synchronization and concurrency, fault-tolerance and security related issues will be discussed in the lectures. Where applicable practical implementations of the concepts will be introduced.