clean code
clean duplicate code
new version