due to less casting and method calls, I feel that storing this pointer here is probably more efficient than using a macro.