abstract stuff