cleaner API, better specs