full support for different types