diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb
index 58e9049f158e0f7191f1cdcc0fac1bec293cb63b..0b7fcdf5e9e60e67df33ff468e51c1bdfe6f112f 100644
--- a/app/controllers/dashboard/projects_controller.rb
+++ b/app/controllers/dashboard/projects_controller.rb
@@ -36,7 +36,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
   private
 
   def load_events
-    @events = Event.in_projects(@projects.pluck(:id))
+    @events = Event.in_projects(@projects)
     @events = @event_filter.apply_filter(@events).with_associations
     @events = @events.limit(20).offset(params[:offset] || 0)
   end
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 087da935087149bbf6d76bb39ca136388c4f3765..139e40db180ffee38c873eab2cccecc95d84b957 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -23,14 +23,14 @@ class DashboardController < Dashboard::ApplicationController
   protected
 
   def load_events
-    project_ids =
+    projects =
       if params[:filter] == "starred"
         current_user.starred_projects
       else
         current_user.authorized_projects
-      end.pluck(:id)
+      end
 
-    @events = Event.in_projects(project_ids)
+    @events = Event.in_projects(projects)
     @events = @event_filter.apply_filter(@events).with_associations
     @events = @events.limit(20).offset(params[:offset] || 0)
   end
diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index fb26a4e6fc335a3780394b5d8388ee32268999e6..7bbef5ab29ce38c7837cbd9a2e3d69dc2757d123 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -87,10 +87,6 @@ class GroupsController < Groups::ApplicationController
     @projects ||= ProjectsFinder.new.execute(current_user, group: group).sorted_by_activity.non_archived
   end
 
-  def project_ids
-    @projects.pluck(:id)
-  end
-
   # Dont allow unauthorized access to group
   def authorize_read_group!
     unless @group and (@projects.present? or can?(current_user, :read_group, @group))
@@ -123,7 +119,7 @@ class GroupsController < Groups::ApplicationController
   end
 
   def load_events
-    @events = Event.in_projects(project_ids)
+    @events = Event.in_projects(@projects)
     @events = event_filter.apply_filter(@events).with_associations
     @events = @events.limit(20).offset(params[:offset] || 0)
   end
diff --git a/app/models/event.rb b/app/models/event.rb
index 01d008035a585875f247bfa62274a7cffdc17d9a..8dfc1d047099b9f30ce994cf13c6e7fc6ca4c11b 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -47,7 +47,11 @@ class Event < ActiveRecord::Base
   # Scopes
   scope :recent, -> { reorder(id: :desc) }
   scope :code_push, -> { where(action: PUSHED) }
-  scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent }
+
+  scope :in_projects, ->(projects) do
+    where(project_id: projects.reorder(nil).id_only).recent
+  end
+
   scope :with_associations, -> { includes(project: :namespace) }
   scope :for_milestone_id, ->(milestone_id) { where(target_type: "Milestone", target_id: milestone_id) }
 
diff --git a/app/models/project.rb b/app/models/project.rb
index 4bd51449c25051ca7dba47ad1186473d2266486a..63ecf5b7105e7cd971ddde6e1bae181e808c6cca 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -215,6 +215,8 @@ class Project < ActiveRecord::Base
   scope :public_and_internal_only, -> { where(visibility_level: Project.public_and_internal_levels) }
   scope :non_archived, -> { where(archived: false) }
 
+  scope :id_only, -> { select(:id) }
+
   state_machine :import_status, initial: :none do
     event :import_start do
       transition [:none, :finished] => :started