refactor code
clean up code
only allow bind one listener