diff --git a/core/lib/Drupal/Core/Path/AliasStorage.php b/core/lib/Drupal/Core/Path/AliasStorage.php
index b405a25..3c20996 100644
--- a/core/lib/Drupal/Core/Path/AliasStorage.php
+++ b/core/lib/Drupal/Core/Path/AliasStorage.php
@@ -46,7 +46,7 @@ public function __construct(Connection $connection, ModuleHandlerInterface $modu
   /**
    * {@inheritdoc}
    */
-  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL) {
+  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL, array $options = array()) {
 
     $fields = array(
       'source' => $source,
@@ -72,7 +72,7 @@ public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NO
     }
     if ($pid) {
       // @todo Switch to using an event for this instead of a hook.
-      $this->moduleHandler->invokeAll('path_' . $operation, array($fields));
+      $this->moduleHandler->invokeAll('path_' . $operation, array($fields, $options));
       return $fields;
     }
     return FALSE;
diff --git a/core/lib/Drupal/Core/Path/AliasStorageInterface.php b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
index a98600f..d6edb21 100644
--- a/core/lib/Drupal/Core/Path/AliasStorageInterface.php
+++ b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
@@ -25,6 +25,8 @@
    *   The language code of the alias.
    * @param int|null $pid
    *   Unique path alias identifier.
+   * @param array $options
+   *   Additional options to be passed on to hook implementations.
    *
    * @return mixed[]|bool
    *   FALSE if the path could not be saved or an associative array containing
@@ -34,7 +36,7 @@
    *   - pid (int): Unique path alias identifier.
    *   - langcode (string): The language code of the alias.
    */
-  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL);
+  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL, array $options = array());
 
   /**
    * Fetches a specific URL alias from the database.
diff --git a/core/modules/path/path.api.php b/core/modules/path/path.api.php
index 478fc6f..5e16da1 100644
--- a/core/modules/path/path.api.php
+++ b/core/modules/path/path.api.php
@@ -16,16 +16,20 @@
  * @param array $path
  *   The array structure is identical to that of the return value of
  *   \Drupal\Core\Path\PathInterface::save().
+ * @param array $options
+ *   An associative array containing miscellaneous related information.
  *
- * @see \Drupal\Core\Path\PathInterface::save()
+ * @see \Drupal\Core\Path\AliasStorageInterface::save()
  */
-function hook_path_insert($path) {
-  db_insert('mytable')
-    ->fields(array(
-      'alias' => $path['alias'],
-      'pid' => $path['pid'],
-    ))
-    ->execute();
+function hook_path_insert($path, array $options = array()) {
+  if ($path['alias'] != $options['original_alias']) {
+    db_insert('mytable')
+      ->fields(array(
+        'alias' => $path['alias'],
+        'pid' => $path['pid'],
+      ))
+      ->execute();
+  }
 }
 
 /**
@@ -34,14 +38,18 @@ function hook_path_insert($path) {
  * @param $path
  *   The array structure is identical to that of the return value of
  *   \Drupal\Core\Path\PathInterface::save().
+ * @param array $options
+ *   An associative array containing miscellaneous related information.
  *
- * @see \Drupal\Core\Path\PathInterface::save()
+ * @see \Drupal\Core\Path\AliasStorageInterface::save()
  */
-function hook_path_update($path) {
-  db_update('mytable')
-    ->fields(array('alias' => $path['alias']))
-    ->condition('pid', $path['pid'])
-    ->execute();
+function hook_path_update($path, array $options = array()) {
+  if ($path['alias'] != $options['original_alias']) {
+    db_update('mytable')
+      ->fields(array('alias' => $path['alias']))
+      ->condition('pid', $path['pid'])
+      ->execute();
+  }
 }
 
 /**
diff --git a/core/modules/system/src/Tests/Path/AliasTest.php b/core/modules/system/src/Tests/Path/AliasTest.php
index 3617c00..0aa3314 100644
--- a/core/modules/system/src/Tests/Path/AliasTest.php
+++ b/core/modules/system/src/Tests/Path/AliasTest.php
@@ -38,7 +38,14 @@ function testCRUD() {
 
     //Create a few aliases
     foreach ($aliases as $idx => $alias) {
-      $aliasStorage->save($alias['source'], $alias['alias'], $alias['langcode']);
+      if (isset($alias['options'])) {
+        $options = $alias['options'];
+      }
+      else {
+        $options = array();
+      }
+      $aliasStorage->save($alias['source'], $alias['alias'], $alias['langcode'], NULL, $options);
+
 
       $result = $connection->query('SELECT * FROM {url_alias} WHERE source = :source AND alias= :alias AND langcode = :langcode', array(':source' => $alias['source'], ':alias' => $alias['alias'], ':langcode' => $alias['langcode']));
       $rows = $result->fetchAll();
@@ -49,10 +56,20 @@ function testCRUD() {
       $aliases[$idx]['pid'] = $rows[0]->pid;
     }
 
+    // See if the alias_for_node_2_fr alias has been skipped by the insert hook.
+    $hook_results = \Drupal::state()->get('path_test.results');
+    foreach ($hook_results['hook_path_insert'] as $alias) {
+      if ($alias['alias'] == 'alias_for_node_2_fr') {
+        $this->fail('hook_path_insert failed to use the skip_log option');
+      }
+    }
+
+
     //Load a few aliases
     foreach ($aliases as $alias) {
       $pid = $alias['pid'];
       $loadedAlias = $aliasStorage->load(array('pid' => $pid));
+      unset($alias['options']);
       $this->assertEqual($loadedAlias, $alias, format_string('Loaded the expected path with pid %pid.', array('%pid' => $pid)));
     }
 
diff --git a/core/modules/system/src/Tests/Path/UrlAliasFixtures.php b/core/modules/system/src/Tests/Path/UrlAliasFixtures.php
index 777ffb1..df63b10 100644
--- a/core/modules/system/src/Tests/Path/UrlAliasFixtures.php
+++ b/core/modules/system/src/Tests/Path/UrlAliasFixtures.php
@@ -66,6 +66,14 @@ public function sampleUrlAliases() {
         'source' => 'node/1',
         'alias' => 'alias_for_node_1_und',
         'langcode' => 'und'
+      ),
+      array(
+        'source' => 'node/2',
+        'alias' => 'alias_for_node_2_fr',
+        'langcode' => 'fr',
+        'options' => array(
+          'skip_log' => TRUE
+        )
       )
     );
   }
diff --git a/core/modules/system/tests/modules/path_test/path_test.module b/core/modules/system/tests/modules/path_test/path_test.module
index df03931..e91d910 100644
--- a/core/modules/system/tests/modules/path_test/path_test.module
+++ b/core/modules/system/tests/modules/path_test/path_test.module
@@ -13,9 +13,20 @@ function path_test_reset() {
 }
 
 /**
+ * Implements hook_path_insert().
+ */
+function path_test_path_insert($path, array $options = array()) {
+  if (empty($options['skip_log'])) {
+    $results = Drupal::state()->get('path_test.results') ?: array();
+    $results['hook_path_insert'][] = $path;
+    Drupal::state()->set('path_test.results', $results);
+  }
+}
+
+/**
  * Implements hook_path_update().
  */
-function path_test_path_update($path) {
+function path_test_path_update($path, array $options = array()) {
   $results = \Drupal::state()->get('path_test.results') ?: array();
   $results['hook_path_update'] = $path;
   \Drupal::state()->set('path_test.results', $results);
