I'm not exactly sure what's causing the problem, but you generally want to avoid re-defining functions inside of dynamics like these. Every time the manipulate re-calculates the result, it redefines `g` and this seems to cause some sort of infinite update loop. It's better to do this: Manipulate[ Solve[g[x] == g[m x], x], {{m, 2, "Times"}, -10, 10, 0.1}, Initialization :> ( g[x_] := Piecewise[{{2 - x, 1 <= x}, {x, x < 1}}] ) ]