diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index 6dfbb15..0f13071 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -285,3 +285,21 @@ function field_test_query_efq_table_prefixing_test_alter(&$query) {
   // exception if the EFQ does not properly prefix the base table.
   $query->join('test_entity','te2','%alias.ftid = test_entity.ftid');
 }
+
+/**
+ * Callback function for test the options_list_callback's setting
+ * in the taxonomy_term_reference type field.
+ *
+ * This function return an arbitrary data just for test the callback.
+ *
+ * @param $field
+ *   The field definition
+ *
+ * @return array
+ *
+ */
+function taxonomy_test_set_options_list($field) {
+  return array(
+    'option_1' => t('Option 1')
+  );
+}
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
index 34065e1..b794a2e 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
@@ -167,4 +167,20 @@ class TermFieldTest extends TaxonomyTestBase {
     $this->assertEqual($allowed_values[1]['vocabulary'], $new_name, 'Index 1: Machine name was updated correctly.');
     $this->assertEqual($allowed_values[2]['vocabulary'], 'foo', 'Index 2: Machine name was left untouched.');
   }
+
+  /**
+   * Tests options_list_callback
+   */
+  function testTaxonomyHookOptionsList() {
+    // Check the default behaviour
+    $term = $this->createTerm($this->vocabulary);
+    $this->drupalGet('test-entity/add/test_bundle');
+    $this->assertFieldByXPath('//select/option', $term->tid, 'Correct value before to add the options_list_callback');
+
+    // Check using a custom callback
+    $this->field['settings']['options_list_callback'] = 'taxonomy_test_set_options_list';
+    field_update_field($this->field);
+    $this->drupalGet('test-entity/add/test_bundle');
+    $this->assertFieldByXPath('//select/option', 'option_1', 'The options_list_callback was executed correctly');
+  }
 }
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 0f8b6b5..0c3b8e1 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -1206,8 +1206,12 @@ function taxonomy_field_widget_info_alter(&$info) {
  * Implements hook_options_list().
  */
 function taxonomy_options_list($field, $instance, $entity_type, $entity) {
-  $function = !empty($field['settings']['options_list_callback']) ? $field['settings']['options_list_callback'] : 'taxonomy_allowed_values';
-  return $function($field, $instance, $entity_type, $entity);
+  if (!empty($field['settings']['options_list_callback'])) {
+    return call_user_func($field['settings']['options_list_callback'], $field);
+  }
+  else {
+    return taxonomy_allowed_values($field, $instance, $entity_type, $entity);
+  }
 }
 
 /**
