Still a few bugs, but it's almost there