first implementation of type and provider