Hi, Stefan, Thanks for an explanation. I've got a few objections regarding the patch. I think handling the complex numbers with the imaginary part being floating-point zero should be done in zeta2_evalf() rather than to Li_eval(). The point is that (multiple) zeta values can appear not only as a result of polylogs evaluation. Also this kind of syntax + for (lst::const_iterator itx = x.begin(); itx != x.end(); ++itx) newx.append( *itx != _ex_1 ? 1 : -1 ); often gives rise to obscure bugs (C++ gives you enough rope to hang yourself), please avoid that. Use the following instead: for (lst::const_iterator itx = x.begin(); itx != x.end(); ++itx) { newx.append(*itx != _ex_1 ? 1 : -1); } Also could you please make a few test cases so the bug won't be re-introduced in the future (by changes in other parts of GiNaC, or CLN, or whatever)? Thanks a lot, Alexei