Initial commit, fully functional, needs some tuning