interface observer