Initial checkin. Basically functions but needs work.