diff --git a/ace_editor.module b/ace_editor.module
index 2e42215f6e8ef79eee9219f8e68fa16d2d1fb27c..9680ace893ef141f2ba8d86743ac07e100eb234b 100644
--- a/ace_editor.module
+++ b/ace_editor.module
@@ -100,6 +100,7 @@ function ace_editor_library_info_alter(&$libraries, $extension) {
       $libraries['primary']['js'][$library_path . 'ext-language_tools.js'] = ['weight' => -2];
     }
     $libraries['formatter']['js'][$library_path . 'ace.js'] = ['weight' => -2];
+    $libraries['formatter']['js'][$library_path . 'ext-modelist.js'] = ['weight' => -2];
     $libraries['filter']['js'][$library_path . 'ace.js'] = ['weight' => -2];
   }
 }
diff --git a/config/install/ace_editor.settings.yml b/config/install/ace_editor.settings.yml
index b0978819d0487d09bdf6a1facae8dce60e500a20..3925ae7f44fa9155842c8c91c1f00a9621fd5436 100644
--- a/config/install/ace_editor.settings.yml
+++ b/config/install/ace_editor.settings.yml
@@ -178,6 +178,9 @@ syntax_list:
   yaml: "YAML"
 theme: 'cobalt'
 syntax: 'html'
+syntax_field: '_none'
+modelist: false
+inline: false
 height: '300px'
 width: '100%'
 font_size: '12pt'
diff --git a/js/formatter.js b/js/formatter.js
index 6a1a60f67e3106c4ff6e7a8e7c014d25b55c7b0a..ae8ec4ad68723f63eb9085bd4e0d80fb0bf35b4b 100644
--- a/js/formatter.js
+++ b/js/formatter.js
@@ -31,12 +31,21 @@
                 // Setting theme and mode variable.
                 var theme = ace_settings.theme;
                 var mode = ace_settings.syntax;
+                var inline = Boolean(ace_settings.inline);
+                if (ace_settings.syntax_field_value) {
+                  mode = ace_settings.syntax_field_value;
+                  if (ace_settings.modelist) {
+                    let modelist = ace.require("ace/ext/modelist");
+                    mode = modelist.getModeForPath("." + mode).name;
+                  }
+                }
 
                 // Setting editor style and properties.
                 var editor = ace.edit(display_id);
                 editor.setReadOnly(true);
                 editor.setTheme("ace/theme/"+theme);
-                editor.getSession().setMode("ace/mode/"+mode);
+                editor.getSession().setMode({path:"ace/mode/" + mode, inline:inline});
+
                 editor.getSession().setValue(content.val());
                 $("#"+display_id).height(ace_settings.height).width(ace_settings.width);
 
diff --git a/src/Plugin/Field/FieldFormatter/AceFormatter.php b/src/Plugin/Field/FieldFormatter/AceFormatter.php
index b6ef2a58a72509f9feb6375435af849736c936a9..0f4b0f032dfa023e7f00d34434168922ec3ff234 100644
--- a/src/Plugin/Field/FieldFormatter/AceFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/AceFormatter.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\ace_editor\Plugin\Field\FieldFormatter;
 
+use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FormatterBase;
@@ -39,6 +40,13 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
    */
   protected $renderer;
 
+  /**
+   * The entity field manager.
+   *
+   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
+   */
+  protected $entityFieldManager;
+
   /**
    * Constructs an AceFormatter instance.
    *
@@ -60,13 +68,16 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
    *   The rendered service.
    * @param \Drupal\Core\Config\ConfigFactory $config_factory
    *   The config factory.
+   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
+   *   The entity field manager.
    */
-  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, RendererInterface $renderer, ConfigFactory $config_factory) {
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, RendererInterface $renderer, ConfigFactory $config_factory, EntityFieldManagerInterface $entity_field_manager) {
 
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
 
     $this->renderer = $renderer;
     $this->configFactory = $config_factory;
+    $this->entityFieldManager = $entity_field_manager;
   }
 
   /**
@@ -82,7 +93,8 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
       $configuration['view_mode'],
       $configuration['third_party_settings'],
       $container->get('renderer'),
-      $container->get('config.factory')
+      $container->get('config.factory'),
+      $container->get('entity_field.manager')
     );
   }
 
@@ -104,6 +116,9 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
     $summary = [];
     $summary[] = $this->t('Theme:') . ' ' . $settings['theme'];
     $summary[] = $this->t('Syntax:') . ' ' . $settings['syntax'];
+    $summary[] = $this->t('Syntax field:') . ' ' . $this->getSyntaxOptions()[$settings['syntax_field']];
+    $summary[] = $this->t('Syntax use modelist:') . ' ' . ($settings['modelist'] ? $this->t('Yes') : $this->t('No'));
+    $summary[] = $this->t('Inline:') . ' ' . ($settings['inline'] ? $this->t('Yes') : $this->t('No'));
     $summary[] = $this->t('Height:') . ' ' . $settings['height'];
     $summary[] = $this->t('Width:') . ' ' . $settings['width'];
     $summary[] = $this->t('Font size:') . ' ' . $settings['font_size'];
@@ -146,6 +161,24 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
         ],
         '#default_value' => $settings['syntax'],
       ],
+      'syntax_field' => [
+        '#type' => 'select',
+        '#title' => $this->t('Syntax field'),
+        '#default_value' => $settings['syntax_field'],
+        '#options' => $this->getSyntaxOptions(),
+      ],
+      'modelist' => [
+        '#type' => 'checkbox',
+        '#title' => $this->t('Modelist'),
+        '#description' => $this->t('Use the ACE modelist to convert a file-extension to a syntax mode.'),
+        '#default_value' => $settings['modelist'],
+      ],
+      'inline' => [
+        '#type' => 'checkbox',
+        '#title' => $this->t('Inline'),
+        '#description' => $this->t('Specify if the code shall be displayed as inline code.'),
+        '#default_value' => $settings['inline'],
+      ],
       'height' => [
         '#type' => 'textfield',
         '#title' => $this->t('Height'),
@@ -205,6 +238,18 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
     $settings = $this->getSettings();
 
     foreach ($items as $delta => $item) {
+      if (isset($settings['syntax_field'])
+        && $settings['syntax_field'] != '_none'
+        && $item->getEntity()->hasField($settings['syntax_field'])
+        && !$item->getEntity()->get($settings['syntax_field'])->isEmpty()
+      ) {
+        $field_storage_definition = $item->getEntity()->get($settings['syntax_field'])->getFieldDefinition()->getFieldStorageDefinition();
+        $key = $field_storage_definition->getMainPropertyName();
+        $settings['syntax_field_value'] = $item->getEntity()->get($settings['syntax_field'])->{$key};
+      }
+      else {
+        $settings['syntax_field_value'] = NULL;
+      }
 
       $elements[$delta] = [
         '#type' => 'textarea',
@@ -230,4 +275,21 @@ class AceFormatter extends FormatterBase implements ContainerFactoryPluginInterf
     return $elements;
   }
 
+  /**
+   * Helper method to get all possible options for the syntax_field setting.
+   *
+   * @return array
+   *   Select options for syntax_field.
+   */
+  protected function getSyntaxOptions(): array {
+    $syntax_options = ['_none' => $this->t('None')];
+    $entity_type_id = $this->fieldDefinition->getTargetEntityTypeId();
+    $bundle = $this->fieldDefinition->getTargetBundle();
+    foreach ($this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle) as $field) {
+      $syntax_options[$field->getName()] = $field->getLabel();
+    }
+
+    return $syntax_options;
+  }
+
 }