abstract and stuff