diff --git a/modules/features_ui/src/Form/FeaturesExportForm.php b/modules/features_ui/src/Form/FeaturesExportForm.php
index 608fa37..0e25d3d 100644
--- a/modules/features_ui/src/Form/FeaturesExportForm.php
+++ b/modules/features_ui/src/Form/FeaturesExportForm.php
@@ -469,7 +469,7 @@ class FeaturesExportForm extends FormBase {
       'version' => '',
     ]);
     foreach ($config_collection as $item_name => $item) {
-      if (!$item->getPackage() && !$item->isExtensionProvided()) {
+      if (!$item->getPackage() && !$item->isExcluded() && !$item->isExtensionProvided()) {
         $packages['unpackaged']->appendConfig($item_name);
       }
     }
diff --git a/src/ConfigurationItem.php b/src/ConfigurationItem.php
index aa470f8..73f10b9 100644
--- a/src/ConfigurationItem.php
+++ b/src/ConfigurationItem.php
@@ -72,6 +72,13 @@ class ConfigurationItem {
   protected $package;
 
   /**
+   * Whether the configuration is marked as excluded.
+   *
+   * @var bool
+   */
+  protected $excluded = FALSE;
+
+  /**
    * Whether the configuration is provided by an extension.
    *
    * @var bool
@@ -283,6 +290,23 @@ class ConfigurationItem {
   /**
    * @return boolean
    */
+  public function isExcluded() {
+    return $this->excluded;
+  }
+
+  /**
+   * @param boolean $extensionProvided
+   *
+   * @return ConfigurationItem
+   */
+  public function setExcluded($excluded) {
+    $this->excluded = $excluded;
+    return $this;
+  }
+
+  /**
+   * @return boolean
+   */
   public function isExtensionProvided() {
     return $this->extensionProvided;
   }
diff --git a/src/FeaturesManager.php b/src/FeaturesManager.php
index 523b792..70f925d 100644
--- a/src/FeaturesManager.php
+++ b/src/FeaturesManager.php
@@ -503,7 +503,11 @@ class FeaturesManager implements FeaturesManagerInterface {
         $extension_provided = ($config_collection[$item_name]->isExtensionProvided() === TRUE);
         $already_assigned = !empty($config_collection[$item_name]->getPackage());
         // If this is the profile package, we can reassign extension-provided configuration.
-        $assignable = (!$extension_provided || $this->getAssigner()->getBundle($package->getBundle())->isProfilePackage($package->getMachineName()));
+        $is_profile_package = $this->getAssigner()->getBundle($package->getBundle())->isProfilePackage($package->getMachineName());
+        // An item is assignable if:
+        // - it is not extension provided or this is the profile package, and
+        // - it is not flagged as excluded.
+        $assignable = (!$extension_provided || $is_profile_package) && !$config_collection[$item_name]->isExcluded();
         $excluded_from_package = in_array($package_name, $config_collection[$item_name]->getPackageExcluded());
         $already_in_package = in_array($item_name, $package->getConfig());
         if (($force || (!$already_assigned && $assignable && !$excluded_from_package)) && !$already_in_package) {
diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
index f3aeda9..9790b5f 100644
--- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
+++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
@@ -40,8 +40,9 @@ class FeaturesAssignmentExclude extends FeaturesAssignmentMethodBase {
     $exclude_types = $settings['types']['config'];
     if (!empty($exclude_types)) {
       foreach ($config_collection as $item_name => $item) {
-        if (in_array($item->getType(), $exclude_types)) {
-          unset($config_collection[$item_name]);
+        // Don't exclude already-assigned items.
+        if (empty($item->getPackage()) && in_array($item->getType(), $exclude_types)) {
+          $item->setExcluded(TRUE);
         }
       }
     }
diff --git a/tests/src/Unit/FeaturesManagerTest.php b/tests/src/Unit/FeaturesManagerTest.php
index 1569d3c..a5032e1 100644
--- a/tests/src/Unit/FeaturesManagerTest.php
+++ b/tests/src/Unit/FeaturesManagerTest.php
@@ -388,6 +388,12 @@ class FeaturesManagerTest extends UnitTestCase {
    * @covers ::assignConfigPackage
    */
   public function testAssignConfigPackageWithNonExtensionProvidedConfig() {
+    $assigner = $this->prophesize(FeaturesAssignerInterface::class);
+    $bundle = $this->prophesize(FeaturesBundleInterface::class);
+    $bundle->isProfilePackage('test_package')->willReturn(FALSE);
+    $assigner->getBundle(NULL)->willReturn($bundle->reveal());
+    $this->featuresManager->setAssigner($assigner->reveal());
+
     $config_collection = [
       'test_config' => new ConfigurationItem('test_config', []),
       'test_config2' => new ConfigurationItem('test_config2', [
