diff --git a/ee/app/services/ee/issues/base_service.rb b/ee/app/services/ee/issues/base_service.rb
index 7c9dd4e2f9bef57aefc667669a7b9fa0fb73f936..9a0d2351f370054d602ff0a6ac393ccbc729f516 100644
--- a/ee/app/services/ee/issues/base_service.rb
+++ b/ee/app/services/ee/issues/base_service.rb
@@ -31,7 +31,8 @@ def handle_epic(issue)
       def set_epic_param(issue)
         return unless epic_param_present?
 
-        epic = epic_param || find_epic(issue)
+        epic_id = params.delete(:epic_id)
+        epic = epic_param || find_epic(issue, epic_id)
 
         unless epic
           params[:epic] = nil
@@ -45,8 +46,7 @@ def set_epic_param(issue)
         params[:epic] = epic
       end
 
-      def find_epic(issue)
-        epic_id = params.delete(:epic_id)
+      def find_epic(issue, epic_id)
         return if epic_id.to_i == 0
 
         group = issue.project.group
diff --git a/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb b/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb
index 3b614bb339bcd2b314628d41a05f673cd2494846..ecda44c87c9d53915bb947d39e94d03b2cf839b5 100644
--- a/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb
+++ b/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb
@@ -61,6 +61,31 @@
       end
     end
 
+    context 'when epic param is also present' do
+      context 'when epic_id belongs to another valid epic' do
+        let(:other_epic) { create(:epic, group: group) }
+        let(:params) { { title: 'issue1', epic: epic, epic_id: other_epic.id } }
+
+        it 'creates epic issue link based on the epic param' do
+          issue = execute
+
+          expect(issue.reload).to be_persisted
+          expect(issue.epic).to eq(epic)
+        end
+      end
+
+      context 'when epic_id is empty' do
+        let(:params) { { title: 'issue1', epic: epic, epic_id: '' } }
+
+        it 'creates epic issue link based on the epic param' do
+          issue = execute
+
+          expect(issue.reload).to be_persisted
+          expect(issue.epic).to eq(epic)
+        end
+      end
+    end
+
     context 'when a project is from a subgroup of the epic group' do
       before do
         subgroup = create(:group, parent: group)