implemented everything except soft-state joins