#3 refactor web