diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml
index aa836dbc00faa5b945a3d787a5ba1e991302c742..085ce2f35538f1299d7222f45f229b2631e0592a 100644
--- a/automatic_updates.services.yml
+++ b/automatic_updates.services.yml
@@ -64,3 +64,9 @@ services:
     class: Drupal\automatic_updates\Validator\CoreComposerValidator
     tags:
       - { name: event_subscriber }
+  automatic_updates.excluded_paths_subscriber:
+    class: Drupal\automatic_updates\Event\ExcludedPathsSubscriber
+    arguments:
+      - '@extension.list.module'
+    tags:
+      - { name: event_subscriber }
diff --git a/package_manager/package_manager.services.yml b/package_manager/package_manager.services.yml
index b0eb0f54b32f39ef8bfdaaa4abbab70efc279c42..59bfe79c0e6fb0c6a48f038a0e038dda0064d1c6 100644
--- a/package_manager/package_manager.services.yml
+++ b/package_manager/package_manager.services.yml
@@ -131,6 +131,5 @@ services:
       - '%site.path%'
       - '@file_system'
       - '@stream_wrapper_manager'
-      - '@extension.list.module'
     tags:
       - { name: event_subscriber }
diff --git a/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php b/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
index a9921a3cda46a34be155afd970743760784d9244..f7e601c3f008c9b933c16063fb0898b1a57f48b2 100644
--- a/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
+++ b/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\package_manager\EventSubscriber;
 
-use Drupal\Core\Extension\ModuleExtensionList;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\StreamWrapper\LocalStream;
 use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
@@ -43,13 +42,6 @@ class ExcludedPathsSubscriber implements EventSubscriberInterface {
    */
   protected $streamWrapperManager;
 
-  /**
-   * The module list service.
-   *
-   * @var \Drupal\Core\Extension\ModuleExtensionList
-   */
-  protected $moduleList;
-
   /**
    * Constructs an UpdateSubscriber.
    *
@@ -61,19 +53,16 @@ class ExcludedPathsSubscriber implements EventSubscriberInterface {
    *   The file system service.
    * @param \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface $stream_wrapper_manager
    *   The stream wrapper manager service.
-   * @param \Drupal\Core\Extension\ModuleExtensionList $module_list
-   *   The module list service.
    */
-  public function __construct(string $app_root, string $site_path, FileSystemInterface $file_system, StreamWrapperManagerInterface $stream_wrapper_manager, ModuleExtensionList $module_list) {
+  public function __construct(string $app_root, string $site_path, FileSystemInterface $file_system, StreamWrapperManagerInterface $stream_wrapper_manager) {
     $this->appRoot = $app_root;
     $this->sitePath = $site_path;
     $this->fileSystem = $file_system;
     $this->streamWrapperManager = $stream_wrapper_manager;
-    $this->moduleList = $module_list;
   }
 
   /**
-   * Reacts before staged updates are committed the active directory.
+   * Reacts before staged changes are committed the active directory.
    *
    * @param \Drupal\package_manager\Event\PreApplyEvent $event
    *   The event object.
@@ -90,7 +79,7 @@ class ExcludedPathsSubscriber implements EventSubscriberInterface {
   }
 
   /**
-   * Reacts to the beginning of an update process.
+   * Excludes paths from a staging area before it is created.
    *
    * @param \Drupal\package_manager\Event\PreCreateEvent $event
    *   The event object.
@@ -111,11 +100,6 @@ class ExcludedPathsSubscriber implements EventSubscriberInterface {
     if ($private = $this->getFilesPath('private')) {
       $event->excludePath($private);
     }
-    // If this module is a git clone, exclude it.
-    if (is_dir(__DIR__ . '/../../.git')) {
-      $dir = $this->moduleList->getPath('automatic_updates');
-      $event->excludePath($dir);
-    }
 
     // Exclude site-specific settings files.
     $settings_files = [
diff --git a/package_manager/tests/fixtures/fake_site/composer.json b/package_manager/tests/fixtures/fake_site/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..0967ef424bce6791893e9a57bb952f80fd536e93
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/composer.json
@@ -0,0 +1 @@
+{}
diff --git a/package_manager/tests/src/Functional/ExcludedPathsTest.php b/package_manager/tests/src/Functional/ExcludedPathsTest.php
index 442ed640d8e9df7d0bdcf96ca9f58d9ed4d22dd4..b0dc9ebf6e21a8f693be0a0468671ba3f2793c0b 100644
--- a/package_manager/tests/src/Functional/ExcludedPathsTest.php
+++ b/package_manager/tests/src/Functional/ExcludedPathsTest.php
@@ -24,6 +24,9 @@ class ExcludedPathsTest extends BrowserTestBase {
    */
   protected static $modules = ['package_manager'];
 
+  /**
+   * Tests that certain paths are excluded from staging areas.
+   */
   public function testExcludedPaths(): void {
     $active_dir = __DIR__ . '/../../fixtures/fake_site';
     $stage_dir = $this->siteDirectory . '/stage';
@@ -32,6 +35,8 @@ class ExcludedPathsTest extends BrowserTestBase {
     $path_locator->getActiveDirectory()->willReturn($active_dir);
     $path_locator->getStageDirectory()->willReturn($stage_dir);
 
+    // Ensure that we are using directories within the fake site fixture for
+    // public and private files.
     $settings = Settings::getAll();
     $settings['file_public_path'] = 'sites/example.com/files';
     $settings['file_private_path'] = 'private';
diff --git a/src/Event/ExcludedPathsSubscriber.php b/src/Event/ExcludedPathsSubscriber.php
new file mode 100644
index 0000000000000000000000000000000000000000..ecc4b0ce68b5ab8f9916e202ff40e192e1a8f7b8
--- /dev/null
+++ b/src/Event/ExcludedPathsSubscriber.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\automatic_updates\Event;
+
+use Drupal\Core\Extension\ModuleExtensionList;
+use Drupal\package_manager\Event\PreCreateEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Defines an event subscriber to exclude certain paths from staging areas.
+ */
+class ExcludedPathsSubscriber implements EventSubscriberInterface {
+
+  /**
+   * The module list service.
+   *
+   * @var \Drupal\Core\Extension\ModuleExtensionList
+   */
+  protected $moduleList;
+
+  /**
+   * Constructs an UpdateSubscriber.
+   *
+   * @param \Drupal\Core\Extension\ModuleExtensionList $module_list
+   *   The module list service.
+   */
+  public function __construct(ModuleExtensionList $module_list) {
+    $this->moduleList = $module_list;
+  }
+
+  /**
+   * Excludes paths from a staging area before it is created.
+   *
+   * @param \Drupal\package_manager\Event\PreCreateEvent $event
+   *   The event object.
+   */
+  public function preCreate(PreCreateEvent $event): void {
+    // If this module is a git clone, exclude it.
+    if (is_dir(__DIR__ . '/../../.git')) {
+      $dir = $this->moduleList->getPath('automatic_updates');
+      $event->excludePath($dir);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    return [
+      PreCreateEvent::class => 'preCreate',
+    ];
+  }
+
+}