diff --git a/app/assets/javascripts/activities.js.coffee b/app/assets/javascripts/activities.js.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..fdefbfb92bd9f148c3cd0611672357a79994e370
--- /dev/null
+++ b/app/assets/javascripts/activities.js.coffee
@@ -0,0 +1,31 @@
+class Activities
+  constructor: ->
+    Pager.init 20, true
+    $(".event_filter_link").bind "click", (event) =>
+      event.preventDefault()
+      @toggleFilter($(event.currentTarget))
+      @reloadActivities()
+
+  reloadActivities: ->
+    $(".content_list").html ''
+    Pager.init 20, true
+
+
+  toggleFilter: (sender) ->
+    sender.parent().toggleClass "inactive"
+    event_filters = $.cookie("event_filter")
+    filter = sender.attr("id").split("_")[0]
+    if event_filters
+      event_filters = event_filters.split(",")
+    else
+      event_filters = new Array()
+
+    index = event_filters.indexOf(filter)
+    if index is -1
+      event_filters.push filter
+    else
+      event_filters.splice index, 1
+
+    $.cookie "event_filter", event_filters.join(","), { path: '/' }
+
+@Activities = Activities
diff --git a/app/assets/javascripts/dashboard.js.coffee b/app/assets/javascripts/dashboard.js.coffee
index 4871936d5b2a43de3f1a6962c60fad5f15af5135..d2bd9e7362b5c87aed0b99af04763cb5f1dcf911 100644
--- a/app/assets/javascripts/dashboard.js.coffee
+++ b/app/assets/javascripts/dashboard.js.coffee
@@ -1,13 +1,7 @@
 class Dashboard
   constructor: ->
-    Pager.init 20, true
     @initSidebarTab()
 
-    $(".event_filter_link").bind "click", (event) =>
-      event.preventDefault()
-      @toggleFilter($(event.currentTarget))
-      @reloadActivities()
-
     $(".dash-filter").keyup ->
       terms = $(this).val()
       uiBox = $(this).parents('.ui-box').first()
@@ -24,27 +18,6 @@ class Dashboard
 
 
 
-  reloadActivities: ->
-    $(".content_list").html ''
-    Pager.init 20, true
-
-  toggleFilter: (sender) ->
-    sender.parent().toggleClass "inactive"
-    event_filters = $.cookie("event_filter")
-    filter = sender.attr("id").split("_")[0]
-    if event_filters
-      event_filters = event_filters.split(",")
-    else
-      event_filters = new Array()
-
-    index = event_filters.indexOf(filter)
-    if index is -1
-      event_filters.push filter
-    else
-      event_filters.splice index, 1
-
-    $.cookie "event_filter", event_filters.join(","), { path: '/' }
-
   initSidebarTab: ->
     key = "dashboard_sidebar_filter"
 
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
index b0b947dd476bdc4d3d89961fcc44ccd44cb44c3f..c8ddbed5097d69bee8d48654571672e4103a1dcd 100644
--- a/app/assets/javascripts/dispatcher.js.coffee
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -20,10 +20,11 @@ class Dispatcher
         Issues.init()
       when 'dashboard:show'
         new Dashboard()
+        new Activities()
       when 'projects:commit:show'
         new Commit()
       when 'groups:show', 'projects:show'
-        Pager.init(20, true)
+        new Activities()
       when 'projects:new', 'projects:edit'
         new Project()
       when 'projects:walls:show'
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 724122d4b9380bd3abff985062f4263cd186704b..b93bf0f98eba9ce18f544f687eae05f7ce26136e 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -155,4 +155,9 @@ class ApplicationController < ActionController::Base
       redirect_to new_profile_password_path and return
     end
   end
+
+  def event_filter
+    filters = cookies['event_filter'].split(',') if cookies['event_filter'].present?
+    @event_filter ||= EventFilter.new(filters)
+  end
 end
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index f6620b25818660626d37ebb4544df3c5a2005aa7..23da2c274dc8db444c197dff2d72e996a5d24b80 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -66,9 +66,4 @@ class DashboardController < ApplicationController
   def load_projects
     @projects = current_user.authorized_projects.sorted_by_activity
   end
