refactored: using ExecutorServices