diff --git a/css/jsonapi_extras.expandable_rows_table.css b/css/jsonapi_extras.expandable_rows_table.css
new file mode 100644
index 0000000..fb2c0db
--- /dev/null
+++ b/css/jsonapi_extras.expandable_rows_table.css
@@ -0,0 +1,29 @@
+.advanced-opts {
+    display: none;
+    background-color: #f5f5f5;
+}
+
+.advanced-opts td:nth-child(1) {
+    font-size: 2em;
+}
+
+.advanced-opts td:nth-child(2) {
+    font-weight: bold;
+}
+
+.toggle-expanded span {
+    color: #000;
+    display: inline-block;
+}
+
+.toggle-expanded span:hover {
+    text-decoration: none;
+}
+
+.toggle-expanded.content-collapsed span::before {
+    content: "▸";
+}
+
+.toggle-expanded.content-expanded span::before {
+    content: "▾";
+}
diff --git a/js/jsonapi_extras.expandable_rows_table.js b/js/jsonapi_extras.expandable_rows_table.js
new file mode 100644
index 0000000..905954c
--- /dev/null
+++ b/js/jsonapi_extras.expandable_rows_table.js
@@ -0,0 +1,32 @@
+/**
+ * @file
+ * JSON API Extras table with collapsible rows behaviors.
+ */
+
+(function ($, Drupal) {
+
+  'use strict'
+
+  /**
+   * Handles the events to collapse/expand rows.
+   */
+  Drupal.behaviors.jsonapi_extras_expandable_rows_table = {
+    attach: function (context, settings) {
+      var $advanced_opts_links = $('.toggle-expanded', context).once('toggle-expanded');
+
+      $advanced_opts_links.click(function () {
+        $(this).removeClass("content-collapsed content-expanded");
+        // 'data-open' attribute holds the id of the element that we should display/hide.
+        var $el = $('#' + $(this).attr('data-open'));
+        $el.toggle();
+        if ($el.is(':visible')){
+          $(this).addClass("content-expanded");
+        }
+        else {
+          $(this).addClass("content-collapsed");
+        }
+      })
+    }
+  }
+
+}(jQuery, Drupal))
diff --git a/jsonapi_extras.libraries.yml b/jsonapi_extras.libraries.yml
index 9c57b84..fa9b5b9 100644
--- a/jsonapi_extras.libraries.yml
+++ b/jsonapi_extras.libraries.yml
@@ -9,3 +9,15 @@ admin:
     - core/jquery
     - core/drupal
     - core/jquery.once
+
+expandable_rows_table:
+  version: VERSION
+  css:
+    theme:
+      css/jsonapi_extras.expandable_rows_table.css: {}
+  js:
+    js/jsonapi_extras.expandable_rows_table.js: {}
+  dependencies:
+    - core/jquery
+    - core/drupal
+    - core/jquery.once
diff --git a/jsonapi_extras.module b/jsonapi_extras.module
index ad05485..59612fb 100644
--- a/jsonapi_extras.module
+++ b/jsonapi_extras.module
@@ -19,3 +19,36 @@ function jsonapi_extras_help($route_name, RouteMatchInterface $route_match) {
       return $output;
   }
 }
