abstracting done. just need to fix it so tests pass