Part A including tests, done.