completed part two; tests for part two have not been written yet