diff --git a/includes/project_issue_node_type.inc b/includes/project_issue_node_type.inc
index 9a03391..e2b19c3 100644
--- a/includes/project_issue_node_type.inc
+++ b/includes/project_issue_node_type.inc
@@ -664,6 +664,154 @@ function _project_issue_create_issue_node_type() {
   if (!field_info_instance('comment', 'field_issue_changes', 'project_issue')) {
     field_create_instance($instance);
   }
+
+  // Parent.
+  $field = array(
+    'translatable' => '0',
+    'settings' => array(
+      'target_type' => 'node',
+      'handler' => 'project_behavior',
+      'handler_settings' => array(
+        'behavior' => 'project_issue',
+        'sort' => array(
+          'type' => 'none',
+        ),
+        'behaviors' => array(
+          'views-select-list' => array(
+            'status' => 0,
+          ),
+        ),
+      ),
+    ),
+    'field_name' => 'field_issue_parent',
+    'type' => 'entityreference',
+    'active' => '1',
+    'locked' => '0',
+    'cardinality' => '1',
+  );
+  if (!field_info_field('field_issue_parent')) {
+    field_create_field($field);
+  }
+
+  $instance = array(
+    'label' => 'Parent issue',
+    'widget' => array(
+      'weight' => '6',
+      'type' => 'entityreference_autocomplete',
+      'active' => 1,
+      'settings' => array(
+        'match_operator' => 'CONTAINS',
+        'size' => '60',
+        'path' => '',
+      ),
+    ),
+    'settings' => array(
+      'user_register_form' => FALSE,
+    ),
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'type' => 'issue_id',
+        'weight' => '6',
+        'settings' => array(),
+      ),
+      'teaser' => array(
+        'type' => 'hidden',
+        'label' => 'above',
+        'settings' => array(),
+        'weight' => 0,
+      ),
+      'issuemetadata' => array(
+        'type' => 'hidden',
+        'label' => 'above',
+        'settings' => array(),
+        'weight' => 0,
+      ),
+    ),
+    'required' => 0,
+    'description' => '',
+    'default_value' => NULL,
+    'field_name' => 'field_issue_parent',
+    'entity_type' => 'node',
+    'bundle' => 'project_issue',
+  );
+  if (!field_info_instance('node', 'field_issue_parent', 'project_issue')) {
+    field_create_instance($instance);
+  }
+
+  // Related.
+  $field = array(
+    'translatable' => '0',
+    'settings' => array(
+      'target_type' => 'node',
+      'handler' => 'project_behavior',
+      'handler_settings' => array(
+        'behavior' => 'project_issue',
+        'sort' => array(
+          'type' => 'none',
+        ),
+        'behaviors' => array(
+          'views-select-list' => array(
+            'status' => 0,
+          ),
+        ),
+      ),
+    ),
+    'field_name' => 'field_issue_related',
+    'type' => 'entityreference',
+    'active' => '1',
+    'locked' => '0',
+    'cardinality' => FIELD_CARDINALITY_UNLIMITED,
+  );
+  if (!field_info_field('field_issue_related')) {
+    field_create_field($field);
+  }
+
+  $instance = array(
+    'label' => 'Related issues',
+    'widget' => array(
+      'weight' => '7',
+      'type' => 'entityreference_autocomplete',
+      'active' => 1,
+      'settings' => array(
+        'match_operator' => 'CONTAINS',
+        'size' => '60',
+        'path' => '',
+      ),
+    ),
+    'settings' => array(
+      'user_register_form' => FALSE,
+    ),
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'type' => 'issue_id',
+        'weight' => '7',
+        'settings' => array(),
+      ),
+      'teaser' => array(
+        'type' => 'hidden',
+        'label' => 'above',
+        'settings' => array(),
+        'weight' => 0,
+      ),
+      'issuemetadata' => array(
+        'type' => 'hidden',
+        'label' => 'above',
+        'settings' => array(),
+        'weight' => 0,
+      ),
+    ),
+    'required' => 0,
+    'description' => '',
+    'default_value' => NULL,
+    'field_name' => 'field_issue_related',
+    'entity_type' => 'node',
+    'bundle' => 'project_issue',
+  );
+  if (!field_info_instance('node', 'field_issue_related', 'project_issue')) {
+    field_create_instance($instance);
+  }
 }
 
 /**
@@ -676,6 +824,8 @@ function _project_issue_delete_issue_node_type() {
     'field_issue_category',
     'field_issue_component',
     'field_issue_assigned',
+    'field_issue_parent',
+    'field_issue_related',
     'field_project',
     'field_issue_changes',
   );
diff --git a/project_issue.field_group.inc b/project_issue.field_group.inc
index e17c2dd..e6cc665 100644
--- a/project_issue.field_group.inc
+++ b/project_issue.field_group.inc
@@ -168,5 +168,34 @@ function project_issue_field_group_info() {
   );
   $field_groups['group_issue_settings|node|project_issue|form'] = $field_group;
 
+  $field_group = new stdClass();
+  $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */
+  $field_group->api_version = 1;
+  $field_group->identifier = 'group_issue_relations|node|project_issue|form';
+  $field_group->group_name = 'group_issue_relations';
+  $field_group->entity_type = 'node';
+  $field_group->bundle = 'project_issue';
+  $field_group->mode = 'form';
+  $field_group->parent_name = 'group_issue_metadata';
+  $field_group->data = array(
+    'label' => 'Issue relations',
+    'weight' => '4',
+    'children' => array(
+      0 => 'field_issue_parent',
+      1 => 'field_issue_related',
+    ),
+    'format_type' => ' fieldset',
+    'format_settings' => array(
+      'label' => 'Issue relations',
+      'instance_settings' => array(
+        'required_fields' => 0,
+        'classes' => '',
+        'description' => '',
+      ),
+      'formatter' => ' collapsible',
+    ),
+  );
+  $field_groups['group_issue_relations|node|project_issue|form'] = $field_group;
+
   return $field_groups;
 }
