diff --git a/domain.module b/domain.module
index 2d49d23..e6034f4 100644
--- a/domain.module
+++ b/domain.module
@@ -2052,7 +2052,7 @@ function domain_node_access_records($node) {
   }
 
   // Store our records in the {domain_access} table.
-  _domain_store_grants($node->nid, $grants);
+  _domain_store_grants($node->nid, $grants, !$node->is_new);
 
   return $grants;
 }
@@ -2064,13 +2064,18 @@ function domain_node_access_records($node) {
  *   The node id being acted upon.
  * @param $grants
  *   The grants passed by hook_node_access_records().
+ * @param $delete
+ *   Whether to delete existing node access records before inserting new ones.
+ *   Defaults to TRUE.
  */
-function _domain_store_grants($nid, $grants = array()) {
+function _domain_store_grants($nid, $grants = array(), $delete = TRUE) {
   // Store the grants records.
   if ($nid > 0 && !empty($grants)) {
-    db_delete('domain_access')
-      ->condition('nid', $nid)
-      ->execute();
+    if ($delete) {
+      db_delete('domain_access')
+        ->condition('nid', $nid)
+        ->execute();
+    }
     $values = array();
     foreach ($grants as $grant) {
       $values[] = array(
diff --git a/domain_source/domain_source.module b/domain_source/domain_source.module
index 4ec6298..342d5dc 100644
--- a/domain_source/domain_source.module
+++ b/domain_source/domain_source.module
@@ -206,7 +206,9 @@ function domain_source_node_insert($node) {
   if (!isset($node->domain_source) || is_null($node->domain_source)) {
     return;
   }
-  domain_source_node_delete($node);
+  if (!$node->is_new) {
+    domain_source_node_delete($node);
+  }
   db_insert('domain_source')
     ->fields(array(
       'nid' => $node->nid,
