version requirement joining refactor