diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js
deleted file mode 100644
index 6bbfbacc38234f8e3489016c97fca15db52bfa99..0000000000000000000000000000000000000000
--- a/app/assets/javascripts/projects.js
+++ /dev/null
@@ -1,25 +0,0 @@
-function Projects() { 
-  $("#project_name").live("change", function(){
-    var slug = slugify($(this).val());
-    $("#project_code").val(slug);
-    $("#project_path").val(slug);
-  });
-
-  $('.new_project, .edit_project').live('ajax:before', function() {
-    $('.project_new_holder, .project_edit_holder').hide();
-    $('.save-project-loader').show();
-  });
-
-  $('form #project_default_branch').chosen();
-
-  disableButtonIfEmtpyField("#project_name", ".project-submit")
-}
-
-function initGitCloneSwitcher() {
-  var link_sel = ".project_clone_holder button";
-  $(link_sel).bind("click", function(e) {
-    $(link_sel).removeClass("active");
-    $(this).addClass("active");
-    $("#project_clone").val($(this).attr("data-clone"));
-  })
-}
diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..ca8f13f674474736ad0ef49e235d01b5f2726264
--- /dev/null
+++ b/app/assets/javascripts/projects.js.coffee
@@ -0,0 +1,21 @@
+window.Projects = ->
+  $("#project_name").live "change", ->
+    slug = slugify($(this).val())
+    $("#project_code").val(slug)
+    $("#project_path").val(slug)
+
+  $(".new_project, .edit_project").live "ajax:before", ->
+    $(".project_new_holder, .project_edit_holder").hide()
+    $(".save-project-loader").show()
+
+  $("form #project_default_branch").chosen()
+  disableButtonIfEmtpyField "#project_name", ".project-submit"
+
+# Git clone panel switcher
+$ ->
+  scope = $('.project_clone_holder')
+  if scope.length > 0
+    $('a, button', scope).click ->
+      $('a, button', scope).removeClass('active')
+      $(this).addClass('active')
+      $('#project_clone', scope).val($(this).data('clone'))
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9aab250dbd480b19e357e2fc5e3871c36203643c..d53b23bb246a21062a8ba529b29f1c4410a8022a 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -135,7 +135,7 @@ class ApplicationController < ActionController::Base
   end
 
   def require_non_empty_project
-    redirect_to @project unless @project.repo_exists? && @project.has_commits?
+    redirect_to @project if @project.empty_repo?
   end
 
   def no_cache_headers
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index bd7f811e59f0f257f73d8a817bd61f78b9be0eb8..170b889293633155d914d3bd3c77f6b5b165f274 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -50,7 +50,7 @@ class ProjectsController < ApplicationController
 
     respond_to do |format|
       format.html do
-         if @project.repo_exists? && @project.has_commits?
+         unless @project.empty_repo?
            @last_push = current_user.recent_push(@project.id)
            render :show
          else
diff --git a/app/roles/repository.rb b/app/roles/repository.rb
index 5fa950db6d6fcb2e29142ed8ffb5a9c660895796..5f6c35414e1a5ecc0bc5c790edb0f59fd7509665 100644
--- a/app/roles/repository.rb
+++ b/app/roles/repository.rb
@@ -8,6 +8,10 @@ module Repository
     false
   end
 
+  def empty_repo?
+    !repo_exists? || !has_commits?
+  end
+
   def commit(commit_id = nil)
     Commit.find_or_first(repo, commit_id, root_ref)
   end
@@ -38,7 +42,7 @@ module Repository
 
   def has_post_receive_file?
     hook_file = File.join(path_to_repo, 'hooks', 'post-receive')
-    File.exists?(hook_file) 
+    File.exists?(hook_file)
   end
 
   def tags
@@ -67,7 +71,7 @@ module Repository
 
   def repo_exists?
     @repo_exists ||= (repo && !repo.branches.empty?)
-  rescue 
+  rescue
     @repo_exists = false
   end
 
@@ -94,7 +98,7 @@ module Repository
     !!commit
   end
 
-  def root_ref 
+  def root_ref
     default_branch || "master"
   end
 
@@ -104,7 +108,7 @@ module Repository
 
   # Archive Project to .tar.gz
   #
-  # Already packed repo archives stored at 
+  # Already packed repo archives stored at
   # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz
   #
   def archive_repo ref
diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml
index 76059f32237e028fd1e5862599ac5c1aa5fc00df..20891610ace12d7da89d355eb3bdb40e760eb6bd 100644
--- a/app/views/projects/_clone_panel.html.haml
+++ b/app/views/projects/_clone_panel.html.haml
@@ -8,14 +8,14 @@
           = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
     .span4.right
       .right
-        - if can? current_user, :download_code, @project
-          = link_to archive_project_repository_path(@project), class: "btn small grouped" do
-            %i.icon-download-alt
-            Download
-        - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
-          = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
-            Merge Request
-        - if @project.issues_enabled && can?(current_user, :write_issue, @project)
-          = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
-            Issue
-
+        - unless @project.empty_repo?
+          - if can? current_user, :download_code, @project
+            = link_to archive_project_repository_path(@project), class: "btn small grouped" do
+              %i.icon-download-alt
+              Download
+          - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
+            = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
+              Merge Request
+          - if @project.issues_enabled && can?(current_user, :write_issue, @project)
+            = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
+              Issue
diff --git a/app/views/projects/_show.html.haml b/app/views/projects/_show.html.haml
deleted file mode 100644
index e8a5b00dd0e22cf1e60ecf49b4d7e5c06723722d..0000000000000000000000000000000000000000
--- a/app/views/projects/_show.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-%h5.title
-  = @project.name
-%br
-%div
-  %a.btn.info{href: tree_project_ref_path(@project, @project.root_ref)} Browse code
-  &nbsp;
-  %a.btn{href: project_commits_path(@project)} Commits
-  %strong.right
-    = link_to project_path(@project) do
-      Switch to project &rarr;
-%br
-.alert-message.block-message.warning
-  .input
-    .input-prepend
-      %span.add-on git clone
-      = text_field_tag :project_clone, @project.url_to_repo, class: "xlarge one_click_select git_clone_url"
-
-= simple_format @project.description
-- unless @events.blank?
-  %h4.middle_title Recent Activity
-  .content_list= render @events
-
-
diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml
index d408c0a64aec982209ff101375cf4dbf28a4b043..d9a151fc706e19eecc5275cb654280f89648f58b 100644
--- a/app/views/projects/empty.html.haml
+++ b/app/views/projects/empty.html.haml
@@ -1,12 +1,6 @@
 = render 'shared/no_ssh'
-.project_clone_panel
-  .row
-    .span7
-      .form-horizontal
-        .input-prepend.project_clone_holder
-          = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo
-          = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo
-          = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
+= render 'clone_panel'
+
 %div.git-empty
   %h4 Git global setup:
   %pre.dark
@@ -36,16 +30,3 @@
   - if can? current_user, :admin_project, @project
     .prepend-top-20
       = link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right"
-
-
-
-:javascript
-  $(function(){
-    var link_sel = ".project_clone_holder a";
-    $(link_sel).bind("click", function() {
-      $(link_sel).removeClass("active");
-      $(this).addClass("active");
-      $("#project_clone").val($(this).attr("data-clone"));
-    })
-  })
-
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index de3e9cefc0616056bc2c992417a3f133d3ef620c..21459da256f7b9398f7f2845c8ebb13fba84592e 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -2,8 +2,3 @@
 = render 'clone_panel'
 = render "events/event_last_push", event: @last_push
 .content_list= render @events
-
-:javascript
-  $(function(){
-    initGitCloneSwitcher();
-  })
diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml
index affd07cba38bb2644023437eedb246649ad8d861..d51602de9b7c892129367745912739ad5bd8cbeb 100644
--- a/app/views/refs/_head.html.haml
+++ b/app/views/refs/_head.html.haml
@@ -12,8 +12,3 @@
       %button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH
       %button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP
       = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
-
-:javascript
-  $(function(){
-    initGitCloneSwitcher();
-  })
diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..62aecc1341fcd413a5b74f0d465727c9da632ca1
--- /dev/null
+++ b/spec/roles/repository_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+describe Project, "Repository" do
+  let(:project) { build(:project) }
+
+  describe "#empty_repo?" do
+    it "should return true if the repo doesn't exist" do
+      project.stub(repo_exists?: false, has_commits?: true)
+      project.should be_empty_repo
+    end
+
+    it "should return true if the repo has commits" do
+      project.stub(repo_exists?: true, has_commits?: false)
+      project.should be_empty_repo
+    end
+
+    it "should return false if the repo exists and has commits" do
+      project.stub(repo_exists?: true, has_commits?: true)
+      project.should_not be_empty_repo
+    end
+  end
+end