Added threaded version (plain old threads using ExecuterService and Observer pattern)