diff --git a/features.admin.inc b/features.admin.inc
index 9139a35..6ee68ff 100644
--- a/features.admin.inc
+++ b/features.admin.inc
@@ -46,6 +46,15 @@ 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',
+    //'#default_value' => !empty($feature->info['package']) ? $feature->info['package'] : 'Features',
+  );
   $form['info']['version'] = array(
     '#title' => t('Version'),
     '#description' => t('Examples: 7.x-1.0, 7.x-1.0-beta1'),
@@ -201,7 +210,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;
   }
@@ -327,7 +336,7 @@ function features_admin_form($form, $form_state) {
   $modules = array_filter(features_get_modules(), 'features_filter_hidden');
   $features = array_filter(features_get_features(), 'features_filter_hidden');
   $conflicts = features_get_conflicts();
-    
+
   foreach ($modules as $key => $module) {
     if ($module->status && !empty($module->info['dependencies'])) {
       foreach ($module->info['dependencies'] as $dependent) {
@@ -340,8 +349,8 @@ function features_admin_form($form, $form_state) {
 
   if ( empty($features) ) {
     $form['no_features'] = array(
-      '#markup' => t('No Features were found. Please use the !create_link link to create 
-      a new Feature module, or upload an existing Feature to your modules directory.', 
+      '#markup' => t('No Features were found. Please use the !create_link link to create
+      a new Feature module, or upload an existing Feature to your modules directory.',
       array('!create_link' => l(t('Create Feature'), 'admin/structure/features/create'))),
     );
     return $form ;
@@ -515,7 +524,7 @@ function features_admin_components($form, $form_state, $feature) {
   $form['#conflicts'] = $conflicts;
 
   $review = $revert = FALSE;
-    
+
   // Iterate over components and retrieve status for display
   $states = features_get_component_states(array($feature->name), FALSE);
   $form['revert']['#tree'] = TRUE;
@@ -541,7 +550,7 @@ function features_admin_components($form, $form_state, $feature) {
     else {
       $path = NULL;
     }
-      
+
     $storage = FEATURES_DEFAULT;
     if (array_key_exists($component, $states[$feature->name])) {
       $storage = $states[$feature->name][$component];
@@ -774,7 +783,7 @@ function features_feature_diff($feature, $component = NULL) {
     $formatter->leading_context_lines = 2;
     $formatter->trailing_context_lines = 2;
     //$formatter->show_header = $show_header
-    
+
     $rows = array();
     foreach ($overrides as $component => $items) {
       $rows[] = array(array(array('data' => $component, 'colspan' => 4, 'header' => TRUE)));
@@ -849,4 +858,24 @@ function features_dom_decode_options($options, $keys_only = FALSE) {
     $encoded[strtr($key, $replacements)] = $keys_only ? $value : strtr($value, $replacements);
   }
   return $encoded;
+}
+/*
+ * menu callback
+ */
+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 $k => $m) {
+    array_push($all_features, $m->info[package]);
+  }
+  //removes duplicated package, we wont a list of all unique packages.
+  $match = array();
+  $all_features = array_unique($all_features);
+  foreach ($all_features as $key => $value) {
+    if(preg_match('/'.$search_string.'/', $value)) {
+      //array_push($match, $value);
+      $match[$value] = $value;
+    }
+  }
+  drupal_json_output($match);
 }
\ No newline at end of file
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..56b209e 100644
--- a/features.module
+++ b/features.module
@@ -154,6 +154,15 @@ 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',
+  );
+   $items['davva'] = array(
+    'page callback' => 'davva',
+  );
   foreach ($items as $path => $item) {
     if (!isset($item['access callback'])) {
       $items[$path]['access callback'] = 'user_access';
@@ -889,3 +898,6 @@ function features_hook_info() {
   );
   return array_fill_keys($hooks, array('group' => 'features'));
 }
+function davva() {
+  print 'e kung!';
+}
\ No newline at end of file
