diff --git a/src/Plugin/jsonapi/FieldEnhancer/DoubleFieldEnhancer.php b/src/Plugin/jsonapi/FieldEnhancer/DoubleFieldEnhancer.php
new file mode 100644
index 0000000..eed9f86
--- /dev/null
+++ b/src/Plugin/jsonapi/FieldEnhancer/DoubleFieldEnhancer.php
@@ -0,0 +1,138 @@
+<?php
+
+namespace Drupal\double_field\Plugin\jsonapi\FieldEnhancer;
+
+use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerBase;
+use Drupal\double_field\Plugin\Field\FieldType\DoubleField;
+
+/**
+ * Perform additional manipulations to double_field fields.
+ *
+ * @ResourceFieldEnhancer(
+ *   id = "double_field",
+ *   label = @Translation("Double Field"),
+ *   description = @Translation("Allow to change first and second with more readable values in double fields.")
+ * )
+ */
+class DoubleFieldEnhancer extends ResourceFieldEnhancerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'first_id' => 'first',
+      'second_id' => 'second',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function postProcess($value) {
+    $settings = $this->getConfiguration();
+
+    $return = [];
+    if ($settings['first_type'] != 'hidden') {
+      $return[$settings['first_id']] = $value['first'];
+    }
+    if ($settings['second_type'] != 'hidden') {
+      $return[$settings['second_id']] = $value['second'];
+    }
+    return $return;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareForInput($value) {
+    $settings = $this->getConfiguration();
+    return [
+      'first' => $value[$settings['first_id']],
+      'second' => $value[$settings['second_id']],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getJsonSchema() {
+    $settings = $this->getConfiguration();
+    $types = $this->doubleFieldTypes();
+
+    $schema = [
+      "type" => "object",
+      "properties" => [],
+    ];
+
+    if ($settings['first_type'] != 'hidden') {
+      $schema['properties'][$settings['first_id']] = [
+        "type" => $settings['first_type'],
+        "title" => $types[$settings['first_type']],
+      ];
+    }
+    if ($settings['second_type'] != 'hidden') {
+      $schema['properties'][$settings['second_id']] = [
+        "type" => $settings['second_type'],
+        "title" => $types[$settings['second_type']],
+      ];
+    }
+    return $schema;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSettingsForm(array $resource_field_info) {
+    $settings = empty($resource_field_info['enhancer']['settings'])
+      ? $this->getConfiguration()
+      : $resource_field_info['enhancer']['settings'];
+
+    $types = $this->doubleFieldTypes();
+
+    return [
+      'first_id' => [
+        '#type' => 'machine_name',
+        '#title' => $this->t('First'),
+        '#description' => $this->t('Identifier for first value'),
+        '#default_value' => $settings['first_id'],
+        '#size' => 20,
+      ],
+      'first_type' => [
+        '#type' => 'select',
+        '#title' => $this->t('First type'),
+        '#description' => $this->t('Cast for first value'),
+        '#options' => $types,
+        '#default_value' => $settings['first_type'],
+      ],
+      'second_id' => [
+        '#type' => 'machine_name',
+        '#title' => $this->t('Second'),
+        '#description' => $this->t('Identifier for second value'),
+        '#default_value' => $settings['second_id'],
+        '#size' => 20,
+      ],
+      'second_type' => [
+        '#type' => 'select',
+        '#title' => $this->t('Second type'),
+        '#description' => $this->t('Cast for second value'),
+        '#options' => $types,
+        '#default_value' => $settings['second_type'],
+      ],
+    ];
+  }
+
+  /**
+   * Returns a list of types that are valid in the context of double fields.
+   */
+  protected function doubleFieldTypes() {
+    return [
+      'hidden' => t('- Hidden -'),
+      'boolean' => t('Boolean'),
+      'string' => t('Text'),
+      'integer' => t('Integer'),
+      'float' => t('Float'),
+    ];
+  }
+
+}
