added observer.js