part 1

with documentation.