diff --git a/lib/dynflow/executors/parallel/core.rb b/lib/dynflow/executors/parallel/core.rb
index <HASH>..<HASH> 100644
--- a/lib/dynflow/executors/parallel/core.rb
+++ b/lib/dynflow/executors/parallel/core.rb
@@ -66,6 +66,7 @@ module Dynflow
                 Terminate.(~any) >-> future do
                   logger.info 'shutting down Core ...'
                   @termination_future = future
+                  try_to_terminate
                 end
         end
 
@@ -114,7 +115,7 @@ module Dynflow
         def continue_manager(manager, next_work)
           if manager.done?
             loose_manager_and_set_future manager.execution_plan.id
-            terminate! if terminating? && @execution_plan_managers.empty?
+            try_to_terminate
           else
             feed_pool next_work
           end
@@ -146,6 +147,10 @@ module Dynflow
           @termination_future.set true
           super()
         end
+
+        def try_to_terminate
+          terminate! if terminating? && @execution_plan_managers.empty?
+        end
       end
     end
   end
diff --git a/test/executor_test.rb b/test/executor_test.rb
index <HASH>..<HASH> 100644
--- a/test/executor_test.rb
+++ b/test/executor_test.rb
@@ -582,6 +582,11 @@ module Dynflow
           $slow_actions_done.must_equal 1
         end
 
+        it 'it terminates when no work' do
+          terminated = world.executor.terminate!
+          terminated.wait
+        end
+
       end
     end
   end
Fix termination when no work is being executed