Finished section 1. Requires testing.