Blindly substituting in f(x):= (globalx: 'x, otherfun(z):= x, lambda([r],x) ...) are all ways that allow the gensym to "escape" and gets us back to the previous situation. The "right" solution is to recognize free and bound instances of x in the function body. RJF