add interface segregation principal