add optional_join method