diff --git a/src/Entity/SolrFieldType.php b/src/Entity/SolrFieldType.php
index a5cfdb1..d93e6af 100644
--- a/src/Entity/SolrFieldType.php
+++ b/src/Entity/SolrFieldType.php
@@ -199,7 +199,7 @@ class SolrFieldType extends ConfigEntityBase implements SolrFieldTypeInterface {
     $dynamic_fields = [];
     foreach (array('ts', 'tm') as $prefix) {
       $dynamic_fields[] = [
-        'name' => SearchApiSolrUtility::encodeSolrDynamicFieldName(
+        'name' => SearchApiSolrUtility::encodeSolrName(
             Utility::getLanguageSpecificSolrDynamicFieldPrefix($prefix, $this->langcode)
           ) . '*',
         'type' => $this->field_type['name'],
diff --git a/src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php b/src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php
index b1a6efb..22eb831 100644
--- a/src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php
+++ b/src/Plugin/search_api/backend/AbstractSearchApiSolrMultilingualBackend.php
@@ -82,8 +82,8 @@ abstract class AbstractSearchApiSolrMultilingualBackend extends SearchApiSolrBac
     );
     $form['multilingual']['sasm_language_unspecific_fallback_on_schema_issues'] = array(
       '#type' => 'checkbox',
-      '#title' => $this->t('Use language undefined fall back.'),
-      '#description' => $this->t('It might happen that you enable a language within Drupal without updating the Solr field definitions on the Solr server immediately. In this case Drupal will log errors when such a translation gets indexed or if the language is used during searches. If you enable this fall back switch, the language will be mapped to "undefined" until the missing language-specific filed become available on the Solr server.'),
+      '#title' => $this->t('Use language fallbacks.'),
+      '#description' => $this->t('This option is suitable for two use-cases. First, if you have languages like "de" and "de-at", both could be handled by a shared configuration for "de". Second, new languages will be handled by language-unspecific fallback configuration until the schema gets updated on your Solr server.'),
       '#default_value' => isset($this->configuration['sasm_language_unspecific_fallback_on_schema_issues']) ? $this->configuration['sasm_language_unspecific_fallback_on_schema_issues'] : TRUE,
     );
 
@@ -201,22 +201,8 @@ abstract class AbstractSearchApiSolrMultilingualBackend extends SearchApiSolrBac
 
         $language_specific_fields = [];
         foreach ($language_ids as $language_id) {
-          $language_specific_field = SearchApiSolrUtility::encodeSolrDynamicFieldName(Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName($field_name, $language_id));
-          if ($this->isPartOfSchema('dynamicFields', Utility::extractLanguageSpecificSolrDynamicFieldDefinition($language_specific_field))) {
-            $language_specific_fields[] = $language_specific_field . $boost;
-          }
-          else {
-            $vars = array(
-              '%field' => $language_specific_field,
-            );
-            if ($this->hasLanguageUndefinedFallback()) {
-              \Drupal::logger('search_api_solr_multilingual')->warning('Error while searching: language-specific dynamic field %field is not defined in the schema.xml, fallback to language-unspecific field is enabled.', $vars);
-              $language_specific_fields[] = $language_specific_field . $boost;
-            }
-            else {
-              \Drupal::logger('search_api_solr_multilingual')->error('Error while searching: language-specific dynamic field %field is not defined in the schema.xml, fallback to language-unspecific field is not enabled.', $vars);
-            }
-          }
+          $language_specific_field = SearchApiSolrUtility::encodeSolrName(Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName($field_name, $language_id));
+          $language_specific_fields[] = $language_specific_field . $boost;
         }
 
         $query_fields = str_replace(
@@ -281,7 +267,7 @@ abstract class AbstractSearchApiSolrMultilingualBackend extends SearchApiSolrBac
   protected function getLanguageSpecificSolrFieldNames($lancgcode, array $solr_fields, IndexInterface $index) {
     // @todo Caching.
     foreach ($index->getFulltextFields() as $fulltext_field) {
-      $solr_fields[$fulltext_field] = SearchApiSolrUtility::encodeSolrDynamicFieldName(Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName($solr_fields[$fulltext_field], $lancgcode));
+      $solr_fields[$fulltext_field] = SearchApiSolrUtility::encodeSolrName(Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName($solr_fields[$fulltext_field], $lancgcode));
     }
     return $solr_fields;
   }
@@ -387,52 +373,27 @@ abstract class AbstractSearchApiSolrMultilingualBackend extends SearchApiSolrBac
       foreach ($fields as $monolingual_solr_field_name => $field_value) {
         if (array_key_exists($monolingual_solr_field_name, $fulltext_field_names)) {
           $multilingual_solr_field_name = Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName($monolingual_solr_field_name, $language_id);
-          $field_name_map_per_language[$language_id][$monolingual_solr_field_name] = SearchApiSolrUtility::encodeSolrDynamicFieldName($multilingual_solr_field_name);
+          $field_name_map_per_language[$language_id][$monolingual_solr_field_name] = SearchApiSolrUtility::encodeSolrName($multilingual_solr_field_name);
         }
       }
     }
-
     foreach ($field_name_map_per_language as $language_id => $map) {
-      $solr_field_type_name = 'text' . '_' . $language_id;
+      $solr_field_type_name = SearchApiSolrUtility::encodeSolrName('text' . '_' . $language_id);
       if (!$this->isPartOfSchema('fieldTypes', $solr_field_type_name) &&
-        !$this->createSolrMultilingualFieldType($solr_field_type_name)
+        !$this->createSolrMultilingualFieldType($solr_field_type_name) &&
+        !$this->hasLanguageUndefinedFallback()
       ) {
-        if ($this->hasLanguageUndefinedFallback()) {
-          $vars = array(
-            '%field' => $solr_field_type_name,
-          );
-          \Drupal::logger('search_api_solr_multilingual')->warning('Error while indexing: language specific field type %field is not defined in the schema.xml, fallback to language unspecific field type is enabled.', $vars);
-          unset($field_name_map_per_language[$language_id]);
-        }
-        else {
-          // @todo Check if a non-language-spefific field type could be replaced
-          //   by a language-specific one that has been missing before or if a
-          //   concrete one has been assigned by the administrator, for example
-          //   field type text_de for language de-AT. If the field type is
-          //   exchanged, trigger a re-index process.
-
-          throw new SearchApiSolrMultilingualException('Missing field type ' . $solr_field_type_name . ' in schema.');
-        }
+        throw new SearchApiSolrMultilingualException('Missing field type ' . $solr_field_type_name . ' in schema.');
       }
 
-      foreach ($map as $monolingual_solr_field_name => $multilingual_solr_field_name) {
-        // Handle dynamic fields for multilingual tm and ts.
-        foreach (['ts', 'tm'] as $prefix) {
-          $multilingual_solr_field_name = SearchApiSolrUtility::encodeSolrDynamicFieldName(Utility::getLanguageSpecificSolrDynamicFieldPrefix($prefix, $language_id)) . '*';
-          if (!$this->isPartOfSchema('dynamicFields', $multilingual_solr_field_name) &&
-            !$this->createSolrDynamicField($multilingual_solr_field_name, $solr_field_type_name)
-          ) {
-            if ($this->hasLanguageUndefinedFallback()) {
-              $vars = array(
-                '%field' => $multilingual_solr_field_name,
-              );
-              \Drupal::logger('search_api_solr_multilingual')->warning('Error while indexing: language-specific dynamic field %field is not defined in the schema.xml, fallback to language-unspecific field is enabled.', $vars);
-              unset($field_name_map_per_language[$language_id][$monolingual_solr_field_name]);
-            }
-            else {
-              throw new SearchApiSolrMultilingualException('Missing dynamic field ' . $multilingual_solr_field_name . ' in schema.');
-            }
-          }
+      // Handle dynamic fields for multilingual tm and ts.
+      foreach (['ts', 'tm'] as $prefix) {
+        $multilingual_solr_field_name = SearchApiSolrUtility::encodeSolrName(Utility::getLanguageSpecificSolrDynamicFieldPrefix($prefix, $language_id)) . '*';
+        if (!$this->isPartOfSchema('dynamicFields', $multilingual_solr_field_name) &&
+          !$this->createSolrDynamicField($multilingual_solr_field_name, $solr_field_type_name) &&
+          !$this->hasLanguageUndefinedFallback()
+        ) {
+          throw new SearchApiSolrMultilingualException('Missing dynamic field ' . $multilingual_solr_field_name . ' in schema.');
         }
       }
     }
@@ -498,7 +459,7 @@ abstract class AbstractSearchApiSolrMultilingualBackend extends SearchApiSolrBac
     $available = $this->getSolrHelper()->pingCore();
     $stats = [];
     foreach (\Drupal::languageManager()->getLanguages() as $language) {
-      $solr_field_type_name = 'text' . '_' . $language->getId();
+      $solr_field_type_name = SearchApiSolrUtility::encodeSolrName('text' . '_' . $language->getId());
       $stats[$language->getId()] = $available ? $this->isPartOfSchema('fieldTypes', $solr_field_type_name) : FALSE;
     }
     return $stats;
diff --git a/src/Plugin/search_api/backend/SearchApiSolrMultilingualManagedSchemaBackend.php b/src/Plugin/search_api/backend/SearchApiSolrMultilingualManagedSchemaBackend.php
index a9dcff1..a2808e4 100644
--- a/src/Plugin/search_api/backend/SearchApiSolrMultilingualManagedSchemaBackend.php
+++ b/src/Plugin/search_api/backend/SearchApiSolrMultilingualManagedSchemaBackend.php
@@ -8,6 +8,7 @@
 namespace Drupal\search_api_solr_multilingual\Plugin\search_api\backend;
 
 use Drupal\Component\Serialization\Json;
+use Drupal\search_api_solr\Utility\Utility;
 use Drupal\search_api_solr_multilingual\Entity\SolrFieldType;
 use Drupal\search_api_solr_multilingual\SearchApiSolrMultilingualException;
 
@@ -55,7 +56,7 @@ class SearchApiSolrMultilingualManagedSchemaBackend extends AbstractSearchApiSol
    */
   protected function createSolrMultilingualFieldType($solr_field_type_name) {
     // @todo replace the hardcoded version extension.
-    $field_type_name = 'm_' . $solr_field_type_name . '_5_2_0';
+    $field_type_name = 'm_' . Utility::decodeSolrName($solr_field_type_name) . '_5_2_0';
 
     // Get the field type definition from Drupal.
     /** @var \Drupal\search_api_solr_multilingual\Entity\SolrFieldType $field_type_entity */
diff --git a/src/SolrMultilingualBackendInterface.php b/src/SolrMultilingualBackendInterface.php
index 9da3c3d..d9b72be 100644
--- a/src/SolrMultilingualBackendInterface.php
+++ b/src/SolrMultilingualBackendInterface.php
@@ -35,7 +35,7 @@ interface SolrMultilingualBackendInterface extends SolrBackendInterface {
   public function getSchemaLanguageStatistics();
 
   /**
-   * Indicates if the fallback for not supportes languages is active.
+   * Indicates if the fallback for not supported languages is active.
    *
    * @return boolean
    */
diff --git a/src/Utility/Utility.php b/src/Utility/Utility.php
index b76e6d7..e78737d 100644
--- a/src/Utility/Utility.php
+++ b/src/Utility/Utility.php
@@ -38,7 +38,7 @@ class Utility {
    * - tm_X3b_de_*
    * - tm_*
    *
-   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrDynamicFieldName().
+   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrName().
    * @see https://wiki.apache.org/solr/SchemaXml#Dynamic_fields
    *
    * @param string $field_name
@@ -59,7 +59,7 @@ class Utility {
    * For example the dynamic field tm;en_* for English will become tm_*.
    *
    * @see Drupal\search_api_solr_multilingual\Utility\Utility::getLanguageSpecificSolrDynamicFieldNameForSolrDynamicFieldName().
-   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrDynamicFieldName().
+   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrName().
    * @see https://wiki.apache.org/solr/SchemaXml#Dynamic_fields
    *
    * @param string $field_name
@@ -80,7 +80,7 @@ class Utility {
    * If the field name is encoded it will be decoded before the regular
    * expression runs and encoded again before the modified is returned.
    *
-   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrDynamicFieldName().
+   * @see Drupal\search_api_solr\Utility\Utility::encodeSolrName().
    *
    * @param string $field_name
    *   The dynamic Solr field name.
@@ -93,10 +93,10 @@ class Utility {
    *   The modified dynamic Solr field name.
    */
   protected static function modifySolrDynamicFieldName($field_name, $pattern, $replacement) {
-    $decoded_field_name = SearchApiSolrUtility::decodeSolrDynamicFieldName($field_name);
+    $decoded_field_name = SearchApiSolrUtility::decodeSolrName($field_name);
     $modified_field_name = preg_replace($pattern, $replacement, $decoded_field_name);
     if ($decoded_field_name != $field_name) {
-      $modified_field_name = SearchApiSolrUtility::encodeSolrDynamicFieldName($modified_field_name);
+      $modified_field_name = SearchApiSolrUtility::encodeSolrName($modified_field_name);
     }
     return $modified_field_name;
   }
@@ -127,7 +127,7 @@ class Utility {
    *   could be extracted.
    */
   public static function getLanguageIdFromLanguageSpecificSolrDynamicFieldName($field_name) {
-    $decoded_field_name = SearchApiSolrUtility::decodeSolrDynamicFieldName($field_name);
+    $decoded_field_name = SearchApiSolrUtility::decodeSolrName($field_name);
     if (preg_match('@^[a-z]+' . SEARCH_API_SOLR_MULTILINGUAL_LANGUAGE_SEPARATOR . '([^_]+?)_@', $decoded_field_name, $matches)) {
       return $matches[1];
     }
@@ -145,9 +145,9 @@ class Utility {
    *   could be extracted.
    */
   public static function extractLanguageSpecificSolrDynamicFieldDefinition($field_name) {
-    $decoded_field_name = SearchApiSolrUtility::decodeSolrDynamicFieldName($field_name);
+    $decoded_field_name = SearchApiSolrUtility::decodeSolrName($field_name);
     if (preg_match('@^[a-z]+' . SEARCH_API_SOLR_MULTILINGUAL_LANGUAGE_SEPARATOR . '[^_]+?_@', $decoded_field_name, $matches)) {
-      return SearchApiSolrUtility::encodeSolrDynamicFieldName($matches[0]) . '*';
+      return SearchApiSolrUtility::encodeSolrName($matches[0]) . '*';
     }
     return FALSE;
   }
diff --git a/tests/modules/search_api_solr_multilingual_test/config/install/language.entity.de-at.yml b/tests/modules/search_api_solr_multilingual_test/config/install/language.entity.de-at.yml
new file mode 100644
index 0000000..9e780ca
--- /dev/null
+++ b/tests/modules/search_api_solr_multilingual_test/config/install/language.entity.de-at.yml
@@ -0,0 +1,8 @@
+langcode: en
+status: true
+dependencies: {  }
+id: de-at
+label: German/Austria
+direction: ltr
+weight: 0
+locked: false
diff --git a/tests/modules/search_api_solr_multilingual_test/config/install/search_api.index.solr_multilingual_search_index.yml b/tests/modules/search_api_solr_multilingual_test/config/install/search_api.index.solr_multilingual_search_index.yml
index 9e21a68..0b3ee3a 100644
--- a/tests/modules/search_api_solr_multilingual_test/config/install/search_api.index.solr_multilingual_search_index.yml
+++ b/tests/modules/search_api_solr_multilingual_test/config/install/search_api.index.solr_multilingual_search_index.yml
@@ -6,38 +6,38 @@ field_settings:
   id:
     label: ID
     type: integer
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: id
   name:
     label: Name
     type: text
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: name
     boost: 5.0
   body:
     label: Body
     type: text
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: body
   type:
     label: Type
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: type
   keywords:
     label: Keywords
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: keywords
   category:
     label: Category
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: category
   width:
     label: Width
     type: decimal
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: width
 processor_settings:
   add_url:
@@ -54,8 +54,8 @@ options:
   cron_limit: -1
   index_directly: false
 datasource_settings:
-  'entity:entity_test':
-    plugin_id: 'entity:entity_test'
+  'entity:entity_test_mulrev_changed':
+    plugin_id: 'entity:entity_test_mulrev_changed'
     settings: {  }
 tracker_settings:
   'default':
@@ -66,18 +66,18 @@ status: true
 langcode: en
 dependencies:
   config:
-    - field.field.entity_test.article.body
-    - field.field.entity_test.article.keywords
-    - field.field.entity_test.article.category
-    - field.field.entity_test.article.width
-    - field.field.entity_test.item.body
-    - field.field.entity_test.item.keywords
-    - field.field.entity_test.item.category
-    - field.field.entity_test.item.width
-    - field.storage.entity_test.body
-    - field.storage.entity_test.keywords
-    - field.storage.entity_test.category
-    - field.storage.entity_test.width
+    - field.field.entity_test_mulrev_changed.article.body
+    - field.field.entity_test_mulrev_changed.article.keywords
+    - field.field.entity_test_mulrev_changed.article.category
+    - field.field.entity_test_mulrev_changed.article.width
+    - field.field.entity_test_mulrev_changed.item.body
+    - field.field.entity_test_mulrev_changed.item.keywords
+    - field.field.entity_test_mulrev_changed.item.category
+    - field.field.entity_test_mulrev_changed.item.width
+    - field.storage.entity_test_mulrev_changed.body
+    - field.storage.entity_test_mulrev_changed.keywords
+    - field.storage.entity_test_mulrev_changed.category
+    - field.storage.entity_test_mulrev_changed.width
     - search_api.server.solr_multilingual_search_server
   module:
-    - entity_test
+    - entity_test_mulrev_changed
diff --git a/tests/modules/search_api_solr_multilingual_test/config/optional/search_api.index.multi_datasource_solr_search_index.yml b/tests/modules/search_api_solr_multilingual_test/config/optional/search_api.index.multi_datasource_solr_search_index.yml
index 22bfdbc..ece7e58 100644
--- a/tests/modules/search_api_solr_multilingual_test/config/optional/search_api.index.multi_datasource_solr_search_index.yml
+++ b/tests/modules/search_api_solr_multilingual_test/config/optional/search_api.index.multi_datasource_solr_search_index.yml
@@ -6,38 +6,38 @@ field_settings:
   id:
     label: ID
     type: integer
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: id
   name:
     label: Name
     type: text
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: name
     boost: 5.0
   body:
     label: Body
     type: text
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: body
   type:
     label: Type
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: type
   keywords:
     label: Keywords
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: keywords
   category:
     label: Category
     type: string
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: category
   width:
     label: Width
     type: decimal
-    datasource_id: 'entity:entity_test'
+    datasource_id: 'entity:entity_test_mulrev_changed'
     property_path: width
   uid:
     label: UID
@@ -59,8 +59,8 @@ options:
   cron_limit: -1
   index_directly: false
 datasource_settings:
-  'entity:entity_test':
-    plugin_id: 'entity:entity_test'
+  'entity:entity_test_mulrev_changed':
+    plugin_id: 'entity:entity_test_mulrev_changed'
     settings: {  }
   'entity:user':
     plugin_id: 'entity:user'
@@ -74,18 +74,18 @@ status: true
 langcode: en
 dependencies:
   config:
-    - field.field.entity_test.article.body
-    - field.field.entity_test.article.keywords
-    - field.field.entity_test.article.category
-    - field.field.entity_test.article.width
-    - field.field.entity_test.item.body
-    - field.field.entity_test.item.keywords
-    - field.field.entity_test.item.category
-    - field.field.entity_test.item.width
-    - field.storage.entity_test.body
-    - field.storage.entity_test.keywords
-    - field.storage.entity_test.category
-    - field.storage.entity_test.width
+    - field.field.entity_test_mulrev_changed.article.body
+    - field.field.entity_test_mulrev_changed.article.keywords
+    - field.field.entity_test_mulrev_changed.article.category
+    - field.field.entity_test_mulrev_changed.article.width
+    - field.field.entity_test_mulrev_changed.item.body
+    - field.field.entity_test_mulrev_changed.item.keywords
+    - field.field.entity_test_mulrev_changed.item.category
+    - field.field.entity_test_mulrev_changed.item.width
+    - field.storage.entity_test_mulrev_changed.body
+    - field.storage.entity_test_mulrev_changed.keywords
+    - field.storage.entity_test_mulrev_changed.category
+    - field.storage.entity_test_mulrev_changed.width
     - search_api.server.solr_multilingual_search_server
   module:
     - entity_test
diff --git a/tests/src/Kernel/SearchApiSolrMultilingualTest.php b/tests/src/Kernel/SearchApiSolrMultilingualTest.php
index 0247287..8a0007f 100644
--- a/tests/src/Kernel/SearchApiSolrMultilingualTest.php
+++ b/tests/src/Kernel/SearchApiSolrMultilingualTest.php
@@ -45,6 +45,12 @@ class SearchApiSolrMultilingualTest extends SearchApiSolrTest {
    */
   protected $indexId = 'solr_multilingual_search_index';
 
+  /**
+   * The mocked logger.
+   *
+   * @var \Psr\Log\LoggerInterface
+   */
+  protected $logger;
 
   /**
    * {@inheritdoc}
@@ -55,6 +61,10 @@ class SearchApiSolrMultilingualTest extends SearchApiSolrTest {
     $this->installEntitySchema('user');
     $this->installConfig(['search_api_solr', 'search_api_solr_multilingual', 'search_api_solr_multilingual_test']);
 
+    $this->logger = $this->getMock('Psr\Log\LoggerInterface');
+    $this->logger->method('log')->willThrowException(new \Exception('logger triggered'));
+    \Drupal::getContainer()->get('logger.factory')->addLogger($this->logger);
+
     $this->detectSolrAvailability();
   }
 
@@ -99,4 +109,127 @@ class SearchApiSolrMultilingualTest extends SearchApiSolrTest {
     ];
   }
 
+  /**
+   * Tests classic multilingual schema.
+   */
+  public function testClassicMultilingualSchema() {
+    /** @var Drupal\search_api_solr_multilingual\Controller\SolrFieldTypeListBuilder $list_builder */
+    $list_builder = \Drupal::entityTypeManager()
+      ->getListBuilder('solr_field_type');
+
+    // @todo
+  }
+
+  /**
+   * Tests language fallback.
+   */
+  public function testLanguageFallback() {
+    $server = $this->getIndex()->getServerInstance();
+    $config = $server->getBackendConfig();
+    #$server->setBackendConfig(['solr_version' => '4.5.1'] + $server->getBackendConfig());
+
+    // Only run further tests if we have a Solr core available.
+    if ($this->solrAvailable) {
+      $config['sasm_language_unspecific_fallback_on_schema_issues'] = FALSE;
+      $server->setBackendConfig($config)->save();
+      $this->assertFalse($this->getIndex()->getServerInstance()->getBackendConfig()['sasm_language_unspecific_fallback_on_schema_issues']);
+
+      $this->insertMultilingualExampleContent();
+
+      try {
+        $this->indexItems($this->indexId);
+        $this->fail('Indexing a non-existing language without fallback enabled did not throw an exception.');
+      }
+      catch (\Exception $e) {
+        $this->assertEquals('logger triggered', $e->getMessage());
+      }
+
+      $this->clearIndex();
+
+      $config['sasm_language_unspecific_fallback_on_schema_issues'] = TRUE;
+      $server->setBackendConfig($config)->save();
+      $this->assertTrue($this->getIndex()->getServerInstance()->getBackendConfig()['sasm_language_unspecific_fallback_on_schema_issues']);
+
+      $this->indexItems($this->indexId);
+
+      $results = $this->buildSearch()->execute();
+      $this->assertEquals(6, $results->getResultCount(), 'Number of indexed entities is correct.');
+
+      // Stemming "en":
+      // gene => gene
+      // genes => gene
+      //
+      // Stemming "de":
+      // Gen => gen
+      // Gene => gen
+      $query = $this->buildSearch('Gen');
+      $query->setLanguages(['en', 'de']);
+      $results = $query->execute();
+      $this->assertEquals(2, $results->getResultCount(), 'Two results for "Gen" in German entities. No results for "Gen" in English entities.');
+
+      $query = $this->buildSearch('Gene');
+      $query->setLanguages(['en', 'de']);
+      $results = $query->execute();
+      $this->assertEquals(4, $results->getResultCount(), 'Two results for "Gene" in German entities. Two results for "Gene" in English entities.');
+
+      // Stemming of "de-at" should fall back to "de".
+      $query = $this->buildSearch('Gen');
+      $query->setLanguages(['de-at']);
+      $results = $query->execute();
+      $this->assertEquals(2, $results->getResultCount(), 'Two results for "Gen" in Austrian entities.');
+      $query = $this->buildSearch('Gene');
+      $query->setLanguages(['de-at']);
+      $results = $query->execute();
+      $this->assertEquals(2, $results->getResultCount(), 'Two results for "Gene" in Austrian entities.');
+    }
+    else {
+      $this->assertTrue(TRUE, 'Error: The Solr instance could not be found. Please enable a multi-core one on http://localhost:8983/solr/d8');
+    }
+
+  }
+
+  /**
+   * Creates several test entities.
+   */
+  protected function insertMultilingualExampleContent() {
+    $this->addTestEntity(1, array(
+      'name' => 'en 1',
+      'body' => 'gene',
+      'type' => 'item',
+      'langcode' => 'en',
+    ));
+    $this->addTestEntity(2, array(
+      'name' => 'en 2',
+      'body' => 'genes',
+      'type' => 'item',
+      'langcode' => 'en',
+    ));
+    $this->addTestEntity(3, array(
+      'name' => 'de 3',
+      'body' => 'Gen',
+      'type' => 'item',
+      'langcode' => 'de',
+    ));
+    $this->addTestEntity(4, array(
+      'name' => 'de 4',
+      'body' => 'Gen',
+      'type' => 'item',
+      'langcode' => 'de',
+    ));
+    $this->addTestEntity(5, array(
+      'name' => 'de-at 5',
+      'body' => 'Gen',
+      'type' => 'item',
+      'langcode' => 'de-at',
+    ));
+    $this->addTestEntity(6, array(
+      'name' => 'de-at 6',
+      'body' => 'Gen',
+      'type' => 'item',
+      'langcode' => 'de-at',
+    ));
+    $count = \Drupal::entityQuery('entity_test_mulrev_changed')->count()->execute();
+    $this->assertEquals(6, $count, "$count items inserted.");
+  }
+
 }
diff --git a/tests/src/Kernel/UtilitiesTest.php b/tests/src/Kernel/UtilitiesTest.php
index 8c1d254..a73b82d 100644
--- a/tests/src/Kernel/UtilitiesTest.php
+++ b/tests/src/Kernel/UtilitiesTest.php
@@ -29,17 +29,40 @@ class UtilitiesTest extends KernelTestBase {
   }
 
   /**
-   * Tests langauge-specific Solr field names.
+   * Tests language-specific Solr field names.
    */
-  public function testLanguageSpecificFieldNames() {
-    $this->doFieldNameConversions();
+  public function testLanguageSpecificFieldTypeNames() {
+    $this->assertEquals('text_de', SASUtility::encodeSolrName('text_de'));
+
+    // Drupal-like locale for Austria.
+    $encoded = SASUtility::encodeSolrName('text_de-at');
+    $this->assertEquals('text_de_X2d_at', $encoded);
+    $this->assertEquals('text_de-at', SASUtility::decodeSolrName($encoded));
+
+    // Traditional Chinese as used in Hong Kong.
+    $encoded = SASUtility::encodeSolrName('text_zh-Hant-HK');
+    $this->assertEquals('text_zh_X2d_Hant_X2d_HK', $encoded);
+    $this->assertEquals('text_zh-Hant-HK', SASUtility::decodeSolrName($encoded));
+
+    // The variant of German orthography dating from the 1901 reforms, as seen
+    // in Switzerland.
+    $encoded = SASUtility::encodeSolrName('text_de-CH-1901');
+    $this->assertEquals('text_de_X2d_CH_X2d_1901', $encoded);
+    $this->assertEquals('text_de-CH-1901', SASUtility::decodeSolrName($encoded));
+  }
+
+  /**
+   * Tests language-specific Solr field names.
+   */
+  public function testLanguageSpecificDynamicFieldNames() {
+    $this->doDynamicFieldNameConversions();
     // Traditional Chinese as used in Hong Kong.
-    $this->doFieldNameConversions('ts', 'zh-Hant-HK', 'a_longer_field_name');
+    $this->doDynamicFieldNameConversions('ts', 'zh-Hant-HK', 'a_longer_field_name');
     // The variant of German orthography dating from the 1901 reforms, as seen
     // in Switzerland.
-    $this->doFieldNameConversions('tm', 'de-CH-1901', 'sophisticated/field;NAME');
+    $this->doDynamicFieldNameConversions('tm', 'de-CH-1901', 'sophisticated/field;NAME');
 
-    $this->doFieldNameConversions('tm', 'en', 'tm;en_tm_en_repeated_sequences');
+    $this->doDynamicFieldNameConversions('tm', 'en', 'tm;en_tm_en_repeated_sequences');
   }
 
   /**
@@ -52,7 +75,7 @@ class UtilitiesTest extends KernelTestBase {
    * @param string $field
    *   The Drupal field name.
    */
-  protected function doFieldNameConversions($prefix = 'tm', $langcode = 'de', $field = 'body') {
+  protected function doDynamicFieldNameConversions($prefix = 'tm', $langcode = 'de', $field = 'body') {
     $sep = ';';
     // tm_body
     $dynamic_field_name = $prefix . '_' . $field;
@@ -72,14 +95,14 @@ class UtilitiesTest extends KernelTestBase {
     $this->assertEquals($language_unspecific_dynamic_field_name, $dynamic_field_name);
 
     // tm;de_body => tm_X3b_de_body => tm_body
-    $encoded_language_specific_dynamic_field_name = SASUtility::encodeSolrDynamicFieldName($language_specific_dynamic_field_name);
+    $encoded_language_specific_dynamic_field_name = SASUtility::encodeSolrName($language_specific_dynamic_field_name);
     $encoded_language_unspecific_dynamic_field_name = Utility::getSolrDynamicFieldNameForLanguageSpecificSolrDynamicFieldName($encoded_language_specific_dynamic_field_name);
-    $decoded_language_unspecific_dynamic_field_name = SASUtility::decodeSolrDynamicFieldName($encoded_language_unspecific_dynamic_field_name);
+    $decoded_language_unspecific_dynamic_field_name = SASUtility::decodeSolrName($encoded_language_unspecific_dynamic_field_name);
     $this->assertEquals($decoded_language_unspecific_dynamic_field_name, $dynamic_field_name);
 
     // tm_X3b_de_body => tm_X3b_de_*
     $field_definition = Utility::extractLanguageSpecificSolrDynamicFieldDefinition($encoded_language_specific_dynamic_field_name);
-    $this->assertEquals($field_definition, SASUtility::encodeSolrDynamicFieldName($language_specific_prefix) . '*');
+    $this->assertEquals($field_definition, SASUtility::encodeSolrName($language_specific_prefix) . '*');
 
     // tm;de_body => de
     $this->assertEquals(Utility::getLanguageIdFromLanguageSpecificSolrDynamicFieldName($language_specific_field_name), $langcode);
