Too much to write. :(