   _onceEnabled: () ->
     @_registerHelpers globals.project_translations_domain
 
+  _abortPreviousSetLang: null
   setLanguage: (lang_tag) ->
     self = @
 
+    @_abortPreviousSetLang?()
+
+    isAborted = false
+    @_abortPreviousSetLang = -> isAborted = true
+    
     @_loadLanguage(lang_tag).then =>
-      TAPi18next.setLng(lang_tag)
+      if not isAborted
+        TAPi18next.setLng(lang_tag)
 
-      @_language_changed_tracker.changed()
-      Session.set @_loaded_lang_session_key, lang_tag
+        @_language_changed_tracker.changed()
+        Session.set @_loaded_lang_session_key, lang_tag
 
   getLanguage: ->
     if not @._enabled()

        # Remove options.lng so we won't pass it to the regular TAPi18next
        # before the language specific translator is ready to keep behavior
        # consistent.
        # 
        # If lang is actually ready before the language specifc translator is
        # ready, TAPi18next will translate to lang_tag if we won't remove
        # options.lng.

          return @_languageSpecificTranslators[lang_tag] "#{TAPi18n._getPackageDomain(package_name)}:#{key}", options
        else
          return TAPi18next.t "#{TAPi18n._getPackageDomain(package_name)}:#{key}", options

      # If inside a reactive computation, we want to invalidate the computation if the client lang changes
      @_language_changed_tracker.depend()

