  Multiparty session types (MSTs) provide an efficient methodology for
specifying and verifying message passing software systems. In the theory of
MSTs, a global type specifies the interaction among the roles at the global
level. A local specification for each role is generated by projecting from the
global type on to the message exchanges it participates in. Whenever a global
type can be projected on to each role, the composition of the projections is
deadlock free and has exactly the behaviours specified by the global type. The
key to the usability of MSTs is the projection operation: a more expressive
projection allows more systems to be type-checked but requires a more difficult
soundness argument. In this paper, we generalise the standard projection
operation in MSTs. This allows us to model and type-check many design patterns
in distributed systems, such as load balancing, that are rejected by the
standard projection. The key to the new projection is an analysis that tracks
causality between messages. Our soundness proof uses novel graph-theoretic
techniques from the theory of message-sequence charts. We demonstrate the
efficacy of the new projection operation by showing many global types for
common patterns that can be projected under our projection but not under the
standard projection operation.