-
-  def event_filter
-    filters = cookies['event_filter'].split(',') if cookies['event_filter'].present?
-    @event_filter ||= EventFilter.new(filters)
-  end
 end
diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index 60fc3f6b551fb416f3944c3778f6b69ef182f1b1..3378675692a24edc09e24fd947033b8e2ae5effc 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -31,7 +31,9 @@ class GroupsController < ApplicationController
   end
 
   def show
-    @events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
+    @events = Event.in_projects(project_ids)
+    @events = event_filter.apply_filter(@events)
+    @events = @events.limit(20).offset(params[:offset] || 0)
     @last_push = current_user.recent_push
 
     respond_to do |format|
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 9b4fe5a9b5bda321a8fcbebad29b01f5eeb2b8b2..23b54ec44a897b5de54005fd65d713f8d6cc00ea 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -55,7 +55,10 @@ class ProjectsController < Projects::ApplicationController
 
   def show
     limit = (params[:limit] || 20).to_i
-    @events = @project.events.recent.limit(limit).offset(params[:offset] || 0)
+
+    @events = @project.events.recent
+    @events = event_filter.apply_filter(@events)
+    @events = @events.limit(limit).offset(params[:offset] || 0)
 
     # Ensure project default branch is set if it possible
     # Normally it defined on push or during creation
diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb
index 3db010966c5eb88cdc09f839973419b79a54304c..3c637404c4f443e24c706d8725c09e82818e3e75 100644
--- a/app/helpers/events_helper.rb
+++ b/app/helpers/events_helper.rb
@@ -28,7 +28,7 @@ module EventsHelper
                end
 
     content_tag :div, class: "filter_icon #{inactive}" do
-      link_to dashboard_path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do
+      link_to request.path, class: 'has_tooltip event_filter_link', id: "#{key}_event_filter", 'data-original-title' => tooltip do
         content_tag :i, nil, class: icon_for_event[key]
       end
     end
diff --git a/app/views/dashboard/_activities.html.haml b/app/views/dashboard/_activities.html.haml
index 2b7d23c225d49f770b6d150661e74f319c75638f..891177263173f01ac8e38a598084d0998c8714df 100644
--- a/app/views/dashboard/_activities.html.haml
+++ b/app/views/dashboard/_activities.html.haml
@@ -1,10 +1,5 @@
 = render "events/event_last_push", event: @last_push
-
-.event_filter
-  = event_filter_link EventFilter.push, 'Push events'
-  = event_filter_link EventFilter.merged, 'Merge events'
-  = event_filter_link EventFilter.comments, 'Comments'
-  = event_filter_link EventFilter.team, 'Team'
+= render 'shared/event_filter'
 
 - if @events.any?
   .content_list
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 8afc4ab4a12430f120f738cee4829a22b3a1469f..e613ed3eaa3531b7bc70fa05d8f76da30a8e8d80 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -6,6 +6,7 @@
     &nbsp;
     %span.cgray You will only see events from projects in this group
     %hr
+    = render 'shared/event_filter'
     - if @events.any?
       .content_list
     - else
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 8a3427f3980f1fa72a54c82f05259b839ea41271..06ca5169dff0e7a682eb9ea52f42f10756fde061 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -3,6 +3,7 @@
 .row
   .span9
     = render "events/event_last_push", event: @last_push
+    = render 'shared/event_filter'
     .content_list
     .loading.hide
   .span3
diff --git a/app/views/shared/_event_filter.html.haml b/app/views/shared/_event_filter.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..ee0b57fbe5afc2f3a7d9eb71cc51e044bfdf1368
--- /dev/null
+++ b/app/views/shared/_event_filter.html.haml
@@ -0,0 +1,5 @@
+.event_filter
+  = event_filter_link EventFilter.push, 'Push events'
+  = event_filter_link EventFilter.merged, 'Merge events'
+  = event_filter_link EventFilter.comments, 'Comments'
+  = event_filter_link EventFilter.team, 'Team'