add comments, make class concrete
add unit test