Initial commit, not yet close to finished. Finishing tomorrow or so.