add template join function