There are places in the core of Macaulay2 where substitution is carelessly
done, and it ends up looking at the names of the variables.  This should
probably not happen, because it can fail, and it can be slow.  It would be nice
to devise a way to locate such usage.  Here's an example of one:

    permanents(ZZ,Matrix) := Ideal => (p,M) -> (
	 r:=numgens target M;
	 c:=numgens source M;
	 xxX := symbol xxX;
	 R1:=ZZ/2[xxX_(1,1)..xxX_(r,c)];
	 M1:= transpose genericMatrix(R1,xxX_(1,1),c,r);
	 D1:= minors(p,M1);
	 R2:=ZZ[xxX_(1,1)..xxX_(r,c)];
***	 D1=substitute(D1,R2);
	 F := map(ring M, R2,flatten entries M);
	 F D1)
