adding initial code and tests