diff --git a/project_issue.field_group.inc b/project_issue.field_group.inc
index bb02c01..32341e0 100644
--- a/project_issue.field_group.inc
+++ b/project_issue.field_group.inc
@@ -26,6 +26,7 @@ function project_issue_field_group_info() {
     'children' => array(
       0 => 'field_project_has_issue_queue',
       1 => 'field_project_components',
+      2 => 'field_project_default_component',
     ),
     'format_type' => 'tab',
     'format_settings' => array(
diff --git a/project_issue.install b/project_issue.install
index cb5f91d..746b3d7 100644
--- a/project_issue.install
+++ b/project_issue.install
@@ -1032,3 +1032,62 @@ function project_issue_update_7010() {
 
   db_query("UPDATE {field_data_body} fdb INNER JOIN {node} n ON n.nid = fdb.entity_id AND n.type = 'project_issue' SET fdb.body_summary = NULL");
 }
+
+/**
+ * Set up project issue 'default component' field.
+ */
+function project_issue_update_7011() {
+  $t = get_t();
+
+  // Set up project-issue specific field for 'default component'.
+  $default_component = array(
+    'type' => 'list_text',
+    'field_name' => 'field_project_default_component',
+    'label' => $t('Default component'),
+    'cardinality' => 1,
+    'settings' => array(
+      'allowed_values_function' => 'project_issue_default_component_allowed_values',
+    ),
+  );
+  if (!field_info_field('field_project_default_component')) {
+    field_create_field($default_component);
+  }
+
+  // Add field to our known 'project' node types
+  $bundles = project_project_node_types();
+
+  foreach ($bundles as $bundle) {
+  $default_component_instance = array(
+      'bundle' => $bundle,
+      'description' => $t('Used to set the initial default component for new project issues.'),
+      'display' => array(
+        'default' => array(
+          'label' => 'above',
+          'type' => 'hidden',
+          'settings' => array(),
+          'weight' => 6,
+        ),
+        'teaser' => array(
+          'type' => 'hidden',
+          'label' => 'above',
+          'settings' => array(),
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'node',
+      'field_name' => 'field_project_default_component',
+      'label' => $t('Default component'),
+      'widget' => array(
+        'weight' => '0',
+        'settings' => array(
+          'display_label' => TRUE,
+        ),
+      ),
+      'required' => FALSE,
+      'default_value' => array(0),
+    );
+    if (!field_info_instance('node', 'field_project_default_component', $bundle)) {
+      field_create_instance($default_component_instance);
+    }
+  }
+}
diff --git a/project_issue.module b/project_issue.module
index 97e6f35..027e1a9 100644
--- a/project_issue.module
+++ b/project_issue.module
@@ -1862,7 +1862,7 @@ function project_issue_field_extra_fields() {
     );
     if (module_exists('flag_tracker')) {
       $follow_flag = flag_tracker_get_tracker_flag($bundle_name);
-      if (!empty($follow_flag)) {      
+      if (!empty($follow_flag)) {
         $extra['node'][$bundle_name]['display']['follow_link'] = array(
           'label' => t('Issue follow link'),
           'description' => t('A link to follow the issue.'),
@@ -2221,8 +2221,13 @@ function project_issue_project_issue_assignees($issue, $project, $current) {
 /**
  * Implements hook_field_widget_form_alter().
  *
- * We use this to swap the label for the uid 0 choice to be 'Unassigned'
- * instead of the username (e.g. 'Anonymous').
+ * We use this to:
+ * 1. swap the label for the uid 0 choice to be 'Unassigned' instead of the
+ *    username (e.g. 'Anonymous'),
+ * 2. swap the label for the default component 0 choice to be '- None (user
+ *    must select) -' instead of 'None', and
+ * 3. update the project_issue 'component' field to set the default value to
+ *    the project's default component if one has been set.
  */
 function project_issue_field_widget_form_alter(&$element, &$form_state, $context) {
   if ($context['field']['field_name'] == 'field_issue_assigned') {
@@ -2230,6 +2235,21 @@ function project_issue_field_widget_form_alter(&$element, &$form_state, $context
       $element['#options'][0] = t('Unassigned');
     }
   }
+  elseif ($context['field']['field_name'] == 'field_project_default_component') {
+    if (isset($element['#options']['_none'])) {
+      $element['#options']['_none'] = t('- None (user must select) -');
+    }
+  }
+  elseif ($context['field']['field_name'] == 'field_issue_component' && empty($element['#default_value'])) {
+    $pid = $element['#entity']->field_project[LANGUAGE_NONE][0]['target_id'];
+    $project = node_load($pid);
+    if (!empty($project->field_project_default_component[LANGUAGE_NONE][0]['value'])) {
+      $default_component = $project->field_project_default_component[LANGUAGE_NONE][0]['value'];
+      $element['#default_value'] = array(
+        $default_component => $default_component,
+      );
+    }
+  }
 }
 
 /**
@@ -2409,5 +2429,20 @@ function project_issue_preprocess_project_issue_auto_close_message(&$variables)
  *   Message to be added as a comment to an issue when auto-closing that issue.
  */
 function theme_project_issue_auto_close_message($variables) {
-  return t('Automatically closed — issue fixed for !interval with no activity.', array('!interval' => $variables['auto_close_interval']));
+  return t('Automatically closed - issue fixed for !interval with no activity.', array('!interval' => $variables['auto_close_interval']));
+}
+
+/**
+ * Allowed values callback for a project's 'default component' select box.
+ */
+function project_issue_default_component_allowed_values($field, $instance, $entity_type, $entity) {
+  $return = array();
+  if ($entity) {
+    if (!empty($entity->field_project_components[$entity->language])) {
+      foreach ($entity->field_project_components[$entity->language] as $component) {
+        $return[$component['value']] = $component['value'];
+      }
+    }
+  }
+  return $return;
 }
