refactor to use composer