diff --git a/focal_point.module b/focal_point.module
index 5557735..a12e4ca 100644
--- a/focal_point.module
+++ b/focal_point.module
@@ -11,6 +11,10 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\Core\Url;
+use Drupal\focal_point\FocalPointHelper;
+use Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget;
 
 /**
  * Implements hook_theme().
@@ -63,3 +67,64 @@ function focal_point_field_widget_form_alter(&$element, FormStateInterface $form
     $element['#value_callback'] = array('Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget', 'value');
   }
 }
+
+/**
+ * Implements hook_form_file_image_edit_form_alter().
+ * File entity integration.
+ */
+function focal_point_form_file_image_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
+  $file_entity_edit_form = $form_state->getBuildInfo()['callback_object'];
+  $file = $file_entity_edit_form->getEntity();
+
+  $preview_image_render = array(
+    'style_name' => 'medium',
+    'uri' => $file->getFileUri(),
+  );
+
+  $image = \Drupal::service('image.factory')->get($file->getFileUri());
+  if ($image->isValid()) {
+    $preview_image_render['width'] = $image->getWidth();
+    $preview_image_render['height'] = $image->getHeight();
+  }
+  else {
+    $preview_image_render['width'] = $preview_image_render['height'] = NULL;
+  }
+
+  $form['preview'] = [
+    '#theme' => 'image_style',
+    '#width' => $preview_image_render['width'],
+    '#height' => $preview_image_render['height'],
+    '#style_name' => $preview_image_render['style_name'],
+    '#uri' => $preview_image_render['uri']
+  ];
+
+  $form = FocalPointImageWidget::attachFocalPoint($form, $file->id(), FocalPointHelper::calculateDefaultValue($file));
+  $form['actions']['submit']['#submit'][] = 'focal_point_form_file_image_edit_form_submit';
+}
+
+/**
+ * Custom submit handler for the file entity image edit form.
+ */
+function focal_point_form_file_image_edit_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
+  $file_entity_edit_form = $form_state->getBuildInfo()['callback_object'];
+  $entity = $file_entity_edit_form->getEntity();
+  $focal_point_new_value = $form_state->getValue('focal_point');
+  $fpm = \Drupal::service('focal_point.manager');
+  if ($fpm->validateFocalPoint($focal_point_new_value)) {
+    list($x, $y) = explode(',', $focal_point_new_value);
+    $crop_type = \Drupal::config('focal_point.settings')->get('crop_type');
+    $crop = \Drupal::service('focal_point.manager')->getCropEntity($entity, $crop_type);
+    $image = \Drupal::service('image.factory')->get($entity->getFileUri());
+    if ($image->isValid()) {
+      \Drupal::service('focal_point.manager')->saveCropEntity($x, $y, $image->getWidth(), $image->getHeight(), $crop);
+    }
+  }
+}
+
+function focal_point_form_file_image_inline_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
+  focal_point_form_file_image_edit_form_alter($form, $form_state);
+}
+
+function focal_point_form_file_image_inline_edit_form_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
+  focal_point_form_file_image_edit_form_submit($form, $form_state);
+}
diff --git a/src/FocalPointManager.php b/src/FocalPointManager.php
index 4bbd66a..504da9e 100644
--- a/src/FocalPointManager.php
+++ b/src/FocalPointManager.php
@@ -104,4 +104,24 @@ class FocalPointManager implements FocalPointManagerInterface {
     return $crop;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFocalPointFromFile(FileInterface $file, $width = NULL, $height = NULL) {
+    $crop_type = \Drupal::config('focal_point.settings')->get('crop_type');
+    $crop = Crop::findCrop($file->getFileUri(), $crop_type);
+    if ($crop) {
+      if ($width == NULL || $height == NULL) {
+        $image = \Drupal::service('image.factory')->get($file->getFileUri());
+        if ($image->isValid()) {
+          $width = $image->getWidth();
+          $height = $image->getHeight();
+        }
+      }
+      $anchor = $this->absoluteToRelative($crop->x->value, $crop->y->value, $width, $height);
+      return "{$anchor['x']},{$anchor['y']}";
+    }
+    return \Drupal::config('focal_point.settings')->get('default_value');
+  }
+
 }
diff --git a/src/FocalPointManagerInterface.php b/src/FocalPointManagerInterface.php
index 06c1c05..c1e533c 100644
--- a/src/FocalPointManagerInterface.php
+++ b/src/FocalPointManagerInterface.php
@@ -95,4 +95,20 @@ interface FocalPointManagerInterface {
    */
   public function saveCropEntity($x, $y, $width, $height, CropInterface $crop);
 
+  /**
+   * Gets the focal point for a given file, returns a default value if the file
+   * has no focal point.
+   *
+   * @param \Drupal\file\FileInterface $file
+   *   The file.
+   * @param int $width
+   *   Width of the original image.
+   * @param int $height
+   *   Height of the original image.
+   *
+   * @return string
+   *   The focal point in the format x,y.
+   */
+  public function getFocalPointFromFile(FileInterface $file, $width = NULL, $height = NULL);
+
 }
