In a distributed system multiple nodes may initiate snapshot collection concurrently. In this paper we present a global snapshot collection algorithm that combines the information collected by each initiator. This generates a maximal, consistent global snapshot that is more recent than the snapshot collected by any initiator. Global snapshots are used to establish checkpoints for recovery from node failures. A maximal snapshot implies that the amount of computation lost during roll-back, after node failures, is minimized. We also present an efficient information dissemination strategy that nodes can employ to exchange snapshot information with each other.