diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index e85ef3ff25ffdffeab82643bd24bcff02397ac55..cb5fed0bc3e2a3edabf45191c455adc5892bdea9 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -5,8 +5,7 @@ class Groups::MilestonesController < ApplicationController
     @group = Group.find_by(path: params[:group_id])
     project_ids = @group.projects
     project_milestones = Milestone.where(project_id: project_ids)
-    @milestones = project_milestones
-    @group_milestones = Milestones::GroupService.new(@group, current_user, project_milestones)
+    @group_milestones = Milestones::GroupService.new(project_milestones).execute
   end
 
 end
diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c2fb3a5edee77f027b709b416ac4385a437e5461
--- /dev/null
+++ b/app/models/group_milestone.rb
@@ -0,0 +1,41 @@
+class GroupMilestone
+
+  def initialize(title, milestones)
+    @title = title
+    @milestones = milestones
+  end
+
+  def title
+    @title
+  end
+
+  def milestones
+    @milestones
+  end
+
+  def project_names
+    milestones.map{ |milestone| milestone.project.name }
+  end
+
+  def issue_count
+    milestones.map{ |milestone| milestone.issues.count }.sum
+  end
+
+  def merge_requests_count
+    milestones.map{ |milestone| milestone.merge_requests.count }.sum
+  end
+
+  def closed_items_count
+    milestones.map{ |milestone| milestone.closed_items_count }.sum
+  end
+
+  def total_items_count
+    milestones.map{ |milestone| milestone.total_items_count }.sum
+  end
+
+  def percent_complete
+    ((closed_items_count * 100) / total_items_count).abs
+  rescue ZeroDivisionError
+    100
+  end
+end
diff --git a/app/services/milestones/group_service.rb b/app/services/milestones/group_service.rb
index 74bf126652e2f11d178abbf3f4d99f0d094752c3..3a7e092a77aabca9bdb92a6e122a72e098d84926 100644
--- a/app/services/milestones/group_service.rb
+++ b/app/services/milestones/group_service.rb
@@ -1,72 +1,11 @@
 module Milestones
   class GroupService < Milestones::BaseService
-    def initialize(group, user, project_milestones)
-      @group = group
-      @user = user
+    def initialize(project_milestones)
       @project_milestones = project_milestones.group_by(&:title)
     end
 
-    def titles
-      @project_milestones.map{ |title, milestone| title }
-    end
-
-    def project_names
-      names = {}
-      @project_milestones.map do |title, milestone|
-        projects = milestone.map{|m| m.project.name }
-        names.store(title, projects)
-      end
-      names
-    end
-
-    def issue_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.count }.sum }
-    end
-
-    def mr_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.count }.sum }
-    end
-
-    def open_issues_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.opened.count }.sum }
-    end
-
-    def closed_issues_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.closed.count }.sum }
-    end
-
-    def open_mr_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.opened.count }.sum }
-    end
-
-    def close_mr_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.closed.count }.sum }
-    end
-
-    def open_items_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.open_items_count }.sum }
-    end
-
-    def closed_items_count
-      @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.closed_items_count }.sum }
-    end
-
-    def total_items_count
-      issue_count.merge(mr_count){ |title,issue,mr| issue + mr }
-    end
-
-    def percent_complete
-      percentage_per_milestone = {}
-      closed_items_count.map do |title, closed_items|
-        total_items = total_items_count[title]
-        percentage = begin
-                       ((closed_items * 100) / total_items).abs
-                     rescue  ZeroDivisionError
-                       100
-                     end
-        percentage_per_milestone.store(title, percentage)
-      end
-      percentage_per_milestone
+    def execute
+      @project_milestones.map{ |title, milestone| GroupMilestone.new(title, milestone) }
     end
 
   end
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index 2e51d74ca88c5aeb756d05400a74c8f368d2dc03..97cc88db522983463e732077dd1b83e66f81c05b 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -1,6 +1,6 @@
 %h3.page-title
   Milestones
-  %span.pull-right #{@group_milestones.titles.count} milestones
+  %span.pull-right #{@group_milestones.count} milestones
 
 %p.light
   Only milestones from
@@ -21,31 +21,28 @@
           %li
             .nothing-here-block No milestones to show
         - else
-          - @group_milestones.titles.each do |title|
+          - @group_milestones.each do |milestone|
             %li{class: "milestone milestone-open", id: 1 }
               .pull-right
-                = link_to root_path, class: "btn btn-small edit-milestone-link btn-grouped" do
-                  %i.icon-edit
-                  Edit
                 = link_to 'Close Milestone', root_path, method: :put, remote: true, class: "btn btn-small btn-remove"
               %h4
-                = link_to_gfm truncate(title, length: 100), root_path
+                = link_to_gfm truncate(milestone.title, length: 100), root_path
               - if false
                 %span.muted Empty
               - else
                 %div
                   %div
                     = link_to root_path do
-                      = pluralize @group_milestones.issue_count[title], 'Issue'
+                      = pluralize milestone.issue_count, 'Issue'
                     &nbsp;
                     = link_to root_path do
-                      = pluralize @group_milestones.mr_count[title], 'Merge Request'
+                      = pluralize milestone.merge_requests_count, 'Merge Request'
                     &nbsp;
-                    %span.light #{@group_milestones.percent_complete[title]}% complete
+                    %span.light #{milestone.percent_complete}% complete
                   .progress.progress-info
-                  .progress-bar{style: "width: #{@group_milestones.percent_complete[title]}%;"}
+                    .progress-bar{style: "width: #{milestone.percent_complete}%;"}
                   %div
                     %br
-                    - @group_milestones.project_names[title].each do |name|
+                    - milestone.project_names.each do |name|
                       %span.label.label-default
                         = name