+
+/**
+ * Implements hook_theme().
+ */
+function jsonapi_extras_theme() {
+  return [
+    'expandable_rows_table' => [
+      'variables' => [
+        'header' => NULL,
+        'rows' => NULL,
+        'footer' => NULL,
+        'attributes' => [],
+        'caption' => NULL,
+        'colgroups' => [],
+        'sticky' => FALSE,
+        'responsive' => TRUE,
+        'empty' => '',
+      ],
+    ],
+  ];
+}
+
+/**
+ * Prepares variables for expandable rows table template.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - elements: An associative array containing a Form API structure to be
+ *     rendered as a table.
+ */
+function template_preprocess_expandable_rows_table(&$variables) {
+  template_preprocess_table($variables);
+}
diff --git a/src/Form/JsonapiResourceConfigForm.php b/src/Form/JsonapiResourceConfigForm.php
index 3a67b92..1bdd740 100644
--- a/src/Form/JsonapiResourceConfigForm.php
+++ b/src/Form/JsonapiResourceConfigForm.php
@@ -309,11 +309,12 @@ class JsonapiResourceConfigForm extends EntityForm {
 
     $overrides_form['overrides']['fields']['resourceFields'] = [
       '#type' => 'table',
+      '#theme' => 'expandable_rows_table',
       '#header' => [
         'disabled' => $this->t('Disabled'),
         'fieldName' => $this->t('Field name'),
         'publicName' => $this->t('Alias'),
-        'enhancer' => $this->t('Enhancer'),
+        'advancedOptions' => $this->t(''),
       ],
       '#empty' => $this->t('No fields available.'),
       '#states' => [
@@ -321,6 +322,11 @@ class JsonapiResourceConfigForm extends EntityForm {
           ':input[name="disabled"]' => ['checked' => FALSE],
         ],
       ],
+      '#attached' => [
+        'library' => [
+            'jsonapi_extras/expandable_rows_table',
+        ],
+      ],
     ];
 
     foreach ($field_names as $field_name) {
@@ -387,8 +393,21 @@ class JsonapiResourceConfigForm extends EntityForm {
         ],
       ],
     ];
