diff --git a/pathauto.install b/pathauto.install
index 4c507d8..3f9480c 100644
--- a/pathauto.install
+++ b/pathauto.install
@@ -8,10 +8,12 @@
  */
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Plugin\Context\Context;
 use Drupal\Core\Plugin\Context\ContextDefinition;
 use Drupal\pathauto\Entity\PathautoPattern;
 
+
 /**
  * Implements hook_install().
  */
@@ -21,6 +23,57 @@ function pathauto_install() {
 
   // Ensure the url_alias table exists.
   _pathauto_ensure_url_alias_table_exists();
+
+  // Ensure installing the module does not produce entity field definition
+  // warnings.
+  _pathauto_fix_field_definitions();
+}
+
+/**
+ * Fixes field definitions altered by pathauto_entity_base_field_info_alter().
+ *
+ * @see pathauto_entity_base_field_info_alter()
+ */
+function _pathauto_fix_field_definitions() {
+  $update_manager = \Drupal::entityDefinitionUpdateManager();
+  $field_manager = \Drupal::service('entity_field.manager');
+  $entity_schema = \Drupal::service('entity.last_installed_schema.repository');
+  \Drupal::entityManager()->useCaches(FALSE);
+  foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type_id => $entity_type) {
+    if ($entity_type->isSubclassOf(FieldableEntityInterface::class)) {
+      $storage_definitions = $field_manager->getFieldStorageDefinitions($entity_type_id);
+      $original_storage_definitions = $entity_schema->getLastInstalledFieldStorageDefinitions($entity_type_id);
+
+      if (!isset($storage_definitions['path']) && isset($original_storage_definitions['path'])) {
+        // Need to delete the path field definition.
+        $update_manager->uninstallFieldStorageDefinition($original_storage_definitions['path']);
+      }
+      if (isset($storage_definitions['path']) && !isset($original_storage_definitions['path'])) {
+        // Need to create the path field definition.
+        $update_manager->installFieldStorageDefinition('path', $entity_type_id, $storage_definitions['path']->getProvider(), $storage_definitions['path']);
+      }
+    }
+  }
+  \Drupal::entityManager()->useCaches(TRUE);
+}
+
+function _pathauto_is_uninstalling($is_uninstalling = NULL) {
+  static $state;
+  if (is_bool($is_uninstalling)) {
+    $state = $is_uninstalling;
+  }
+  return $state;
+}
+
+/**
+ * Implements hook_uninstall().
+ *
+ * @see pathauto_entity_base_field_info_alter()
+ */
+function pathauto_uninstall() {
+  _pathauto_is_uninstalling(TRUE);
+  _pathauto_fix_field_definitions();
+  _pathauto_is_uninstalling(FALSE);
 }
 
 /**
@@ -301,3 +354,10 @@ function pathauto_update_8106() {
   $config->set('enabled_entity_types', ['user']);
   $config->save();
 }
+
+/**
+ * Fix incorrect entity field defintion update errors.
+ */
+function pathauto_update_8107() {
+  _pathauto_fix_field_definitions();
+}
diff --git a/pathauto.module b/pathauto.module
index 71e8982..ed372c3 100644
--- a/pathauto.module
+++ b/pathauto.module
@@ -169,6 +169,9 @@ function pathauto_entity_base_field_info(EntityTypeInterface $entity_type) {
  */
 function pathauto_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
   if (isset($fields['path'])) {
+    if (function_exists('_pathauto_is_uninstalling') && _pathauto_is_uninstalling()) {
+      return;
+    }
     // Path fields need to be computed so that the pathauto state can be
     // accessed even if there is no alias being set.
     $fields['path']->setComputed(TRUE);
diff --git a/src/Tests/PathautoInstallUninstallTest.php b/src/Tests/PathautoInstallUninstallTest.php
new file mode 100644
index 0000000..7d6459d
--- /dev/null
+++ b/src/Tests/PathautoInstallUninstallTest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Drupal\pathauto\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Test installing and uninstalling pathauto.
+ *
+ * @group pathauto
+ */
+class PathautoInstallUninstallTest extends WebTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = array('node', 'taxonomy');
+
+  /**
+   * Tests that installing and uninstalling don't cause status report errors.
+   */
+  public function testInstallUninstall() {
+    $this->container->get('module_installer')->install(['pathauto']);
+    $this->assertIdentical([], \Drupal::entityDefinitionUpdateManager()->getChangeSummary(), 'There are no entity definition updates after installing pathauto.');
+    $this->container->get('module_installer')->uninstall(['pathauto']);
+    $this->assertIdentical([], \Drupal::entityDefinitionUpdateManager()->getChangeSummary(), 'There are no entity definition updates after uninstalling pathauto.');
+  }
+
+}
