implementation separation to modules