State at end of #18
test refactoring
end of #19
end of #20