We present K (Topological K), a process description language that retains the main features of K (process distribution and mobility, remote and asynchronous communication through distributed data spaces), but extends it with new constructs to flexibly model the interconnection structure underlying a network and its evolution in time. We show how K can be used to model a number of interesting distributed applications and how systems correctness can be guaranteed, also in the presence of failures, by exploiting observational equivalences to study the relationships between descriptions of systems at different levels of abstraction.