diff --git app/controllers/issues_controller.rb app/controllers/issues_controller.rb
index 23d3992f1..b0510dd05 100644
--- app/controllers/issues_controller.rb
+++ app/controllers/issues_controller.rb
@@ -127,6 +127,12 @@ class IssuesController < ApplicationController
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
@issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads]))
if @issue.save
+ if params[:related_to]
+ relation = IssueRelation.new({:relation_type => IssueRelation::TYPE_RELATES, :issue_to => @project.issues.find_by_id(params[:related_to]), :issue_from => @issue})
+ unless relation.save
+ logger.error "Could not create relation due to validation errors: #{relation.errors.full_messages.join(', ')}"
+ end
+ end
call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue})
respond_to do |format|
format.html {
diff --git app/views/issues/_action_menu.html.erb app/views/issues/_action_menu.html.erb
index b535faec9..1159b6467 100644
--- app/views/issues/_action_menu.html.erb
+++ app/views/issues/_action_menu.html.erb
@@ -1,6 +1,7 @@
<%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
<%= link_to l(:button_log_time), new_issue_time_entry_path(@issue), :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %>
+<%= link_to l(:button_create_related_issue), {:controller => 'issues', :action => 'new', :project_id => @project, :related_to => @issue}, :class => 'icon icon-link' if @issue.editable? %>
<%= watcher_link(@issue, User.current) %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %>
<%= link_to l(:button_delete), issue_path(@issue), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if @issue.deletable? %>
diff --git app/views/issues/_form.html.erb app/views/issues/_form.html.erb
index 011928db8..42ef1699c 100644
--- app/views/issues/_form.html.erb
+++ app/views/issues/_form.html.erb
@@ -39,6 +39,8 @@
<%= wikitoolbar_for 'issue_description' %>
<% end %>
+<%= hidden_field_tag 'related_to', '', :size => 4, :id => nil, :value => params[:related_to] %>
+
<%= render :partial => 'issues/attributes' %>
diff --git config/locales/en.yml config/locales/en.yml
index df57a57f3..93d9e9c1b 100644
--- config/locales/en.yml
+++ config/locales/en.yml
@@ -1049,6 +1051,7 @@ en:
button_activate: Activate
button_sort: Sort
button_log_time: Log time
+ button_create_related_issue: Create related issue
button_rollback: Rollback to this version
button_watch: Watch
button_unwatch: Unwatch
diff --git public/stylesheets/application.css public/stylesheets/application.css
index a77589ef1..b72296f69 100644
--- public/stylesheets/application.css
+++ public/stylesheets/application.css
@@ -1257,6 +1259,7 @@ div.wiki img {vertical-align:middle; max-width:100%;}
.icon-move-bottom { background-image: url(../images/2downarrow.png); }
.icon-ok { background-image: url(../images/true.png); }
.icon-not-ok { background-image: url(../images/false.png); }
+.icon-link { background-image: url(../images/link.png); }
.icon-link-break { background-image: url(../images/link_break.png); }
.icon-list { background-image: url(../images/text_list_bullets.png); }
.icon-close { background-image: url(../images/close.png); }