Has a few bugs, but I am bored now.