use is_a for interfaces