add join/leave feature