Initial commit. Still needs some polishing.