metaclass use cases