added abstract stuff