adding handling for multiple observers on a single instance, and preventing multiple registration of the same observer