added support for covariant