Hack for "covariant" return types to support multiple leveled generic support