tweak api to make more sense, add attributes