should this be interface rather than class?