- refactor : new modularized version