implement step 1 and 2