added abstract type