diff --git a/fieldable_path.module b/fieldable_path.module
index 118c983..1313be1 100644
--- a/fieldable_path.module
+++ b/fieldable_path.module
@@ -6,29 +6,28 @@
  */
 
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\path_alias\PathAliasInterface;
 
 /**
- * Implements hook_path_insert().
+ * Implements hook_ENTITY_TYPE_insert() for 'path_alias' entities.
  */
-function fieldable_path_path_insert($path) {
-  \Drupal::service('fieldable_path.controller')
-    ->checkEntityAndSyncPath($path['source'], $path);
+function fieldable_path_path_alias_insert(PathAliasInterface $path_alias) {
+  \Drupal::service('fieldable_path.controller')->syncEntityPath($path_alias);
 }
 
 /**
- * Implements hook_path_update().
+ * Implements hook_ENTITY_TYPE_update() for 'path_alias' entities.
  */
-function fieldable_path_path_update($path) {
-  \Drupal::service('fieldable_path.controller')
-    ->checkEntityAndSyncPath($path['source'], $path);
+function fieldable_path_path_alias_update(PathAliasInterface $path_alias) {
+  \Drupal::service('fieldable_path.controller')->syncEntityPath($path_alias);
 }
 
 /**
- * Implements hook_path_delete().
+ * Implements hook_ENTITY_TYPE_delete() for 'path_alias' entities.
  */
-function fieldable_path_path_delete($path) {
+function fieldable_path_path_alias_delete(PathAliasInterface $path_alias) {
   \Drupal::service('fieldable_path.controller')
-    ->checkEntityAndSyncPath($path['source']);
+    ->syncEntityPath($path_alias, TRUE);
 }
 
 /**
diff --git a/src/Controller/FieldablePathController.php b/src/Controller/FieldablePathController.php
index 3c29f21..b5fbab6 100644
--- a/src/Controller/FieldablePathController.php
+++ b/src/Controller/FieldablePathController.php
@@ -2,40 +2,71 @@
 
 namespace Drupal\fieldable_path\Controller;
 
+use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Url;
 use Drupal\field\Entity\FieldConfig;
+use Drupal\path_alias\PathAliasInterface;
 
 /**
  * Defines class for main module logic.
  *
  * @package Drupal\fieldable_path\Controller
  */
-class FieldablePathController {
+class FieldablePathController extends ControllerBase {
 
   /**
-   * Finds entity for corresponding path and synchronizes values.
+   * Finds the entity for the given path and synchronizes values.
    *
-   * Updates path value of the 'fieldable_path' field
-   * of the entity of the path source.
+   * Updates path value of the 'fieldable_path' field of the entity of the path
+   * source.
    *
    * @param string $source
    *   Path source which is getting updated.
    *   Example: /node/1 or /user/123.
    * @param array $path
    *   Array with entity path information.
+   *
+   * @deprecated in fieldable_path:1.0.0 and is removed from
+   *   fieldable_path:2.0.0. Use static::syncEntityPath() instead.
+   *
+   * @see static::syncEntityPath()
    */
   public function checkEntityAndSyncPath($source, array $path = []) {
+    $path_info['path'] = $source;
+    if (!empty($path)) {
+      $remove = FALSE;
+      $path_info['alias'] = $path['alias'];
+      $path_info['langcode'] = $path['langcode'];
+    }
+    else {
+      $remove = TRUE;
+    }
+    $path_alias = $this->entityTypeManager()
+      ->getStorage('path_alias')->create($path_info);
+    $this->syncEntityPath($path_alias, $remove);
+  }
 
+  /**
+   * Finds the entity for the given path and synchronizes values.
+   *
+   * Updates path values of any 'fieldable_path' fields of the entity that the
+   * path source points to.
+   *
+   * @param Drupal\path_alias\PathAliasInterface $path_alias
+   *   The path alias entity to synchronize values for.
+   * @param bool $delete
+   *   TRUE if the path alias is being deleted. Defaults to FALSE.
+   */
+  public function syncEntityPath(PathAliasInterface $path_alias, bool $delete = FALSE) : void {
     // Check if current path source matches any entity.
-    $url = Url::fromUri('internal:' . $source);
+    $url = Url::fromUri('internal:' . $path_alias->getPath());
     if ($url->isRouted()) {
       $params = $url->getRouteParameters();
     }
 
-    // If there's no entity matching the route then we
-    // do nothing.
+    // If there's no entity matching the route then we do nothing.
     if (empty($params)) {
       return;
     }
@@ -43,7 +74,7 @@ class FieldablePathController {
     // Load entity from the path source.
     $param_keys = array_keys($params);
     $entity_type = array_pop($param_keys);
-    $entity = \Drupal::entityTypeManager()
+    $entity = $this->entityTypeManager()
       ->getStorage($entity_type)
       ->load($params[$entity_type]);
 
@@ -61,13 +92,14 @@ class FieldablePathController {
       return;
     }
 
-    // Make sure the current entity contains the path field,  otherwise there's
+    // Make sure the current entity contains the path field, otherwise there's
     // nothing to do.
     if (!$entity->hasField('path')) {
       return;
     }
 
-    $this->updateFieldablePath($entity, $path);
+    $path_info = $delete ? [] : ['alias' => $path_alias->getAlias()];
+    $this->updateFieldablePath($entity, $path_info);
   }
 
   /**
