diff --git a/features.export.inc b/features.export.inc
index 60d2e27..2ca460d 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -862,7 +862,8 @@ function features_get_component_states($features = array(), $rebuild_only = TRUE
     $cache = array();
   }
 
-  $features = !empty($features) ? $features : array_keys(features_get_features());
+  $all_features = features_get_features();
+  $features = !empty($features) ? $features : array_keys($all_features);
 
   // Retrieve only rebuildable components if requested.
   features_include();
@@ -877,8 +878,8 @@ function features_get_component_states($features = array(), $rebuild_only = TRUE
 
   foreach ($features as $feature) {
     $cache[$feature] = isset($cache[$feature]) ? $cache[$feature] : array();
-    if (module_exists($feature)) {
-      foreach ($components as $component) {
+    if (module_exists($feature) && !empty($all_features[$feature]->components)) {
+      foreach (array_intersect($all_features[$feature]->components, $components) as $component) {
         if (!isset($cache[$feature][$component])) {
           $normal = features_get_signature('normal', $feature, $component, $reset);
           $default = features_get_signature('default', $feature, $component, $reset);
diff --git a/features.module b/features.module
index 45fd611..7159b1a 100644
--- a/features.module
+++ b/features.module
@@ -662,6 +662,10 @@ function features_get_info($type = 'module', $name = NULL, $reset = FALSE) {
           }
         }
         $data['feature'][$row->name] = $row;
+        $data['feature'][$row->name]->components = array_keys($row->info['features']);
+        if (!empty($row->info['dependencies'])) {
+          $data['feature'][$row->name]->components[] = 'dependencies';
+        }
       }
       $data['module'][$row->name] = $row;
     }
