refactor and implement backbone