metaclass dispatch