add Join function
add keep order function