  We present a new method for calculating CMB anisotropies in a non-flat
Friedmann universe, relying on a very stable algorithm for the calculation of
hyperspherical Bessel functions, that can be pushed to arbitrary precision
levels. We also introduce a new approximation scheme which gradually takes over
in the flat space limit, and significant speeds-up calculations. Our method is
implemented in the Boltzmann code CLASS. It can be used to benchmark the
accuracy of the CAMB code in curved space, which is found to match
expectations. For default precision settings, corresponding to 0.1% for scalar
temperature spectra and 0.2% for scalar polarisation spectra, our code is two
to three times faster, depending on curvature. We also simplify the temperature
and polarisation source terms significantly, so the different contributions to
the $C_\ell$'s are easy to identify inside the code.
