arithmetic almost done. need to benchmark