Most of the code passes rspecs, the remaining items are a bit more involved.  So checking in this initial stage.