join now accepts optional_data