long calculations, see above