diff --git a/focal_point.info.yml b/focal_point.info.yml
index 59a2d6f..24a2a47 100644
--- a/focal_point.info.yml
+++ b/focal_point.info.yml
@@ -1,8 +1,14 @@
 name: Focal Point
 type: module
 description: Allows users to specify the focal point of an image for use during cropping.
-core: 8.x
+# core: 8.x
 package: Images
-version: VERSION
+# version: VERSION
 dependencies:
   - image
+
+# Information added by Drupal.org packaging script on 2015-05-13
+version: '8.x-1.x-dev'
+core: '8.x'
+project: 'focal_point'
+datestamp: 1431553395
diff --git a/focal_point.module b/focal_point.module
index c267635..ee4353e 100644
--- a/focal_point.module
+++ b/focal_point.module
@@ -12,17 +12,24 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\focal_point\FocalPoint;
+use Drupal\file\Entity\File;
 
 /**
  * Implements hook_entity_presave().
  *
  * Saves the focal point value for the image file entity about to be saved.
+ *
+ * @todo Don't hard-code "field_image" here because I may name my field
+ *   something else. When fixed, fix docblock too.
  */
 function focal_point_entity_presave(EntityInterface $entity) {
   if (isset($entity->field_image)) {
     foreach($entity->field_image as $item) {
-      $focal_point = new FocalPoint($item->target_id);
-      $focal_point->saveFocalPoint($item->focal_point);
+      $file = File::load($item->target_id);
+
+      $focal_point = new FocalPoint($file);
+      $focal_point->setFocalPoint($item->focal_point);
+      $focal_point->save();
     }
   }
 }
