changes from watch() to observe() + general updates