diff --git a/doc/tutorial/ginac.texi b/doc/tutorial/ginac.texi
index d5bea84..16970d1 100644
--- a/doc/tutorial/ginac.texi
+++ b/doc/tutorial/ginac.texi
@@ -1349,7 +1349,10 @@ Internally, the underlying CLN is responsible for this behavior and we
 refer the reader to CLN's documentation.  Suffice to say that
 the same behavior applies to complex numbers as well as return values of
 certain functions.  Complex numbers are automatically converted to real
-numbers if the imaginary part becomes zero.  The full set of tests that
+numbers if the imaginary part is zero as an exact number.
+Complex numbers with an imaginary part equal to zero as a floating point number
+are not converted automatically to real numbers.
+The full set of tests that
 can be applied is listed in the following table.
 
 @cartouche
diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp
index 9876075..89cc142 100644
--- a/ginac/inifcns_nstdsums.cpp
+++ b/ginac/inifcns_nstdsums.cpp
@@ -1577,7 +1577,12 @@ static ex Li_eval(const ex& m_, const ex& x_)
 				}
 			}
 			if (is_zeta) {
-				return zeta(m_,x_);
+ 			        // numbers in x_ are +1 or -1, but might not be recognized as real if they come from floating complex
+ 			        lst newx;
+ 				for (lst::const_iterator itx = x.begin(); itx != x.end(); ++itx) {
+				  newx.append( *itx != _ex_1 ? 1 : -1 );
+				}
+ 				return zeta(m_,newx);
 			}
 			if (is_H) {
 				ex prefactor;
@@ -2494,7 +2499,8 @@ lst convert_parameter_Li_to_H(const lst& m, const lst& x, ex& pf)
 	res.append(*itm);
 	itm++;
 	while (itx != x.end()) {
-		signum *= (*itx > 0) ? 1 : -1;
+	        // use exactly the same test as in Li_eval
+		signum *= (*itx != _ex_1) ? 1 : -1;
 		pf *= signum;
 		res.append((*itm) * signum);
 		itm++;
