major refactor using backbone