Alternative implementation that does not need method swizzle