diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp
index 9876075..6b748f1 100644
--- a/ginac/inifcns_nstdsums.cpp
+++ b/ginac/inifcns_nstdsums.cpp
@@ -1577,7 +1577,10 @@ 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 +2497,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++;
