diff --git a/search_api.theme.inc b/search_api.theme.inc
index 080aa02..f0bed7a 100644
--- a/search_api.theme.inc
+++ b/search_api.theme.inc
@@ -296,7 +296,7 @@ function theme_search_api_index($variables) {
       // directly to the server.
       // @todo Add a cleaner way for doing this (i.e., skipping preprocessing).
       $query = $index->query();
-      $query->fields(array())->range(0, 0);
+      $query->setFulltextFields(array())->range(0, 0);
       $response = $server->search($query);
 
       // Build the server index status translation variables.
diff --git a/search_api_db/src/Tests/BackendTest.php b/search_api_db/src/Tests/BackendTest.php
index 4fd386f..85d691c 100644
--- a/search_api_db/src/Tests/BackendTest.php
+++ b/search_api_db/src/Tests/BackendTest.php
@@ -211,7 +211,7 @@ class BackendTest extends EntityUnitTestBase {
     if ($keys) {
       $query->keys($keys);
       if ($fields) {
-        $query->fields($fields);
+        $query->setFulltextFields($fields);
       }
     }
     foreach ($filters as $filter) {
diff --git a/src/Plugin/views/argument/SearchApiFulltext.php b/src/Plugin/views/argument/SearchApiFulltext.php
index 443ed0f..e98b292 100644
--- a/src/Plugin/views/argument/SearchApiFulltext.php
+++ b/src/Plugin/views/argument/SearchApiFulltext.php
@@ -74,7 +74,7 @@ class SearchApiFulltext extends SearchApiArgument {
    */
   public function query($group_by = FALSE) {
     if ($this->options['fields']) {
-      $this->query->fields($this->options['fields']);
+      $this->query->setFulltextFields($this->options['fields']);
     }
     if ($this->options['conjunction'] != 'AND') {
       $this->query->setOption('conjunction', $this->options['conjunction']);
diff --git a/src/Plugin/views/filter/SearchApiFulltext.php b/src/Plugin/views/filter/SearchApiFulltext.php
index 57bda37..7f40f0b 100644
--- a/src/Plugin/views/filter/SearchApiFulltext.php
+++ b/src/Plugin/views/filter/SearchApiFulltext.php
@@ -183,7 +183,7 @@ class SearchApiFulltext extends SearchApiFilterText {
       $this->query->setOption('conjunction', 'OR');
     }
 
-    $this->query->fields($fields);
+    $this->query->setFulltextFields($fields);
     $old = $this->query->getKeys();
     $old_original = $this->query->getOriginalKeys();
     $this->query->keys($this->value);
diff --git a/src/Plugin/views/query/SearchApiQuery.php b/src/Plugin/views/query/SearchApiQuery.php
index afbdde4..e324390 100644
--- a/src/Plugin/views/query/SearchApiQuery.php
+++ b/src/Plugin/views/query/SearchApiQuery.php
@@ -566,12 +566,11 @@ class SearchApiQuery extends QueryPluginBase {
    * @throws \Drupal\search_api\SearchApiException
    *   Thrown if one of the fields isn't of type "text".
    *
-   * @see \Drupal\search_api\Query\QueryInterface::fields()
+   * @see \Drupal\search_api\Query\QueryInterface::setFulltextFields()
    */
-  // @todo Allow calling with NULL, and maybe rename to setFulltextFields().
-  public function fields(array $fields) {
+  public function setFulltextFields($fields = NULL) {
     if (!$this->shouldAbort()) {
-      $this->query->fields($fields);
+      $this->query->setFulltextFields($fields);
     }
     return $this;
   }
diff --git a/src/Query/Query.php b/src/Query/Query.php
index 265e130..649c95f 100644
--- a/src/Query/Query.php
+++ b/src/Query/Query.php
@@ -239,7 +239,7 @@ class Query implements QueryInterface {
   /**
    * {@inheritdoc}
    */
-  public function fields(array $fields) {
+  public function setFulltextFields(array $fields = NULL) {
     $fulltext_fields = $this->index->getFulltextFields();
     foreach (array_diff($fields, $fulltext_fields) as $field_id) {
       throw new SearchApiException(SafeMarkup::format('Trying to search on field @field which is no indexed fulltext field.', array('@field' => $field_id)));
diff --git a/src/Query/QueryInterface.php b/src/Query/QueryInterface.php
index 1446945..9ea49ae 100644
--- a/src/Query/QueryInterface.php
+++ b/src/Query/QueryInterface.php
@@ -85,8 +85,7 @@ interface QueryInterface {
    * @throws \Drupal\search_api\SearchApiException
    *   Thrown if one of the fields isn't a fulltext field.
    */
-  // @todo Allow calling with NULL, and maybe rename to setFulltextFields().
-  public function fields(array $fields);
+  public function setFulltextFields(array $fields = NULL);
 
   /**
    * Adds a subfilter to this query's filter.
@@ -231,9 +230,9 @@ interface QueryInterface {
   /**
    * Retrieves the fulltext fields that will be searched for the search keys.
    *
-   * @return string[]
+   * @return string[]|null
    *   An array containing the fields that should be searched for the search
-   *   keys.
+   *   keys or NULL if the method is called before QueryInterface::preExecute().
    *
    * @see fields()
    */
