implement type support