Step1

Implemented step 1 (and some of step 2) and all associated tests.