move complex methods down
implement a slow version of rationals