diff --git a/src/FocalPoint.php b/src/FocalPoint.php
index 4ab8838..86f14a6 100644
--- a/src/FocalPoint.php
+++ b/src/FocalPoint.php
@@ -21,11 +21,11 @@ class FocalPoint {
   const DEFAULT_VALUE = '50,50';
 
   /**
-   * The file entity id to which this focal point object applies.
+   * The file entity to which this focal point object applies.
    *
    * @var int
    */
-  private $fid;
+  private $file;
 
   /**
    * The focal point coordinates.
@@ -38,14 +38,31 @@ class FocalPoint {
   /**
    * Constructs a Focal Point object.
    *
-   * @param int $fid
+   * @param File $file
    */
-  public function __construct($fid) {
-    $this->fid = $fid;
+  public function __construct(File $file) {
+    $this->file = $file;
     $this->focalPoint = $this->getFocalPoint();
   }
 
   /**
+   * Implements \Drupal\focal_point\FocalPoint::setFocalPoint().
+   *
+   * Set the focal point value for this file entity.
+   *
+   * @param string $focal_point
+   *
+   * @return bool
+   */
+  public function setFocalPoint($focal_point) {
+    if ($this->validate($focal_point)) {
+      $this->focalPoint = $focal_point;
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
    * Implements \Drupal\focal_point\FocalPoint::getFocalPoint().
    *
    * Get the focal point value for a given file entity. If none is found, return
@@ -55,8 +72,8 @@ class FocalPoint {
    */
   public function getFocalPoint() {
     if (is_null($this->focalPoint)) {
-      $result = self::getFocalPoints(array($this->fid));
-      $this->focalPoint = isset($result[$this->fid]) ? $result[$this->fid] : '';
+      $result = self::getFocalPoints(array($this->file->id()));
+      $this->focalPoint = isset($result[$this->file->id()]) ? $result[$this->file->id()] : '';
     }
 
     return $this->focalPoint;
@@ -95,7 +112,7 @@ class FocalPoint {
    *
    * @return string
    *
-   * @todo Figure out a better way of doing this. Right now its needed by the
+   * @todo Figure out a better way of doing this. Right now it's needed by the
    *   focal point image effect but it seems wrong.
    */
   public static function getFromURI($uri) {
@@ -109,37 +126,25 @@ class FocalPoint {
   }
 
   /**
-   * Implements \Drupal\focal_point\FocalPoint::fid().
-   *
-   * Returns the file entity id to which this focal point object applies.
-   *
-   * @return int|null
-   */
-  public function fid() {
-    return isset($this->fid) ? $this->fid : NULL;
-  }
-
-  /**
    * Implements \Drupal\focal_point\FocalPoint::setFocalPoint().
    *
    * Save the given focal point value for the given file to the database.
    *
-   * @param string $focal_point
+   * @todo handle the case where this->focal_point is empty.
    */
-  public function saveFocalPoint($focal_point) {
-    // If the focal point has not changed, then there is nothing to see here.
-    if ($this->focalPoint !== $focal_point) {
+  public function save() {
+    if (!empty($this->focalPoint)) {
       \Drupal::database()->merge('focal_point')
-        ->key(array('fid' => $this->fid))
-        ->fields(array('focal_point' => $focal_point))
+        ->key(array('fid' => $this->file->id()))
+        ->fields(array('focal_point' => $this->focalPoint))
         ->execute();
 
-      $this->flush($this->fid);
+      $this->flush($this->file->id());
 
       // Clear caches and static variables.
       $focal_points =  &drupal_static('getFocalPoints', array());
-      unset($focal_points[$this->fid]);
-      Cache::invalidateTags(array($this->fid));
+      unset($focal_points[$this->file->id()]);
+      Cache::invalidateTags(array($this->file->id()));
     }
   }
 
@@ -147,14 +152,12 @@ class FocalPoint {
    * Implements \Drupal\focal_point\FocalPoint::delete().
    *
    * Deletes the focal point values for the given file from the database.
-   *
-   * @param int $fid
    */
-  public function delete($fid) {
-    $this->flush($fid);
+  public function delete() {
+    $this->flush();
 
     db_delete('focal_point')
-      ->condition('fid', $fid)
+      ->condition('fid', $this->file->id())
       ->execute();
   }
 
@@ -162,12 +165,9 @@ class FocalPoint {
    * Implements \Drupal\focal_point\FocalPoint::flush().
    *
    * Flush all image derivatives for the given file.
-   *
-   * @param int $fid
    */
-  public function flush($fid) {
-    $file = File::load($fid);
-    image_path_flush($file->getFileUri());
+  public function flush() {
+    image_path_flush($this->file->getFileUri());
   }
 
   /**
diff --git a/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php b/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
index 8db4502..94aca09 100644
--- a/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
+++ b/src/Plugin/Field/FieldWidget/FocalPointImageWidget.php
@@ -10,6 +10,7 @@ namespace Drupal\focal_point\Plugin\Field\FieldWidget;
 use Drupal\focal_point\FocalPoint;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\image\Plugin\Field\FieldWidget\ImageWidget;
+use Drupal\file\Entity\File;
 
 /**
  * Plugin implementation of the 'image_fp' widget.
@@ -66,7 +67,10 @@ class FocalPointImageWidget extends ImageWidget {
       '#title' => 'Focal point',
       '#description' => t('Specify the focus of this image in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75'),
       '#default_value' => isset($item['focal_point']) ? $item['focal_point'] : FocalPoint::DEFAULT_VALUE,
-      '#element_validate' => array('\Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget::validateFocalPoint'),
+      //'#element_validate' => array('\Drupal\focal_point\Plugin\Field\FieldWidget\FocalPointImageWidget::validateFocalPoint'),
+      '#element_validate' => array(
+        array(get_called_class(), 'validateFocalPoint'),
+      ),
       '#attributes' => array(
         'class' => array('focal-point', 'focal-point-' . $element['#field_name'] . '-' . $element['#delta']),
         'data-delta' => $element['#delta'],
@@ -91,11 +95,20 @@ class FocalPointImageWidget extends ImageWidget {
     $return = parent::value($element, $input, $form_state);
 
     // When an element is loaded, focal_point needs to be set. During a form
-    // submission the value will already be there.
+    // submission the value will already be there. Note: This method gets called
+    // both when a form is rendered and again when the form is saved. The
+    // "focal_point" key will only exist when the form is being saved.
     if (!array_key_exists('focal_point', $return)) {
-      $element['#focal_point'] = new FocalPoint($return['target_id']);
-      $return['focal_point'] = $element['#focal_point']->getFocalPoint();
+      if (!empty($return['target_id'])) {
+        $file = File::load($return['target_id']);
+        $focal_point = new FocalPoint($file);
+        $return['focal_point'] = $focal_point->getFocalPoint();
+      }
+      else {
+        $return['focal_point'] = FocalPoint::DEFAULT_VALUE;
+      }
     }
+
     return $return;
   }
 
@@ -103,13 +116,36 @@ class FocalPointImageWidget extends ImageWidget {
    * {@inheritDocs}
    *
    * Validate callback for the focal point field.
+   * @todo : Here the focal points are saved when theres no error. Should be
+   * happening at another point after saving the file?
    */
   public static function validateFocalPoint($element, FormStateInterface $form_state) {
     $field_name = array_pop($element['#parents']);
-    $focal_point_value = $form_state->getValue($field_name);
+    $focal_point_value = $element['#value'];
+
+    // This is the value:
+    // $element['#value']
+
+    // This is the parent:
+    // $element['#array_parents'] //
+    // Field: $element['#array_parents'][0]
+    // index: $element['#array_parents'][2]
+
+    // Get the Values.
+    $state = $form_state->getValues();
+
+    // Check if the fid exists.
+    if(!empty($state[$element['#array_parents'][0]][$element['#array_parents'][2]]['fids'][0])) {
+      $fid = $state[$element['#array_parents'][0]][$element['#array_parents'][2]]['fids'][0];
+    }
 
     if (!is_null($focal_point_value) && !FocalPoint::validate($focal_point_value)) {
-      \Drupal::formBuilder()->setError($element, $form_state, t('The !title field should be in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75.', array('!title' => $element['#title'])));
+      $form_state->setError($element, $form_state, t('The !title field should be in the form "leftoffset,topoffset" where offsets are in percents. Ex: 25,75.', array('!title' => $element['#title'])));
+    } elseif (isset($fid)) {
+      // Save it.
+      $myfocalpoint = new FocalPoint(\Drupal\file\Entity\File::load($fid));
+      $myfocalpoint->setFocalPoint($element['#value']);
+      $myfocalpoint->save();
     }
   }
 
