diff --git a/features.admin.inc b/features.admin.inc
index 9139a35..2e8259c 100644
--- a/features.admin.inc
+++ b/features.admin.inc
@@ -46,6 +46,14 @@ function features_export_form($form, $form_state, $feature = NULL) {
     '#required' => TRUE,
     '#default_value' => !empty($feature->info['description']) ? $feature->info['description'] : '',
   );
+  $form['info']['package'] = array(
+    '#title' => t('Package'),
+    '#description' => t('Sort this feature into a package'),
+    '#type' => 'textfield',
+    '#autocomplete_path' => 'features/autocomplete/packages',
+    '#required' => TRUE,
+    '#default_value' => 'Features',
+  );
   $form['info']['version'] = array(
     '#title' => t('Version'),
     '#description' => t('Examples: 7.x-1.0, 7.x-1.0-beta1'),
@@ -201,7 +209,7 @@ function features_export_build_form_submit($form, &$form_state) {
   $export = features_populate($stub, $form_state['values']['sources']['dependencies'], $module_name);
 
   // Directly copy the following attributes
-  $attr = array('name', 'description');
+  $attr = array('name', 'description', 'package');
   foreach ($attr as $key) {
     $export[$key] = isset($form_state['values'][$key]) ? $form_state['values'][$key] : NULL;
   }
@@ -849,4 +857,30 @@ function features_dom_decode_options($options, $keys_only = FALSE) {
     $encoded[strtr($key, $replacements)] = $keys_only ? $value : strtr($value, $replacements);
   }
   return $encoded;
-}
\ No newline at end of file
+}
+
+/**
+ * Page callback: Autocomplete field for features package.
+ *
+ * @param $search_string
+ *   The char or string that user have written in autocomplete field, this is the string this function uses for filter.
+ *
+ * @see features_menu()
+ */
+function _features_autocomplete_packages($search_string) {
+  $all_features = array();
+  //fetch all modules that are features and copy the package name into a new array.
+  foreach (features_get_features(NULL, TRUE) as $key => $value) {
+    array_push($all_features, $value->info[package]);
+  }
+  //removes duplicated package, we wont a list of all unique packages.
+  $match = array();
+  $all_features = array_unique($all_features);
+  //filter all features with the $search_string.
+  foreach ($all_features as $key => $value) {
+    if(preg_match('/'.$search_string.'/', $value)) {
+      $match[$value] = $value;
+    }
+  }
+  drupal_json_output($match);
+}
diff --git a/features.export.inc b/features.export.inc
index 8c34ed7..09323bd 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -147,7 +147,7 @@ function features_export_prepare($export, $module_name, $reset = FALSE) {
   $existing = features_get_modules($module_name, $reset);
 
   // Prepare info string -- if module exists, merge into its existing info file
-  $defaults = $existing ? $existing->info : array('core' => '7.x', 'package' => 'Features');
+  $defaults = $existing ? $existing->info : array('core' => '7.x', 'package' => $export['package']);
   $export = array_merge($defaults, $export);
 
   // Cleanup info array
diff --git a/features.module b/features.module
index fa82746..3a4d874 100644
--- a/features.module
+++ b/features.module
@@ -154,6 +154,12 @@ function features_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'features.admin.inc',
   );
+  $items['features/autocomplete/packages'] = array(
+    'page callback' => '_features_autocomplete_packages',
+    'access arguments' => array('administer features'),
+    'type' => MENU_CALLBACK,
+    'file' => 'features.admin.inc',
+  );
   foreach ($items as $path => $item) {
     if (!isset($item['access callback'])) {
       $items[$path]['access callback'] = 'user_access';
