using IQType enum instead of abstract