diff --git a/app/controllers/blame_controller.rb b/app/controllers/blame_controller.rb
index 76caa4a69c4dea822b80b238a39879892c4d8914..310b567cfe6481df4e9c35715f12444729a6b6b1 100644
--- a/app/controllers/blame_controller.rb
+++ b/app/controllers/blame_controller.rb
@@ -8,7 +8,6 @@ class BlameController < ProjectResourceController
   before_filter :require_non_empty_project
 
   def show
-    @repo = @project.repo
-    @blame = Grit::Blob.blame(@repo, @commit.id, @path)
+    @blame = Gitlab::Git::Blame.new(project.repository, @commit.id, @path)
   end
 end
diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb
index b72da783d088b9632be99c7ae9a55a7ef7a0fdc0..750e9c2380ef821c6835547c51d80f3d2fd8887d 100644
--- a/app/controllers/compare_controller.rb
+++ b/app/controllers/compare_controller.rb
@@ -8,12 +8,12 @@ class CompareController < ProjectResourceController
   end
 
   def show
-    result = Commit.compare(project, params[:from], params[:to])
+    compare = Gitlab::Git::Compare.new(project.repository, params[:from], params[:to])
 
-    @commits       = result[:commits]
-    @commit        = result[:commit]
-    @diffs         = result[:diffs]
-    @refs_are_same = result[:same]
+    @commits       = compare.commits
+    @commit        = compare.commit
+    @diffs         = compare.diffs
+    @refs_are_same = compare.same
     @line_notes    = []
   end
 
diff --git a/app/models/commit.rb b/app/models/commit.rb
index 96c8577f90e56b189c5c6b97dc1097ac3ada816b..e3363350997ebc5ee1520e06d6a236e3f19e6b28 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -8,6 +8,10 @@ class Commit
   #
   DIFF_SAFE_SIZE = 100
 
+  def self.decorate(commits)
+    commits.map { |c| self.new(c) }
+  end
+
   attr_accessor :raw
 
   def initialize(raw_commit)
diff --git a/app/models/gollum_wiki.rb b/app/models/gollum_wiki.rb
index cdfcd567a434d531a9463615dc67f846d0ad33e6..647058e8ec9744dd52e76ac460c7ab96c43185fe 100644
--- a/app/models/gollum_wiki.rb
+++ b/app/models/gollum_wiki.rb
@@ -114,5 +114,4 @@ class GollumWiki
   def path_to_repo
     @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git")
   end
-
 end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index be6502ebf5cadda56bfe88c2bf9e6b61978a117b..0a4431f14c12559c2663ab40b1af7bf25d798dde 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -13,13 +13,13 @@ class Repository
 
   def commits(ref, path = nil, limit = nil, offset = nil)
     commits = raw_repository.commits(ref, path, limit, offset)
-    commits = decorate_commits(commits) if commits.present?
+    commits = Commit.decorate(commits) if commits.present?
     commits
   end
 
   def commits_between(target, source)
     commits = raw_repository.commits_between(target, source)
-    commits = decorate_commits(commits) if commits.present?
+    commits = Commit.decorate(commits) if commits.present?
     commits
   end
 
@@ -32,10 +32,4 @@ class Repository
 
     super
   end
-
-  protected
-
-  def decorate_commits(commits)
-    commits.map { |c| Commit.new(c) }
-  end
 end
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index adc77b22231eb49b316f91022bae362d2c21f230..497d69e8e90bab7b1b3a2721454144541ff026f6 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -79,14 +79,14 @@ class WikiPage
   def version
     return nil unless persisted?
 
-    @version ||= Commit.new(@page.version)
+    @version ||= Commit.new(Gitlab::Git::Commit.new(@page.version))
   end
 
   # Returns an array of Gitlab Commit instances.
   def versions
     return [] unless persisted?
 
-    @page.versions.map { |v| Commit.new(v) }
+    @page.versions.map { |v| Commit.new(Gitlab::Git::Commit.new(v)) }
   end
 
   # Returns the Date that this latest version was
diff --git a/app/views/blame/show.html.haml b/app/views/blame/show.html.haml
index b07a514fdf7f00aa52ad52b27683162ecf83f483..96d153e627f778789042855f89fe86dc7fa591f6 100644
--- a/app/views/blame/show.html.haml
+++ b/app/views/blame/show.html.haml
@@ -6,7 +6,7 @@
       %i.icon-angle-right
       = link_to project_tree_path(@project, @ref) do
         = @project.name
-    - @tree.breadcrumbs(6) do |link|
+    - tree_breadcrumbs(@tree, 6) do |link|
       \/
       %li= link
   .clear
