final version, still quite a few bugs, but it's 23:41