Hi! I have pushed a patch that fixes the problem. The patch avoids the final subs_one_level on anything but containers. Why? As the bug shows, this substitution is wrong in the general case: f(x).subs(x==f^-1(x)) -> f(f^-1(x)) [subschildren] -> x [eval] -> f^-1(x) [subs_one_level] Bug! On the other hand, the intent (as advertised e.g. in the tutorial) is to syntactically substitute functions of a certain kind etc., so, assuming three hypothetical function f, g, and h where f(h(x)) evaluates to g(x): f(g(x)).subs(g(x)==h(x)) -> f(h(x)) [subschildren] -> g(x) [eval] -> h(x) [subschildren] Okay! In this case, stopping after the second step would not be satisfactory. This syntactic substitution is clearly only for the top level (as the method's name subs_one_level implies) but should not be applied to symbols. This patch is for container<C> a.k.a. exprseq, so besides for functions it also applies to classes indexed and ncmul. I am reasonably sure it's also correct there. This case is very similar to a problem that lead to release of GiNaC 1.0.6. Burcin, this should apply cleanly to Sage. Bye! -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>