Complete rewrite of the methods