diff --git a/core/lib/Drupal/Core/Path/Path.php b/core/lib/Drupal/Core/Path/Path.php
index 4a3410f..902c937 100644
--- a/core/lib/Drupal/Core/Path/Path.php
+++ b/core/lib/Drupal/Core/Path/Path.php
@@ -56,6 +56,9 @@ public function __construct(Connection $connection, AliasManager $alias_manager)
    * @param int $pid
    *   Unique path alias identifier.
    *
+   * @param array $options
+   *   Additional options to be passed on to hook implementations.
+   *
    * @return
    *   FALSE if the path could not be saved or an associative array containing
    *   the following keys:
@@ -64,7 +67,7 @@ public function __construct(Connection $connection, AliasManager $alias_manager)
    *   - pid: Unique path alias identifier.
    *   - langcode: The language code of the alias.
    */
-  public function save($source, $alias, $langcode = Language::LANGCODE_NOT_SPECIFIED, $pid = NULL) {
+  public function save($source, $alias, $langcode = Language::LANGCODE_NOT_SPECIFIED, $pid = NULL, $options = array()) {
 
     $fields = array(
       'source' => $source,
@@ -92,7 +95,7 @@ public function save($source, $alias, $langcode = Language::LANGCODE_NOT_SPECIFI
     }
     if ($pid) {
       // @todo Switch to using an event for this instead of a hook.
-      module_invoke_all($hook, $fields);
+      module_invoke_all($hook, $fields, $options);
       $this->alias_manager->cacheClear();
       return $fields;
     }
diff --git a/core/modules/path/path.api.php b/core/modules/path/path.api.php
index c69b97d..828a6aa 100644
--- a/core/modules/path/path.api.php
+++ b/core/modules/path/path.api.php
@@ -20,15 +20,20 @@
  *   - pid: Unique path alias identifier.
  *   - langcode: The language code of the alias.
  *
+ * @param array $options
+ *   An associative array containing miscellaneous related information.
+ *
  * @see \Drupal\Core\Path\Path::save()
  */
-function hook_path_insert($path) {
-  db_insert('mytable')
-    ->fields(array(
-      'alias' => $path['alias'],
-      'pid' => $path['pid'],
-    ))
-    ->execute();
+function hook_path_insert($path, $options = array()) {
+  if ($path['alias'] != $options['original_alias']) {
+    db_insert('mytable')
+      ->fields(array(
+        'alias' => $path['alias'],
+        'pid' => $path['pid'],
+      ))
+      ->execute();
+  }
 }
 
 /**
@@ -41,13 +46,18 @@ function hook_path_insert($path) {
  *   - pid: Unique path alias identifier.
  *   - langcode: The language code of the alias.
  *
+ * @param array $options
+ *   An associative array containing miscellaneous related information.
+ *
  * @see \Drupal\Core\Path\Path::save()
  */
-function hook_path_update($path) {
-  db_update('mytable')
-    ->fields(array('alias' => $path['alias']))
-    ->condition('pid', $path['pid'])
-    ->execute();
+function hook_path_update($path, $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/lib/Drupal/system/Tests/Path/AliasTest.php b/core/modules/system/lib/Drupal/system/Tests/Path/AliasTest.php
index 37cc3e6..6079c04 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Path/AliasTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Path/AliasTest.php
@@ -17,6 +17,8 @@
  */
 class AliasTest extends PathUnitTestBase {
 
+  public static $modules = array('path_test');
+
   public static function getInfo() {
     return array(
       'name' => t('Path Alias Unit Tests'),
@@ -39,7 +41,14 @@ function testCRUD() {
 
     //Create a few aliases
     foreach ($aliases as $idx => $alias) {
-      $path->save($alias['source'], $alias['alias'], $alias['langcode']);
+      if (isset($alias['options'])) {
+        $options = $alias['options'];
+      }
+      else {
+        $options = array();
+      }
+      $path->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();
@@ -50,10 +59,19 @@ 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 = $path->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/lib/Drupal/system/Tests/Path/UrlAliasFixtures.php b/core/modules/system/lib/Drupal/system/Tests/Path/UrlAliasFixtures.php
index a51e3bf..17d4381 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Path/UrlAliasFixtures.php
+++ b/core/modules/system/lib/Drupal/system/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 6f4d580..e1a0d1c 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, $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, $options = array()) {
   $results = Drupal::state()->get('path_test.results') ?: array();
   $results['hook_path_update'] = $path;
   Drupal::state()->set('path_test.results', $results);
