diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
index e979a5c..0d489d6 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentLanguageTest.php
@@ -66,6 +66,7 @@ function setUp() {
       'language_interface[enabled][language-user]' => TRUE,
       'language_content[enabled][language-url]' => TRUE,
       'language_content[enabled][language-interface]' => FALSE,
+      'customized_language_negotiation[language_content]' => TRUE,
     );
     $this->drupalPost('admin/config/regional/language/detection', $edit, t('Save settings'));
 
diff --git a/core/modules/language/config/language.negotiation.yml b/core/modules/language/config/language.negotiation.yml
index 8ebea15..73ba546 100644
--- a/core/modules/language/config/language.negotiation.yml
+++ b/core/modules/language/config/language.negotiation.yml
@@ -6,3 +6,5 @@ url:
       en: ''
     domains:
       en: ''
+customized_language_negotiation:
+    language_interface: language_interface
diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index b078d23..6df69fe 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -376,7 +376,19 @@ function language_negotiation_configure_form() {
 
   foreach ($form['#language_types'] as $type) {
     language_negotiation_configure_form_table($form, $type);
+    $options[$type] = t('@name language', array('@name' => $form['#language_types_info'][$type]['name']));
   }
+  $form['customized_language_negotiation'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Customized language types'),
+    '#description' => t('Select the languages you want to customize the detection settings.'),
+    '#options' => $options,
+    '#default_value' => config('language.negotiation')->get('customized_language_negotiation'),
+    '#attached' => array(
+      'js' => array(drupal_get_path('module', 'language') . '/language.admin.js' => array('type' => 'file')),
+    ),
+    '#description' => t('Unchecked language types will get the same settings than %default_type.', array('%default_type' => $form['#language_types_info'][LANGUAGE_TYPE_INTERFACE]['name'])),
+  );
 
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
@@ -488,7 +500,7 @@ function language_negotiation_configure_form_table(&$form, $type) {
  */
 function theme_language_negotiation_configure_form($variables) {
   $form = $variables['form'];
-  $output = '';
+  $output = drupal_render($form['customized_language_negotiation']);
 
   foreach ($form['#language_types'] as $type) {
     $rows = array();
@@ -536,7 +548,7 @@ function theme_language_negotiation_configure_form($variables) {
 
     drupal_add_tabledrag("language-negotiation-methods-$type", 'order', 'sibling', "language-method-weight-$type");
 
-    $output .= '<div class="form-item">' . $title . $description . $table . '</div>';
+    $output .= '<div class="form-item table-' . $type . '-wrapper">' . $title . $description . $table . '</div>';
   }
 
   $output .= drupal_render_children($form);
@@ -549,6 +561,14 @@ function theme_language_negotiation_configure_form($variables) {
 function language_negotiation_configure_form_submit($form, &$form_state) {
   $configurable_types = $form['#language_types'];
 
+  // Always set the default language type LANGUAGE_TYPE_INTERFACE
+  $customized_language_negotiation = $form_state['values']['customized_language_negotiation'];
+  $customized_language_negotiation[LANGUAGE_TYPE_INTERFACE] = LANGUAGE_TYPE_INTERFACE;
+  config('language.negotiation')
+    ->set('customized_language_negotiation', $customized_language_negotiation)
+    ->save();
+
+  $method_weights_default = array();
   foreach ($configurable_types as $type) {
     $method_weights = array();
     $enabled_methods = $form_state['values'][$type]['enabled'];
@@ -561,8 +581,17 @@ function language_negotiation_configure_form_submit($form, &$form_state) {
       }
     }
 
-    language_negotiation_set($type, $method_weights);
-    variable_set("language_negotiation_methods_weight_$type", $method_weights_input);
+    if ($type == LANGUAGE_TYPE_INTERFACE) {
+      $method_weights_default = $method_weights;
+    }
+    if ($customized_language_negotiation[$type]) {
+      language_negotiation_set($type, $method_weights);
+      variable_set("language_negotiation_methods_weight_$type", $method_weights_input);
+    }
+    else {
+      language_negotiation_set($type, $method_weights_default);
+      variable_set("language_negotiation_methods_weight_$type", $form_state['values'][LANGUAGE_TYPE_INTERFACE]['weight']);
+    }
   }
 
   // Update non-configurable language types and the related language negotiation
diff --git a/core/modules/language/language.admin.js b/core/modules/language/language.admin.js
new file mode 100644
index 0000000..acb7d36
--- /dev/null
+++ b/core/modules/language/language.admin.js
@@ -0,0 +1,31 @@
+(function ($) {
+
+"use strict";
+
+/**
+ * Makes language negotiation inherit user interface negotiation.
+ */
+Drupal.behaviors.negotiationLanguage = {
+  attach: function (context) {
+    var $context = $(context);
+    $('#edit-customized-language-negotiation-language-interface').attr('disabled', 'disabled');
+    var toggleTable = function ($checkbox) {
+      var langtype = $checkbox.attr('name').replace('customized_language_negotiation[', '').replace(']', '');
+      var $table = $('.table-' + langtype + '-wrapper');
+      if ($checkbox.is(':checked')) {
+        $table.show();
+      }
+      else {
+        $table.hide();
+      }
+    };
+    $('body').once('negotiation-language-admin-bind').on('click', '#edit-customized-language-negotiation :input', function (e) {
+      toggleTable($(e.target));
+    });
+    $('#edit-customized-language-negotiation :input').each(function (index, element) {
+      toggleTable($(element));
+    });
+  }
+};
+
+})(jQuery);
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
index 8aea763..b0ade60 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
@@ -68,6 +68,8 @@ function testInfoAlterations() {
       $form_field => TRUE,
       $type . '[enabled][' . $test_method_id . ']' => TRUE,
       $test_type . '[enabled][' . $test_method_id . ']' => TRUE,
+      'customized_language_negotiation[' . $type . ']' => TRUE,
+      'customized_language_negotiation[' . $test_type . ']' => TRUE,
     );
     $this->drupalPost('admin/config/regional/language/detection', $edit, t('Save settings'));
 
