fixing #4 almost done. To do *benchmark*