add some abstract stuff, test some easy implementations