Use multi methods to improve code
  - improve compile time input checking
  - improve code flow
