Given a set of nodes in a distributed system, a coterie is a collection of subsets of the set of nodes such that any two subsets have a nonempty intersection and are not properly contained in one another. A subset of nodes in a coterie is called a quorum. Coteries may be used to implement a distributed mutual exclusion algorithm which gracefully tolerates node and communication line failures. Two types of coteries exist: dominated and nondominated. In this paper, we introduce an algorithm, called the join algorithm, which takes nonempty coteries, as input, and returns a new, larger coterie. The new coterie is called a composite coterie. We prove that a composite coterie is nondominated if and only if the input coteries are nondominated. Using the algorithm, dominated or nondominated coteries may be easily constructed for a large number of nodes. Then, we present an efficient method for determining whether a given set of nodes contains a quorum of a composite coterie. The test does not require that the quorums of a composite coterie be computed in advance. As an example, we generalize tree coteries, using the join algorithm, and prove that tree coteries are nondominated. Finally, we show that the join algorithm may be used to generate read and write quorums which may be used by a replica control protocol.