diff --git a/src/ConfigRewriter.php b/src/ConfigRewriter.php
index d34caee..16b8d53 100644
--- a/src/ConfigRewriter.php
+++ b/src/ConfigRewriter.php
@@ -102,43 +102,65 @@ class ConfigRewriter implements ConfigRewriterInterface {
     if (file_exists($rewrite_dir) && $files = $this->fileScanDirectory($rewrite_dir, '/^.*\.yml$/i', ['recurse' => FALSE])) {
       foreach ($files as $file) {
         // Parse the rewrites and retrieve the original config.
-        $rewrite = Yaml::parse(file_get_contents($rewrite_dir . DIRECTORY_SEPARATOR . $file->name . '.yml'));
+        $rewrite_data = Yaml::parse(file_get_contents($rewrite_dir . DIRECTORY_SEPARATOR . $file->name . '.yml'));
         if ($langcode) {
           /** @var \Drupal\language\Config\LanguageConfigOverride $original_config */
           $config = $this->languageConfigFactoryOverride->getOverride($langcode, $file->name);
           $original_data = $config->get();
-          $rewrite = $this->rewriteConfig($original_data, $rewrite);
         }
         else {
           $config = $this->configFactory->getEditable($file->name);
           $original_data = $config->getRawData();
-          $rewrite = $this->rewriteConfig($original_data, $rewrite);
         }
 
-        // Unset 'config_rewrite' key before saving rewritten values.
-        if (isset($rewrite['config_rewrite'])) {
-          unset($rewrite['config_rewrite']);
+        // Set the config changes based on new data from parsed rewrites.
+        if (!empty($original_data) && ($rewrite_data != $original_data)) {
+          $rewrite = $this->rewriteConfig($original_data, $rewrite_data);
         }
-
-        // Retain the original 'uuid' and '_core' keys if it's not explicitly
-        // asked to rewrite them.
-        if (isset($rewrite['config_rewrite_uuids'])) {
-          unset($rewrite['config_rewrite_uuids']);
+        elseif($rewrite_data == $original_data) {
+          $this->logger->notice('@config has no changes to write.', ['@config' => $file->name]);
         }
-        else {
-          foreach (['_core', 'uuid'] as $key) {
-            if (isset($original_data[$key])) {
-              $rewrite[$key] = $original_data[$key];
+        elseif(empty($original_data)) {
+          $this->logger->notice('@config does not exist to rewrite.', ['@config' => $file->name]);
+        }
+
+        // Save the rewritten configuration data (or don't).
+        if (isset($rewrite)) {
+          // Unset 'config_rewrite' key before saving rewritten values.
+          if (isset($rewrite['config_rewrite'])) {
+            unset($rewrite['config_rewrite']);
+          }
+
+          // Retain the original 'uuid' and '_core' keys if it's not explicitly
+          // asked to rewrite them.
+          if (isset($rewrite['config_rewrite_uuids'])) {
+            unset($rewrite['config_rewrite_uuids']);
+          }
+          else {
+            foreach (['_core', 'uuid'] as $key) {
+              if (isset($original_data[$key])) {
+                $rewrite[$key] = $original_data[$key];
+              }
             }
           }
-        }
 
-        // Save the rewritten configuration data.
-        $result = $config->setData($rewrite)->save() ? 'rewritten' : 'not rewritten';
+          // Attempt to save the configuration rewrite.
+          $result = $config->setData($rewrite)->save() ? 'rewritten' : 'not rewritten';
+
+          // Log a message indicating whether the config rewrite was saved or not.
+          $log = $langcode ? '@config (@langcode) @result by @module' : '@config @result by @module';
+          $this->logger->notice($log, [
+            '@config' => $file->name,
+            '@result' => $result,
+            '@module' => $extension->getName()
+          ]);
 
-        // Log a message indicating whether the config was rewritten or not.
-        $log = $langcode ? '@config (@langcode) @result by @module' : '@config @result by @module';
-        $this->logger->notice($log, ['@config' => $file->name, '@result' => $result, '@module' => $extension->getName()]);
+          // Do not retain previous rewrites in the next iteration of our loop.
+          unset($rewrite);
+        }
+        else {
+          $this->logger->notice('@config was not rewritten', ['@config' => $file->name]);
+        }
       }
     }
   }
diff --git a/tests/modules/config_rewrite_test_rewrite/config/rewrite/user.role.test5.yml b/tests/modules/config_rewrite_test_rewrite/config/rewrite/user.role.test5.yml
new file mode 100644
index 0000000..c96c41f
--- /dev/null
+++ b/tests/modules/config_rewrite_test_rewrite/config/rewrite/user.role.test5.yml
@@ -0,0 +1,9 @@
+langcode: en
+status: true
+dependencies: {  }
+id: test5
+label: "Test 5 'replaces' nothing and should not import!"
+weight: 0
+is_admin: false
+permissions:
+  - 'change own username'
diff --git a/tests/src/Kernel/ConfigRewriteTest.php b/tests/src/Kernel/ConfigRewriteTest.php
index 7144f8f..350857f 100644
--- a/tests/src/Kernel/ConfigRewriteTest.php
+++ b/tests/src/Kernel/ConfigRewriteTest.php
@@ -133,6 +133,10 @@ class ConfigRewriteTest extends KernelTestBase {
     ];
     $user_role = $this->languageConfigFactoryOverride->getOverride('fr', 'user.role.test4')->get();
     $this->assertEquals($user_role['label'], $expected_rewritten_data['label']);
+
+   // Test for non-existing config being accidentally written by a "rewrite."
+   $this->assertFalse($this->activeConfigStorage->read('user.role.test5'));
+
   }
 
 }
