why do we need this interface?  what is is for?