rewrote methods to be more "functional"
changes
added benchmarking among other stuff