implementing part 1