improve join method