diff --git a/features.drush.inc b/features.drush.inc
index c73c5bf..27da560 100644
--- a/features.drush.inc
+++ b/features.drush.inc
@@ -233,7 +233,16 @@ function drush_features_add() {
           $choice = _drush_features_component_find($component, $source);
           if ($choice !== FALSE) {
             drush_print(dt('Selected component "!component".', array('!component' => $choice->source . ':' . $choice->component)));
-            $items[$choice->source][] = $choice->component;
+            if ($choice->component != 'All') {
+              $items[$choice->source][] = $choice->component;
+            }
+            else {
+              $components = _drush_features_component_list(null, $choice->source, FALSE);
+              foreach ($components as $component){
+                list($choice->source,$choice->component) = explode(":",$component);
+                $items[$choice->source][] = $choice->component;
+              }
+            }
             continue;
           }
           return drush_set_error('', dt('Unknown component !arg', array('!arg' => $arg)));
@@ -296,6 +305,7 @@ function _drush_features_component_find($arg = NULL, $source = NULL, $limit = 10
      }
 
      if ($proceed) {
+       array_unshift($components, $source . ':All');
        $choice = drush_choice($components, 'Enter a number to choose which component to use.');
        if ($choice !== FALSE) {
          $retn = new stdClass;
