diff --git a/app/models/project.rb b/app/models/project.rb
index 137fa42a9b99674633416b318fefb98abc73f128..3235a1cee5051c7055a7b7f7b3661232a2487484 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -86,14 +86,6 @@ class Project < ActiveRecord::Base
     end
   end
 
-  # checks if the language main language of the project changed
-  before_save :check_main_language
-  def check_main_language
-    if commit_count_changed?
-      main_language = repository.main_language
-    end
-  end
-
   ActsAsTaggableOn.strict_case_match = true
   acts_as_taggable_on :tags
 
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 9ba200f7bde394d4d6bc8c779b9966af0a8b4be2..ab883b6ef2c9f8754f85125a30a7acc0ba8ee0e5 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -14,6 +14,7 @@ class GitPushService < BaseService
   #  3. Recognizes cross-references from commit messages
   #  4. Executes the project's web hooks
   #  5. Executes the project's services
+  #  6. Checks if the project's main language has changed
   #
   def execute
     @project.repository.after_push_commit(branch_name)
@@ -42,6 +43,9 @@ class GitPushService < BaseService
       @push_commits = @project.repository.commits_between(params[:oldrev], params[:newrev])
       process_commit_messages
     end
+    # Checks if the main language has changed in the project and if so
+    # it updates it accordingly
+    update_main_language
     # Update merge requests that may be affected by this push. A new branch
     # could cause the last commit of a merge request to change.
     update_merge_requests
@@ -49,6 +53,14 @@ class GitPushService < BaseService
 
   protected
 
+  def update_main_language
+    current_language = @project.repository.main_language
+
+    unless current_language == @project.main_language
+      @project.update_attributes(main_language: current_language)
+    end
+  end
+
   def update_merge_requests
     @project.update_merge_requests(params[:oldrev], params[:newrev], params[:ref], current_user)