Initial commit. Marjority of part A.