use a better way to overload builtin functions