After reading [@Dead Cruiser]'s CS, I need to rewrite my own.