+
+    $overrides_form['advanced_options_icon'] = [
+      '#type' => 'item',
+      // Here we are just printing an arrow.
+      '#markup' => '&#x21B3;'
+    ];
+
+    $overrides_form['enhancer_label'] = [
+      '#type' => 'item',
+      '#markup' => 'Enhancer for: '.$field_name
+    ];
+
     // Build the select field for the list of enhancers.
     $overrides_form['enhancer'] = [
+      '#wrapper_attributes' => ['colspan' => 2],
       '#type' => 'fieldgroup',
       '#states' => [
         'visible' => [
@@ -452,4 +471,16 @@ class JsonapiResourceConfigForm extends EntityForm {
     return $form['bundle_wrapper']['fields_wrapper']['overrides']['fields']['resourceFields'][$field_name]['enhancer']['settings'];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function actionsElement(array $form, FormStateInterface $form_state) {
+    // We want to display "Revert" instead of "Delete" on the Resource Config Form.
+    $element = parent::actionsElement($form, $form_state);
+    if (isset($element['delete'])) {
+      $element['delete']['#title'] = $this->t('Revert');
+    }
+    return $element;
+  }
+
 }
diff --git a/templates/expandable-rows-table.html.twig b/templates/expandable-rows-table.html.twig
new file mode 100644
index 0000000..10b070c
--- /dev/null
+++ b/templates/expandable-rows-table.html.twig
@@ -0,0 +1,134 @@
+{#
+/**
+ * @file
+ * Theme override to display a table.
+ * The main difference between this template and the original table template is that here
+ * we are printing the last three columns of each row inside a secondary, collapsible row.
+ *
+ * Available variables:
+ * - attributes: HTML attributes to apply to the <table> tag.
+ * - caption: A localized string for the <caption> tag.
+ * - colgroups: Column groups. Each group contains the following properties:
+ *   - attributes: HTML attributes to apply to the <col> tag.
+ *     Note: Drupal currently supports only one table header row, see
+ *     https://www.drupal.org/node/893530 and
+ *     http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
+ * - header: Table header cells. Each cell contains the following properties:
+ *   - tag: The HTML tag name to use; either 'th' or 'td'.
+ *   - attributes: HTML attributes to apply to the tag.
+ *   - content: A localized string for the title of the column.
+ *   - field: Field name (required for column sorting).
+ *   - sort: Default sort order for this column ("asc" or "desc").
+ * - sticky: A flag indicating whether to use a "sticky" table header.
+ * - rows: Table rows. Each row contains the following properties:
+ *   - attributes: HTML attributes to apply to the <tr> tag.
+ *   - data: Table cells.
+ *   - no_striping: A flag indicating that the row should receive no
+ *     'even / odd' styling. Defaults to FALSE.
+ *   - cells: Table cells of the row. Each cell contains the following keys:
+ *     - tag: The HTML tag name to use; either 'th' or 'td'.
+ *     - attributes: Any HTML attributes, such as "colspan", to apply to the
+ *       table cell.
+ *     - content: The string to display in the table cell.
+ *     - active_table_sort: A boolean indicating whether the cell is the active
+         table sort.
+ * - footer: Table footer rows, in the same format as the rows variable.
+ * - empty: The message to display in an extra row if table does not have
+ *   any rows.
+ * - no_striping: A boolean indicating that the row should receive no striping.
+ * - header_columns: The number of columns in the header.
+ * - toggler_text: Text of the link that shows/hides the colapsible row
+ *
+ * @see template_preprocess_table()
+ */
+#}
+<table{{ attributes }}>
+    {% if caption %}
+        <caption>{{ caption }}</caption>
+    {% endif %}
+
+    {% for colgroup in colgroups %}
+        {% if colgroup.cols %}
+            <colgroup{{ colgroup.attributes }}>
+                {% for col in colgroup.cols %}
+                    <col{{ col.attributes }} />
+                {% endfor %}
+            </colgroup>
+        {% else %}
+            <colgroup{{ colgroup.attributes }} />
+        {% endif %}
+    {% endfor %}
+
+    {% if header %}
+        <thead>
+        <tr>
+            {% for cell in header %}
+            {%
+            set cell_classes = [
+            cell.active_table_sort ? 'is-active',
+            ]
+            %}
+            <{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}>
+            {{- cell.content -}}
+            </{{ cell.tag }}>
+        {% endfor %}
+        </tr>
+        </thead>
+    {% endif %}
+
+    {% if rows %}
+        <tbody>
+        {% for row in rows %}
+            {%
+            set row_classes = [
+            not no_striping ? cycle(['odd', 'even'], loop.index0),
+            ]
+            %}
+        <tr{{ row.attributes.addClass(row_classes) }}>
+            {% for cell in row.cells %}
+                {% if loop.index < row.cells|length - 2%}
+                    <{{ cell.tag }}{{ cell.attributes }}>
+                    {{- cell.content -}}
+                    </{{ cell.tag }}>
+                {% elseif loop.index == row.cells|length - 2 %}
+                    <{{ cell.tag }}{{ cell.attributes }}>
+                        <a class="toggle-expanded content-collapsed" data-open="adv-opt-{{ loop.parent.loop.index }}">
+                            <span></span>
+                            Advanced options
+                        </a>
+                    </{{ cell.tag }}>
+                {% endif %}
+            {% endfor %}
+        </tr>
+        <tr {{ row.attributes.addClass(row_classes).addClass(row_classes).addClass('advanced-opts') }} id="adv-opt-{{ loop.index }}">
+            {% for cell in row.cells %}
+                {% if loop.index >= row.cells|length - 2 %}
+                    <{{ cell.tag }}{{ cell.attributes }}>
+                        {{- cell.content -}}
+                    </{{ cell.tag }}>
+                {% endif %}
+            {% endfor %}
+        </tr>
+        {% endfor %}
+        </tbody>
+    {% elseif empty %}
+        <tbody>
+        <tr class="odd">
+            <td colspan="{{ header_columns }}" class="empty message">{{ empty }}</td>
+        </tr>
+        </tbody>
+    {% endif %}
+    {% if footer %}
+        <tfoot>
+        {% for row in footer %}
+        <tr{{ row.attributes }}>
+            {% for cell in row.cells %}
+                <{{ cell.tag }}{{ cell.attributes }}>
+                {{- cell.content -}}
+                </{{ cell.tag }}>
+            {% endfor %}
+            </tr>
+        {% endfor %}
+        </tfoot>
+    {% endif %}
+</table>
\ No newline at end of file