diff --git a/project_issue.info b/project_issue.info
index 549c7f7..ea35c53 100644
--- a/project_issue.info
+++ b/project_issue.info
@@ -26,6 +26,8 @@ files[] = tests/integration/maintainers.test
 files[] = views/plugins/project_issue_table_plugin_style.inc
 files[] = views/plugins/project_issue_plugin_access_per_user_queue.inc
 files[] = views/plugins/project_issue_plugin_argument_validate_project_nid.inc
+files[] = views/plugins/project_issue_plugin_argument_validate_project_issue_nid.inc
+files[] = views/plugins/project_issue_plugin_row_project_issue_node_view.inc
 files[] = views/handlers/project_issue_handler_field_issue_priority.inc
 files[] = views/handlers/project_issue_handler_field_issue_queue_link.inc
 files[] = views/handlers/project_issue_handler_filter_dereference_list.inc
diff --git a/project_issue.module b/project_issue.module
index 78061a0..d87be72 100644
--- a/project_issue.module
+++ b/project_issue.module
@@ -725,10 +725,17 @@ function project_issue_preprocess_field(&$variables) {
  * @ingroup project_issue_filter themeable
  */
 function template_preprocess_project_issue_issue_link(&$variables) {
-  $node = $variables['node'];
-  $comment_id = $variables['comment_id'];
-  $comment_number = $variables['comment_number'];
-  $include_assigned = $variables['include_assigned'];
+  // This theme function can also be invoked by Views.
+  if (isset($variables['view'])) {
+    $node = node_load($variables['row']->node_nid);
+    $include_assigned = $variables['options']['include_assigned'];
+  }
+  else {
+    $node = $variables['node'];
+    $comment_id = $variables['comment_id'];
+    $comment_number = $variables['comment_number'];
+    $include_assigned = $variables['include_assigned'];
+  }
 
   $node_wrapper = entity_metadata_wrapper('node', $node);
 
diff --git a/views/default_views/project_issue_issue_relations.view.php b/views/default_views/project_issue_issue_relations.view.php
new file mode 100644
index 0000000..be8c3a2
--- /dev/null
+++ b/views/default_views/project_issue_issue_relations.view.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * @file
+ * Issues that are related to a specific issue.
+ */
+
+$view = new view();
+$view->name = 'project_issue_issue_relations';
+$view->description = 'Project issues that are related to a specific issue.';
+$view->tag = 'default';
+$view->base_table = 'node';
+$view->human_name = '';
+$view->core = 7;
+$view->api_version = '3.0';
+$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+/* Display: Master */
+$handler = $view->new_display('default', 'Master', 'default');
+$handler->display->display_options['title'] = 'Related issues';
+$handler->display->display_options['use_more_always'] = FALSE;
+$handler->display->display_options['access']['type'] = 'perm';
+$handler->display->display_options['cache']['type'] = 'none';
+$handler->display->display_options['query']['type'] = 'views_query';
+$handler->display->display_options['exposed_form']['type'] = 'basic';
+$handler->display->display_options['pager']['type'] = 'some';
+$handler->display->display_options['pager']['options']['items_per_page'] = '50';
+$handler->display->display_options['pager']['options']['offset'] = '0';
+$handler->display->display_options['style_plugin'] = 'list';
+$handler->display->display_options['row_plugin'] = 'project_issue_node';
+$handler->display->display_options['row_options']['include_assigned'] = TRUE;
+/* Sort criterion: Content: Nid */
+$handler->display->display_options['sorts']['nid']['id'] = 'nid';
+$handler->display->display_options['sorts']['nid']['table'] = 'node';
+$handler->display->display_options['sorts']['nid']['field'] = 'nid';
+/* Filter criterion: Content: Published or admin */
+$handler->display->display_options['filters']['status_extra']['id'] = 'status_extra';
+$handler->display->display_options['filters']['status_extra']['table'] = 'node';
+$handler->display->display_options['filters']['status_extra']['field'] = 'status_extra';
+$handler->display->display_options['filters']['status_extra']['group'] = 1;
+/* Filter criterion: Project: Project system behavior */
+$handler->display->display_options['filters']['project_type']['id'] = 'project_type';
+$handler->display->display_options['filters']['project_type']['table'] = 'node';
+$handler->display->display_options['filters']['project_type']['field'] = 'project_type';
+$handler->display->display_options['filters']['project_type']['value'] = 'project_issue';
+
+/* Display: Block: related issues */
+$handler = $view->new_display('block', 'Block: related issues', 'block_related_issues');
+$handler->display->display_options['defaults']['title'] = FALSE;
+$handler->display->display_options['title'] = 'Related issues';
+$handler->display->display_options['defaults']['pager'] = FALSE;
+$handler->display->display_options['pager']['type'] = 'none';
+$handler->display->display_options['pager']['options']['offset'] = '0';
+$handler->display->display_options['defaults']['relationships'] = FALSE;
+/* Relationship: Entity Reference: Referenced Entity */
+$handler->display->display_options['relationships']['field_issue_related_target_id']['id'] = 'field_issue_related_target_id';
+$handler->display->display_options['relationships']['field_issue_related_target_id']['table'] = 'field_data_field_issue_related';
+$handler->display->display_options['relationships']['field_issue_related_target_id']['field'] = 'field_issue_related_target_id';
+$handler->display->display_options['defaults']['arguments'] = FALSE;
+/* Contextual filter: Content: Nid */
+$handler->display->display_options['arguments']['nid']['id'] = 'nid';
+$handler->display->display_options['arguments']['nid']['table'] = 'node';
+$handler->display->display_options['arguments']['nid']['field'] = 'nid';
+$handler->display->display_options['arguments']['nid']['relationship'] = 'field_issue_related_target_id';
+$handler->display->display_options['arguments']['nid']['default_action'] = 'default';
+$handler->display->display_options['arguments']['nid']['default_argument_type'] = 'node';
+$handler->display->display_options['arguments']['nid']['summary']['number_of_records'] = '0';
+$handler->display->display_options['arguments']['nid']['summary']['format'] = 'default_summary';
+$handler->display->display_options['arguments']['nid']['summary_options']['items_per_page'] = '25';
+$handler->display->display_options['arguments']['nid']['specify_validation'] = TRUE;
+$handler->display->display_options['arguments']['nid']['validate']['type'] = 'project_issue_nid';
+$handler->display->display_options['block_description'] = 'Project issue: related issues';
+
+/* Display: Block: child issues */
+$handler = $view->new_display('block', 'Block: child issues', 'block_child_issues');
+$handler->display->display_options['defaults']['title'] = FALSE;
+$handler->display->display_options['title'] = 'Child issues';
+$handler->display->display_options['defaults']['pager'] = FALSE;
+$handler->display->display_options['pager']['type'] = 'none';
+$handler->display->display_options['pager']['options']['offset'] = '0';
+$handler->display->display_options['defaults']['relationships'] = FALSE;
+/* Relationship: Entity Reference: Referenced Entity */
+$handler->display->display_options['relationships']['field_issue_parent_target_id']['id'] = 'field_issue_parent_target_id';
+$handler->display->display_options['relationships']['field_issue_parent_target_id']['table'] = 'field_data_field_issue_parent';
+$handler->display->display_options['relationships']['field_issue_parent_target_id']['field'] = 'field_issue_parent_target_id';
+$handler->display->display_options['defaults']['arguments'] = FALSE;
+/* Contextual filter: Content: Nid */
+$handler->display->display_options['arguments']['nid']['id'] = 'nid';
+$handler->display->display_options['arguments']['nid']['table'] = 'node';
+$handler->display->display_options['arguments']['nid']['field'] = 'nid';
+$handler->display->display_options['arguments']['nid']['relationship'] = 'field_issue_parent_target_id';
+$handler->display->display_options['arguments']['nid']['default_action'] = 'default';
+$handler->display->display_options['arguments']['nid']['default_argument_type'] = 'node';
+$handler->display->display_options['arguments']['nid']['summary']['number_of_records'] = '0';
+$handler->display->display_options['arguments']['nid']['summary']['format'] = 'default_summary';
+$handler->display->display_options['arguments']['nid']['summary_options']['items_per_page'] = '25';
+$handler->display->display_options['arguments']['nid']['specify_validation'] = TRUE;
+$handler->display->display_options['arguments']['nid']['validate']['type'] = 'project_issue_nid';
+$handler->display->display_options['block_description'] = 'Project issue: child issues';
diff --git a/views/plugins/project_issue_plugin_argument_validate_project_issue_nid.inc b/views/plugins/project_issue_plugin_argument_validate_project_issue_nid.inc
new file mode 100644
index 0000000..a88156f
--- /dev/null
+++ b/views/plugins/project_issue_plugin_argument_validate_project_issue_nid.inc
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * Validate whether an argument is a project issue node.
+ */
+class project_issue_plugin_argument_validate_project_issue_nid extends views_plugin_argument_validate {
+  function validate_argument($argument) {
+    if (is_numeric($argument)) {
+      $query = new EntityFieldQuery;
+      $query
+        // Projects are currently restricted to nodes!
+        ->entityCondition('entity_type', 'node')
+        ->entityCondition('entity_id', $argument)
+        // If there is a field_project, this is a project issue.
+        // This part is what we care about.
+        ->fieldCondition('field_project', 'target_id', NULL, 'IS NOT NULL');
+
+      $result = $query->execute();
+      if (!empty($result['node'])) {
+        // Results were found so this must be a project issue node.
+        return TRUE;
+      }
+    }
+
+    return FALSE;
+  }
+}
diff --git a/views/plugins/project_issue_plugin_row_project_issue_node_view.inc b/views/plugins/project_issue_plugin_row_project_issue_node_view.inc
new file mode 100644
index 0000000..b6aac76
--- /dev/null
+++ b/views/plugins/project_issue_plugin_row_project_issue_node_view.inc
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * Plugin which performs a node_view on the resulting object.
+ *
+ * Most of the code on this object is in the theme function.
+ *
+ */
+class project_issue_plugin_row_project_issue_node_view extends views_plugin_row {
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['include_assigned'] = array('default' => FALSE, 'bool' => TRUE);
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    $form['include_assigned'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Display the user the issue is assigned to'),
+      '#default_value' => $this->options['include_assigned'],
+    );
+  }
+}
diff --git a/views/project_issue.views.inc b/views/project_issue.views.inc
index da58280..81836ab 100644
--- a/views/project_issue.views.inc
+++ b/views/project_issue.views.inc
@@ -241,6 +241,20 @@ function project_issue_views_plugins() {
         'type' => 'normal',
       ),
     ),
+    'row' => array(
+      'project_issue_node' => array(
+        'title' => t('Project issue node'),
+        'help' => t('Display a project issue node with special styling.'),
+        'handler' => 'project_issue_plugin_row_project_issue_node_view',
+        'path' => $path,
+        'theme' => 'project_issue_issue_link',
+        'register theme' => FALSE,
+        'base' => array('node'), // only works with 'node' as base.
+        'uses fields' => FALSE,
+        'uses options' => TRUE,
+        'type' => 'normal',
+      ),
+    ),
     'access' => array(
       'project_issue_access_per_user_queue' => array(
         'title' => t('View per-user issue queues'),
@@ -251,6 +265,11 @@ function project_issue_views_plugins() {
       ),
     ),
     'argument validator' => array(
+      'project_issue_nid' => array(
+        'title' => t('Project issue node'),
+        'handler' => 'project_issue_plugin_argument_validate_project_issue_nid',
+        'path' => $path,
+      ),
       'project_nid_having_issue_queue' => array(
         'title' => t('Project with issue queue'),
         'handler' => 'project_issue_plugin_argument_validate_project_nid',
