all private multi type implementation