added a simple version that doesn't touch Function.prototype