adding interface segregation principle implementation