diff --git a/app/views/compare/show.html.haml b/app/views/compare/show.html.haml
index 476be2550af36754eedf66be4cfe6bc845f3193b..56c4a113ea0d0d3cf9d48569d9bae496e451c9f9 100644
--- a/app/views/compare/show.html.haml
+++ b/app/views/compare/show.html.haml
@@ -16,7 +16,7 @@
   %div.ui-box
     %h5.title
       Commits (#{@commits.count})
-    %ul.well-list= render @commits
+    %ul.well-list= render Commit.decorate(@commits)
 
   - unless @diffs.empty?
     %h4 Diff
diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml
index 4102182e9231ed15ad74a67ab4f72f6889bcec00..b237bc524ed722c66e964a7e9a3ddf68f9bf137a 100644
--- a/app/views/wikis/show.html.haml
+++ b/app/views/wikis/show.html.haml
@@ -13,5 +13,4 @@
     = preserve do
       = render_wiki_content(@wiki)
 
-- commit = Commit.new(@wiki.version)
-%p.time Last edited by #{commit_author_link(commit, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago
+%p.time Last edited by #{commit_author_link(@wiki.version, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago
diff --git a/lib/gitlab/git/commit.rb b/lib/gitlab/git/commit.rb
index 023672f986b37975f3acc2eea02b7eb7db9a72e1..d7e1a5ca770779d4b8981c0a978eab60c14a7c4e 100644
--- a/lib/gitlab/git/commit.rb
+++ b/lib/gitlab/git/commit.rb
@@ -1,9 +1,9 @@
-# Gitlab::Git::Gitlab::Git::Commit is a wrapper around native Grit::Commit object
+# Gitlab::Git::Commit is a wrapper around native Grit::Commit object
 # We dont want to use grit objects inside app/
 # It helps us easily migrate to rugged in future
 module Gitlab
   module Git
-    class Gitlab::Git::Commit
+    class Commit
       attr_accessor :raw_commit, :head, :refs
 
       delegate  :message, :authored_date, :committed_date, :parents, :sha,
@@ -18,12 +18,12 @@ module Gitlab
                      repo.commits(root_ref).first
                    end
 
-          Gitlab::Git::Commit.new(commit) if commit
+          Commit.new(commit) if commit
         end
 
         def fresh_commits(repo, n = 10)
           commits = repo.heads.map do |h|
-            repo.commits(h.name, n).map { |c| Gitlab::Git::Commit.new(c, h) }
+            repo.commits(h.name, n).map { |c| Commit.new(c, h) }
           end.flatten.uniq { |c| c.id }
 
           commits.sort! do |x, y|
@@ -34,7 +34,7 @@ module Gitlab
         end
 
         def commits_with_refs(repo, n = 20)
-          commits = repo.branches.map { |ref| Gitlab::Git::Commit.new(ref.commit, ref) }
+          commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) }
 
           commits.sort! do |x, y|
             y.committed_date <=> x.committed_date
@@ -45,7 +45,7 @@ module Gitlab
 
         def commits_since(repo, date)
           commits = repo.heads.map do |h|
-            repo.log(h.name, nil, since: date).each { |c| Gitlab::Git::Commit.new(c, h) }
+            repo.log(h.name, nil, since: date).each { |c| Commit.new(c, h) }
           end.flatten.uniq { |c| c.id }
 
           commits.sort! do |x, y|
@@ -62,41 +62,11 @@ module Gitlab
             repo.commits(ref, limit, offset)
           else
             repo.commits(ref)
-          end.map{ |c| Gitlab::Git::Commit.new(c) }
+          end.map{ |c| Commit.new(c) }
         end
 
         def commits_between(repo, from, to)
-          repo.commits_between(from, to).map { |c| Gitlab::Git::Commit.new(c) }
-        end
-
-        def compare(project, from, to)
-          result = {
-            commits: [],
-            diffs: [],
-            commit: nil,
-            same: false
-          }
-
-          return result unless from && to
-
-          first = project.repository.commit(to.try(:strip))
-          last = project.repository.commit(from.try(:strip))
-
-          if first && last
-            result[:same] = (first.id == last.id)
-            result[:commits] = project.repo.commits_between(last.id, first.id).map {|c| Gitlab::Git::Commit.new(c)}
-
-            # Dont load diff for 100+ commits
-            result[:diffs] = if result[:commits].size > 100
-                               []
-                             else
-                               project.repo.diff(last.id, first.id) rescue []
-                             end
-
-            result[:commit] = Gitlab::Git::Commit.new(first)
-          end
-
-          result
+          repo.commits_between(from, to).map { |c| Commit.new(c) }
         end
       end
 
@@ -142,7 +112,7 @@ module Gitlab
 
       def prev_commit
         @prev_commit ||= if parents.present?
-                           Gitlab::Git::Commit.new(parents.first)
+                           Commit.new(parents.first)
                          else
                            nil
                          end
@@ -156,7 +126,7 @@ module Gitlab
       #
       # Cuts out the header and stats from #to_patch and returns only the diff.
       def to_diff
-        # see Grit::Gitlab::Git::Commit#show
+        # see Grit::Commit#show
         patch = to_patch
 
         # discard lines before the diff
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index 769405b6ffb6169112627b44edbbfddd1b34aaf2..0f81347dd6b965fbac46977df8069a64c910e2f1 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -17,15 +17,18 @@ module TestEnv
     repos_path = Rails.root.join('tmp', 'test-git-base-path')
     Gitlab.config.gitlab_shell.stub(repos_path: repos_path)
 
+    Gitlab::Shell.any_instance.stub(:add_repository) do |path|
+      create_temp_repo(File.join(repos_path, "#{path}.git"))
+    end
+
     Gitlab::Shell.any_instance.stub(
-      add_repository: ->(path) { create_temp_repo(File.join(repos_path, "#{path}.git")) },
       mv_repository: true,
       remove_repository: true,
       add_key: true,
       remove_key: true
     )
 
-    fake_satellite = double(
+    fake_satellite = stub(
       exists?: true,
       destroy: true,
       create: true