diff --git a/app/models/project_services/asana_service.rb b/app/models/project_services/asana_service.rb
index e6e16058d41bd7223dadb698513a5f7c57bd8b17..bbc508e8f8ed8e1f7be13cfebed42ad7f0c6da58 100644
--- a/app/models/project_services/asana_service.rb
+++ b/app/models/project_services/asana_service.rb
@@ -98,17 +98,29 @@ automatically inspected. Leave blank to include all branches.'
     task_list = []
     close_list = []
 
-    message.split("\n").each do |line|
-      # look for a task ID or a full Asana url
-      task_list.concat(line.scan(/#(\d+)/))
-      task_list.concat(line.scan(/https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)/))
-      # look for a word starting with 'fix' followed by a task ID
-      close_list.concat(line.scan(/(fix\w*)\W*#(\d+)/i))
+    # matches either:
+    # - #1234
+    # - https://app.asana.com/0/0/1234
+    # optionally preceded with:
+    # - fix/ed/es/ing
+    # - close/s/d
+    # - closing
+    issue_finder = /(fix\w*|clos[ei]\w*+)?\W*(?:https:\/\/app\.asana\.com\/\d+\/\d+\/(\d+)|#(\d+))/i
+
+    message.scan(issue_finder).each do |tuple|
+      # tuple will be
+      # [ 'fix', 'id_from_url', 'id_from_pound' ]
+      taskid = tuple[2] || tuple[1]
+      task_list.push(taskid)
+
+      if tuple[0]
+        close_list.push(taskid)
+      end
     end
 
     # post commit to every taskid found
     task_list.each do |taskid|
-      task = Asana::Task.find(taskid[0])
+      task = Asana::Task.find(taskid)
 
       if task
         task.create_story(text: push_msg + ' ' + message)
@@ -117,7 +129,7 @@ automatically inspected. Leave blank to include all branches.'
 
     # close all tasks that had 'fix(ed/es/ing) #:id' in them
     close_list.each do |taskid|
-      task = Asana::Task.find(taskid.last)
+      task = Asana::Task.find(taskid)
 
       if task
         task.modify(completed: true)
diff --git a/spec/models/project_services/asana_service_spec.rb b/spec/models/project_services/asana_service_spec.rb
index 64bb92fba955ef6476ff0afea79c26c525bdc202..e368b03206e1ea146a8ac18a9679c669de08f610 100644
--- a/spec/models/project_services/asana_service_spec.rb
+++ b/spec/models/project_services/asana_service_spec.rb
@@ -62,5 +62,26 @@ describe AsanaService, models: true do
 
       @asana.check_commit('fix #456789', 'pushed')
     end
+
+    it 'should be able to close via url' do
+      expect(Asana::Task).to receive(:find).with('42').twice
+
+      @asana.check_commit('closes https://app.asana.com/19292/956299/42', 'pushed')
+    end
+
+    it 'should allow multiple matches per line' do
+      expect(Asana::Task).to receive(:find).with('123').twice
+      expect(Asana::Task).to receive(:find).with('456').twice
+      expect(Asana::Task).to receive(:find).with('789').once
+
+      expect(Asana::Task).to receive(:find).with('42').once
+      expect(Asana::Task).to receive(:find).with('12').twice
+
+      message = <<-EOF
+      minor bigfix, refactoring, fixed #123 and Closes #456 work on #789
+      ref https://app.asana.com/19292/956299/42 and closing https://app.asana.com/19292/956299/12
+      EOF
+      @asana.check_commit(message, 'pushed')
+    end
   end
 end