up to step 14 implemented