diff --git a/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php b/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
index 3dae58c..3439db9 100644
--- a/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
+++ b/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
@@ -5,6 +5,7 @@ namespace Drupal\focal_point\Plugin\Field\FieldWidget;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
 use Drupal\crop\Entity\Crop;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\focal_point\FocalPointHelper;
 use Drupal\image\Plugin\Field\FieldWidget\ImageWidget;
 use Drupal\Core\Url;
 
@@ -35,9 +36,27 @@ class FocalPointImageWidget extends ImageWidget {
 
     $item = $element['#value'];
     $item['fids'] = $element['fids']['#value'];
-    $element_selector = 'focal-point-' . implode('-', $element['#parents']);
 
-    $default_focal_point_value = isset($item['focal_point']) ? $item['focal_point'] : \Drupal::config('focal_point.settings')->get('default_value');
+    // Even for image fields with a cardinality higher than 1 the correct fid
+    // can always be found in $item['fids'][0].
+    $fid = isset($item['fids'][0]) ? $item['fids'][0] : '';
+    $focal_point = isset($item['focal_point']) ? $item['focal_point'] : \Drupal::config('focal_point.settings')->get('default_value');
+
+    $element = static::attachFocalPoint($element, $fid, $focal_point);
+    return $element;
+  }
+
+  /**
+   * @param $element
+   * @return mixed
+   */
+  public static function attachFocalPoint($element, $fid, $focal_point) {
+    if (isset($element['#parents'])) {
+      $element_selector = 'focal-point-' . implode('-', $element['#parents']);
+    }
+    else {
+      $element_selector = 'focal-point';
+    }
 
     // Add the focal point indicator to preview.
     if (isset($element['preview'])) {
@@ -46,7 +65,6 @@ class FocalPointImageWidget extends ImageWidget {
         '#attributes' => array(
           'class' => array('focal-point-indicator'),
           'data-selector' => $element_selector,
-          'data-delta' => $element['#delta'],
         ),
         '#markup' => '',
       );
@@ -58,12 +76,9 @@ class FocalPointImageWidget extends ImageWidget {
 
       $display_preview_link = \Drupal::config('focal_point.preview')->get('display_link');
 
-      // Even for image fields with a cardinality higher than 1 the correct fid
-      // can always be found in $item['fids'][0].
-      $fid = isset($item['fids'][0]) ? $item['fids'][0] : '';
       if ($display_preview_link && !empty($fid)) {
         // Replace comma (,) with an x to make javascript handling easier.
-        $preview_focal_point_value = str_replace(',', 'x', $default_focal_point_value);
+        $preview_focal_point_value = str_replace(',', 'x', $focal_point);
 
         // Create a token to be used during an access check on the preview page.
         $token = self::getPreviewToken();
@@ -82,7 +97,6 @@ class FocalPointImageWidget extends ImageWidget {
           '#attributes' => [
             'class' => array('focal-point-preview-link'),
             'data-selector' => $element_selector,
-            'data-field-name' => $element['#field_name'],
             'target' => '_blank',
           ],
         ];
@@ -104,12 +118,11 @@ class FocalPointImageWidget extends ImageWidget {
       '#type' => 'textfield',
       '#title' => 'Focal point',
       '#description' => new TranslatableMarkup('Specify the focus of this image in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75'),
-      '#default_value' => $default_focal_point_value,
+      '#default_value' => $focal_point,
       '#element_validate' => array('\Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget::validateFocalPoint'),
       '#attributes' => array(
         'class' => array('focal-point', $element_selector),
         'data-selector' => $element_selector,
-        'data-field-name' => $element['#field_name'],
       ),
       '#attached' => array(
         'library' => array('focal_point/drupal.focal_point'),
@@ -137,13 +150,7 @@ class FocalPointImageWidget extends ImageWidget {
         ->getStorage('file')
         ->load($return['target_id']);
       if ($file) {
-        $crop_type = \Drupal::config('focal_point.settings')->get('crop_type');
-        $crop = Crop::findCrop($file->getFileUri(), $crop_type);
-        if ($crop) {
-          $anchor = \Drupal::service('focal_point.manager')
-            ->absoluteToRelative($crop->x->value, $crop->y->value, $return['width'], $return['height']);
-          $return['focal_point'] = "{$anchor['x']},{$anchor['y']}";
-        }
+        $return['focal_point'] = \Drupal::service('focal_point.manager')->getFocalPointFromFile($file, $return['width'], $return['height']);
       }
       else {
         \Drupal::logger('focal_point')->notice("Attempted to get a focal point value for an invalid or temporary file.");
