diff --git a/Gemfile b/Gemfile
index ad9fef38da1bb9469cc57ce62ba62021a272701f..6950091b2b0284730be14d0425213fb5192c5224 100644
--- a/Gemfile
+++ b/Gemfile
@@ -121,6 +121,8 @@ end
 
 # State machine
 gem "state_machine", '~> 1.2.0'
+# Run events after state machine commits
+gem 'after_commit_queue'
 
 # Issue tags
 gem 'acts-as-taggable-on', '~> 3.4'
diff --git a/Gemfile.lock b/Gemfile.lock
index e306c1f56e648e0e333a644125c4621bf552180f..4386c6b9abb2d39ab067d1e63e85ca91a04d0bf9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -42,6 +42,8 @@ GEM
     acts-as-taggable-on (3.5.0)
       activerecord (>= 3.2, < 5)
     addressable (2.3.8)
+    after_commit_queue (1.1.0)
+      rails (>= 3.0)
     annotate (2.6.10)
       activerecord (>= 3.2, <= 4.3)
       rake (~> 10.4)
@@ -787,6 +789,7 @@ DEPENDENCIES
   activerecord-session_store (~> 0.1.0)
   acts-as-taggable-on (~> 3.4)
   addressable (~> 2.3.8)
+  after_commit_queue
   annotate (~> 2.6.0)
   asana (~> 0.0.6)
   asciidoctor (~> 1.5.2)
diff --git a/app/models/project.rb b/app/models/project.rb
index 5deddb2fbc41e3709c84ee1adf97ba32b83bb984..e912c48467d1e47259aa11a4e9ac6febb83cdcae 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -39,6 +39,7 @@ class Project < ActiveRecord::Base
   include Gitlab::VisibilityLevel
   include Referable
   include Sortable
+  include AfterCommitQueue
 
   extend Gitlab::ConfigHelper
   extend Enumerize
@@ -191,7 +192,7 @@ def set_last_activity_at
     state :finished
     state :failed
 
-    after_transition any => :started, do: :add_import_job
+    after_transition any => :started, do: :schedule_add_import_job
     after_transition any => :finished, do: :clear_import_data
   end
 
@@ -275,15 +276,17 @@ def saved?
     id && persisted?
   end
 
+  def schedule_add_import_job
+    run_after_commit(:add_import_job)
+  end
+
   def add_import_job
-    # Schedule these jobs after 2 seconds to ensure DB changes to import_status
-    # are saved by the time the workers start
     if forked?
-      unless RepositoryForkWorker.perform_in(2.seconds, id, forked_from_project.path_with_namespace, self.namespace.path)
+      unless RepositoryForkWorker.perform_async(id, forked_from_project.path_with_namespace, self.namespace.path)
         import_fail
       end
     else
-      RepositoryImportWorker.perform_in(2.seconds, id)
+      RepositoryImportWorker.perform_async(id)
     end
   end