diff --git a/src/DefaultContentManager.php b/src/DefaultContentManager.php
index 40acca2..bc24c2d 100644
--- a/src/DefaultContentManager.php
+++ b/src/DefaultContentManager.php
@@ -7,6 +7,8 @@ use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Core\Entity\RevisionableInterface;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Extension\InfoParserInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -118,7 +120,7 @@ class DefaultContentManager implements DefaultContentManagerInterface {
    *   The serializer service.
    * @param \Drupal\rest\Plugin\Type\ResourcePluginManager $resource_plugin_manager
    *   The rest resource plugin manager.
-   * @param \Drupal\Core\Session|AccountInterface $current_user
+   * @param \Drupal\Core\Session\AccountInterface $current_user
    *   The current user.
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager
    *   The entity type manager service.
@@ -147,7 +149,7 @@ class DefaultContentManager implements DefaultContentManagerInterface {
   /**
    * {@inheritdoc}
    */
-  public function importContent($module) {
+  public function importContent($module, $update_existing = FALSE) {
     $created = array();
     $folder = drupal_get_path('module', $module) . "/content";
 
@@ -219,9 +221,28 @@ class DefaultContentManager implements DefaultContentManagerInterface {
           $contents = $this->parseFile($file);
           $class = $definition['serialization_class'];
           $entity = $this->serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
-          $entity->enforceIsNew(TRUE);
-          $entity->save();
-          $created[$entity->uuid()] = $entity;
+          $is_new = TRUE;
+
+          // Allow existing entities overwrite.
+          if ($old_entity = $this->entityRepository->loadEntityByUuid($entity_type_id, $entity->uuid())) {
+            $is_new = FALSE;
+            $original_id = $old_entity->id();
+            $entity->{$entity->getEntityType()->getKey('id')} = $original_id;
+            if ($this->isRevisionableEntity($entity)) {
+              $original_revision = $old_entity->getRevisionId();
+              $entity->{$entity->getEntityType()->getKey('revision')} = $original_revision;
+            }
+          }
+
+          !$is_new ? $entity->setOriginalId($original_id) : $entity->enforceIsNew($is_new);
+          if ($this->isRevisionableEntity($entity)) {
+            $entity->setNewRevision($is_new);
+          }
+
+          if (!$old_entity || $update_existing) {
+            $entity->save();
+            $created[$entity->uuid()] = $entity;
+          }
         }
       }
       $this->eventDispatcher->dispatch(DefaultContentEvents::IMPORT, new ImportEvent($created, $module));
@@ -234,6 +255,19 @@ class DefaultContentManager implements DefaultContentManagerInterface {
   }
 
   /**
+   * Checks a given entity for revision support.
+   *
+   * @param EntityInterface $entity
+   *   A typical drupal entity object.
+   *
+   * @return bool
+   *   Whether this entity supports revisions.
+   */
+  public function isRevisionableEntity(EntityInterface $entity) {
+    return $entity instanceof RevisionableInterface && $entity->getEntityType()->isRevisionable();
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function exportContent($entity_type_id, $entity_id) {
diff --git a/src/DefaultContentManagerInterface.php b/src/DefaultContentManagerInterface.php
index fdf67a9..9c63f22 100644
--- a/src/DefaultContentManagerInterface.php
+++ b/src/DefaultContentManagerInterface.php
@@ -20,11 +20,13 @@ interface DefaultContentManagerInterface {
    *
    * @param string $module
    *   The module to create the default content for.
+   * @param bool $update_existing
+   *   (optional) Force updating existing entities. Defaults to FALSE.
    *
    * @return array[\Drupal\Core\Entity\EntityInterface]
    *   The created entities.
    */
-  public function importContent($module);
+  public function importContent($module, $update_existing = FALSE);
 
   /**
    * Exports a single entity as importContent expects it.
diff --git a/tests/modules/default_content_test/default_content_test.info.yml b/tests/modules/default_content_test/default_content_test.info.yml
index 769898e..bf2339d 100644
--- a/tests/modules/default_content_test/default_content_test.info.yml
+++ b/tests/modules/default_content_test/default_content_test.info.yml
@@ -6,3 +6,7 @@ package: Web services
 core: 8.x
 dependencies:
   - default_content
+
+default_content:
+  node:
+    - 0e45d92f-1919-47cd-8b60-964a8a761292
diff --git a/tests/src/Functional/DefaultContentTest.php b/tests/src/Functional/DefaultContentTest.php
index caeaf15..5495e40 100644
--- a/tests/src/Functional/DefaultContentTest.php
+++ b/tests/src/Functional/DefaultContentTest.php
@@ -39,6 +39,7 @@ class DefaultContentTest extends BrowserTestBase {
     $this->drupalLogin($this->drupalCreateUser(array_keys(\Drupal::moduleHandler()->invokeAll(('permission')))));
     // Enable the module and import the content.
     \Drupal::service('module_installer')->install(array('default_content_test'), TRUE);
+
     $this->rebuildContainer();
     $node = $this->getNodeByTitle('Imported node');
     $this->assertEquals($node->body->value, 'Crikey it works!');
@@ -51,4 +52,34 @@ class DefaultContentTest extends BrowserTestBase {
     $this->assertTrue(!empty($term_id), 'Term reference populated');
   }
 
+  /**
+   * Test re-importing default content.
+   */
+  public function testReImport() {
+    // Login as admin.
+    $this->drupalLogin($this->drupalCreateUser(array_keys(\Drupal::moduleHandler()->invokeAll(('permission')))));
+
+    // Enable the module and import the content.
+    \Drupal::service('module_installer')->install(['default_content_test'], TRUE);
+    $this->rebuildContainer();
+    $original_nodes = \Drupal::entityTypeManager()->getListBuilder('node')->getStorage()->loadByProperties(['type' => 'page']);
+
+    // Change the node content.
+    $node = $this->getNodeByTitle('Imported node');
+    $node->title = 'Updated node';
+    $node->save();
+
+    // Re-import the content and check there are no changes.
+    \Drupal::service('default_content.manager')->importContent('default_content_test');
+    $new_nodes = \Drupal::entityTypeManager()->getListBuilder('node')->getStorage()->loadByProperties(['type' => 'page']);
+    $this->assertSame(array_keys($new_nodes), array_keys($original_nodes), 'No new content has been imported.');
+    $node = $this->getNodeByTitle('Imported node');
+    $this->assertEmpty($node, "Imported content has not been updated.");
+
+    // Re-import the content and check the content has been updated.
+    \Drupal::service('default_content.manager')->importContent('default_content_test', TRUE);
+    $node = $this->getNodeByTitle('Imported node');
+    $this->assertNotEmpty($node, "Imported content has been updated.");
+  }
+
 }
