add "join" function