implemented Join()