add interface segregation
add some notes from poodr