separation by modules refactor