diff --git a/app/models/commit.rb b/app/models/commit.rb
index 084cf42007982ed5bd20b3a22639c3497d4d22a4..7a0ad1376509d76a51bd72428be4c6b5117b1fcf 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -118,7 +118,7 @@ class Commit
   # Discover issues should be closed when this commit is pushed to a project's
   # default branch.
   def closes_issues(project, current_user = self.committer)
-    Gitlab::ClosingIssueExtractor.closed_by_message_in_project(safe_message, project, current_user)
+    Gitlab::ClosingIssueExtractor.new(project, current_user).closed_by_message(safe_message)
   end
 
   # Mentionable override.
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 167d7f9c71f21fe3c9319315d4758fb4f565b08a..35cb920d8bc1b5605537f740f1f26cb7f294711a 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -260,8 +260,8 @@ class MergeRequest < ActiveRecord::Base
   def closes_issues(current_user = self.author)
     if target_branch == project.default_branch
       issues = commits.flat_map { |c| c.closes_issues(project, current_user) }
-      issues.push(*Gitlab::ClosingIssueExtractor.
-                  closed_by_message_in_project(description, project, current_user))
+      issues.push(*Gitlab::ClosingIssueExtractor.new(project, current_user).
+                  closed_by_message(description))
       issues.uniq.sort_by(&:id)
     else
       []
diff --git a/lib/gitlab/closing_issue_extractor.rb b/lib/gitlab/closing_issue_extractor.rb
index 6425193d85f8508eef08c0c6b95a09b59caa325c..ab184d95c052587c3cf848245386335652fe5202 100644
--- a/lib/gitlab/closing_issue_extractor.rb
+++ b/lib/gitlab/closing_issue_extractor.rb
@@ -1,21 +1,20 @@
 module Gitlab
-  module ClosingIssueExtractor
+  class ClosingIssueExtractor
     ISSUE_CLOSING_REGEX = Regexp.new(Gitlab.config.gitlab.issue_closing_pattern)
 
-    def self.closed_by_message_in_project(message, project, current_user = nil)
-      issues = []
+    def initialize(project, current_user = nil)
+      @extractor = Gitlab::ReferenceExtractor.new(project, current_user)
+    end
 
-      unless message.nil?
-        md = message.scan(ISSUE_CLOSING_REGEX)
+    def closed_by_message(message)
+      return [] if message.nil?
+      
+      closing_statements = message.scan(ISSUE_CLOSING_REGEX).
+        map { |ref| ref[0] }.join(" ")
 
-        md.each do |ref|
-          extractor = Gitlab::ReferenceExtractor.new(project, current_user)
-          extractor.analyze(ref[0])
-          issues += extractor.issues
-        end
-      end
+      @extractor.analyze(closing_statements)
 
-      issues.uniq
+      @extractor.issues
     end
   end
 end