add observer as interface