Initial pass. Still needs a ton of work.