observer.join() instead of sleep loop