code review; add tests