Initial commit. The map part is still in a questionable state implementation wise.