title: Trouble redefining Protected symbols and system functions
body: <p>Found trying to use <a href="https://stackoverflow.com/questions/4198961/what-is-in-your-mathematica-tool-bag/5149656#5149656"><code>the usual trick</code></a> to redefine GaussianFilter[ ]:  </p>
  
  <pre><code>out[x_]:=Print["(*"&lt;&gt;ToString@x&lt;&gt;"*)"];
  (* Redefining Circle[ ] works as expected*)
  Unprotect[Circle];
  Circle[a_,args__]:=
        Block[{$i=True},{"Circle",a}]/;!TrueQ[$i];
  Protect[Circle];
  out@Circle[{0,1},1,{0,2Pi}]
  
  (*{Circle, {0, 1}}*)
  
  (* Redefining GaussianFilter[ ] does not*)
  Unprotect[GaussianFilter];
  GaussianFilter[a_,args__]:=
                Block[{$j=True},{"GaussianFilter",a}]/;!TrueQ[$j];
  Protect[GaussianFilter];
  
  SetDelayed::write: Tag GaussianFilter in GaussianFilter[a_,args__] is Protected&gt;&gt;
  </code></pre>