support for all 4 types