This paper presents a solution to the (processor) group membership problem. The methodology followed in designing the algorithm is summarized by the option to optimize the performance of the algorithm under the assumption that no failure occurs during its run, and adding the appropriate level of fault tolerance by implementing the algorithm as periodic and self-stabilizing. The performance indicators we consider are the number of message exchanges (between neighbor units) and the time needed to reach the agreement. The algorithm relies on the existence of three basic distributed services: clock synchronization, reliable diffusion, and local agreement between two neighbors. We do not assume the presence of a reliable datagram service, which is more complex to implement than the previous. The presence of a privileged unit (initiator) is avoided, so elections are not needed.