diff --git a/config/install/features.bundle.default.yml b/config/install/features.bundle.default.yml
index 7e78794..af13f6b 100644
--- a/config/install/features.bundle.default.yml
+++ b/config/install/features.bundle.default.yml
@@ -39,6 +39,7 @@ assignments:
       installed: 1
       profile: 1
       namespace: 1
+      namespace_any: 0
     enabled: true
     weight: -5
   existing:
diff --git a/modules/features_ui/src/Form/AssignmentExcludeForm.php b/modules/features_ui/src/Form/AssignmentExcludeForm.php
index 0831342..1a2609d 100644
--- a/modules/features_ui/src/Form/AssignmentExcludeForm.php
+++ b/modules/features_ui/src/Form/AssignmentExcludeForm.php
@@ -48,7 +48,7 @@ class AssignmentExcludeForm extends AssignmentFormBase {
     );
     $form['module']['installed'] = array(
       '#type' => 'checkbox',
-      '#title' => $this->t('Exclude module-provided entity configuration'),
+      '#title' => $this->t('Exclude installed module-provided entity configuration'),
       '#default_value' => $module_settings['installed'],
       '#description' => $this->t('Select this option to exclude from packaging any configuration that is provided by already installed modules.'),
       '#attributes' => array(
@@ -75,10 +75,29 @@ class AssignmentExcludeForm extends AssignmentFormBase {
     $machine_name = !empty($machine_name) ? $machine_name : t('none');
     $form['module']['namespace'] = array(
       '#type' => 'checkbox',
-      '#title' => $this->t("Don't exclude configuration by namespace"),
+      '#title' => $this->t("Don't exclude non-installed configuration by namespace"),
       '#default_value' => $module_settings['namespace'],
-      '#description' => $this->t("Select this option to not exclude from packaging any configuration that is provided by modules with the package namespace (currently %namespace).", array('%namespace' => $machine_name)),
+      '#description' => $this->t("Select this option to not exclude from packaging any configuration that is provided by non-installed modules with the package namespace (currently %namespace).", array('%namespace' => $machine_name)),
       '#states' => $show_if_module_installed_checked,
+      '#attributes' => array(
+        'data-namespace' => 'status',
+      ),
+    );
+
+    $show_if_namespace_checked = array(
+      'visible' => array(
+        ':input[data-namespace="status"]' => array('checked' => TRUE),
+        ':input[data-module-installed="status"]' => array('checked' => TRUE),
+      ),
+    );
+
+    $form['module']['namespace_any'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t("Don't exclude ANY configuration by namespace"),
+      '#default_value' => $module_settings['namespace_any'],
+      '#description' => $this->t("Select this option to not exclude from packaging any configuration that is provided by ANY modules with the package namespace (currently %namespace).
+        Warning: Can cause installed configuration to be reassigned to different packages.", array('%namespace' => $machine_name)),
+      '#states' => $show_if_namespace_checked,
     );
 
     $this->setActions($form);
diff --git a/src/FeaturesBundleInterface.php b/src/FeaturesBundleInterface.php
index b067105..13ae634 100644
--- a/src/FeaturesBundleInterface.php
+++ b/src/FeaturesBundleInterface.php
@@ -102,7 +102,7 @@ interface FeaturesBundleInterface {
    *   The machine name of a package.
    *
    * @return bool
-   *   TRUE if the machine name is prefixed by the bundle machine name.
+   *   TRUE if the package with $machine_name is the bundle profile.
    */
   public function isProfilePackage($machine_name);
 
diff --git a/src/FeaturesManager.php b/src/FeaturesManager.php
index f14a694..dfe4054 100644
--- a/src/FeaturesManager.php
+++ b/src/FeaturesManager.php
@@ -440,7 +440,7 @@ class FeaturesManager implements FeaturesManagerInterface {
     if ($installed) {
       $features_manager = $this;
       $modules = array_filter($modules, function ($extension) use ($features_manager) {
-        return $features_manager->moduleHandler->moduleExists($extension->getName());
+        return $features_manager->extensionEnabled($extension);
       });
     }
 
@@ -450,6 +450,13 @@ class FeaturesManager implements FeaturesManagerInterface {
   /**
    * {@inheritdoc}
    */
+  public function extensionEnabled(Extension $extension) {
+    return $this->moduleHandler->moduleExists($extension->getName());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function initPackage($machine_name, $name = NULL, $description = '', $type = 'module', FeaturesBundleInterface $bundle = NULL, Extension $extension = NULL) {
     if (!isset($this->packages[$machine_name])) {
       return $this->packages[$machine_name] = $this->getPackageObject($machine_name, $name, $description, $type, $bundle, $extension);
@@ -523,26 +530,29 @@ class FeaturesManager implements FeaturesManagerInterface {
         //   - the package hasn't been excluded.
         // - and the item isn't already in the package.
 
-        // Determine if the item is excluded by provider.
-        $provider_excluded = ($config_collection[$item_name]->isProviderExcluded() === TRUE);
-        $already_assigned = !empty($config_collection[$item_name]->getPackage());
+        $item = &$config_collection[$item_name];
+        $already_assigned = !empty($item->getPackage());
         // If this is the profile package, we can reassign extension-provided configuration.
-        $is_profile_package = $this->getAssigner()->getBundle($package->getBundle())->isProfilePackage($package->getMachineName());
+        $is_profile_package = $this->getAssigner()->getBundle($package->getBundle())->isProfilePackage($package_name);
         // An item is assignable if:
         // - it is not provider excluded or this is the profile package, and
         // - it is not flagged as excluded.
-        $assignable = (!$provider_excluded || $is_profile_package) && !$config_collection[$item_name]->isExcluded();
-        $excluded_from_package = in_array($package_name, $config_collection[$item_name]->getPackageExcluded());
+        $assignable = (!$item->isProviderExcluded() || $is_profile_package) && !$item->isExcluded();
+        // An item is assignable if it was provided by the current package
+        $assignable = $assignable || ($item->getProvider() == $package_name);
+        $excluded_from_package = in_array($package_name, $item->getPackageExcluded());
         $already_in_package = in_array($item_name, $package->getConfig());
         if (($force || (!$already_assigned && $assignable && !$excluded_from_package)) && !$already_in_package) {
           // Add the item to the package's config array.
           $package->appendConfig($item_name);
           // Mark the item as already assigned.
-          $config_collection[$item_name]->setPackage($package_name);
+          $item->setPackage($package_name);
 
-          $module_dependencies = $this->getConfigDependency($config_collection[$item_name], $module_list);
+          $module_dependencies = $this->getConfigDependency($item, $module_list);
           $package->setDependencies($this->mergeUniqueItems($package->getDependencies(), $module_dependencies));
         }
+        // Return memory
+        unset($item);
       }
     }
 
@@ -799,7 +809,7 @@ class FeaturesManager implements FeaturesManagerInterface {
       $package->setInfo($info);
       $package->setFeaturesInfo($features_info);
       $package->setConfigOrig($this->listExtensionConfig($extension));
-      $package->setStatus($this->moduleHandler->moduleExists($extension->getName())
+      $package->setStatus($this->extensionEnabled($extension)
         ? FeaturesManagerInterface::STATUS_INSTALLED
         : FeaturesManagerInterface::STATUS_UNINSTALLED);
       $package->setVersion(isset($info['version']) ? $info['version'] : '');
diff --git a/src/FeaturesManagerInterface.php b/src/FeaturesManagerInterface.php
index 91d9953..d175aae 100644
--- a/src/FeaturesManagerInterface.php
+++ b/src/FeaturesManagerInterface.php
@@ -241,6 +241,14 @@ interface FeaturesManagerInterface {
   public function getExtensionInfo(Extension $extension);
 
   /**
+   * Determine if extension is enabled
+   *
+   * @param \Drupal\Core\Extension\Extension $extension
+   * @return bool
+   */
+  public function extensionEnabled(Extension $extension);
+
+  /**
    * Initializes a configuration package.
    *
    * @param string $machine_name
diff --git a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
index 69a4aa0..9857eed 100644
--- a/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
+++ b/src/Plugin/FeaturesAssignment/FeaturesAssignmentExclude.php
@@ -84,7 +84,10 @@ class FeaturesAssignmentExclude extends FeaturesAssignmentMethodBase {
         if ($module_namespace) {
           $modules = $this->featuresManager->getFeaturesModules($current_bundle);
           foreach ($modules as $extension) {
-            $extension_list = array_merge($extension_list, $this->featuresManager->listExtensionConfig($extension));
+            // Only make exception for uninstalled modules
+            if (!empty($exclude_module['namespace_any']) || !$this->featuresManager->extensionEnabled($extension)) {
+              $extension_list = array_merge($extension_list, $this->featuresManager->listExtensionConfig($extension));
+            }
           }
         }
         // If any configuration was found, remove it from the list.
