diff --git a/domain_path.module b/domain_path.module
index cb9a3a8..987fcb8 100644
--- a/domain_path.module
+++ b/domain_path.module
@@ -33,7 +33,7 @@ function domain_path_domain_path($domain_id, &$path, &$options, $original_path)
   $alias = $path;
   $paths = domain_path_paths('alias');
   if (isset($paths[$path][$did])) {
-    $alias = $paths[$path][$did];
+    $alias = $paths[$path][$did]->source;
     $nid = arg(1, $alias);
   }
   else {
@@ -46,8 +46,8 @@ function domain_path_domain_path($domain_id, &$path, &$options, $original_path)
     return;
   }
   $paths = domain_path_paths('nid', $nid);
-  if (isset($paths[$domain_id])) {
-    $path = $paths[$domain_id];
+  if (isset($paths[$domain_id]->alias)) {
+    $path = $paths[$domain_id]->alias;
   }
   else {
     $path = drupal_get_path_alias($alias);
@@ -62,10 +62,10 @@ function domain_path_url_inbound_alter(&$path, $original_path, $path_language) {
   $domain = domain_get_domain();
   $did = $domain['domain_id'];
   $paths = domain_path_paths('alias');
-  if (!isset($paths[$original_path][$did])) {
+  if (!isset($paths[$original_path][$did]->source)) {
     return;
   }
-  $path = $paths[$original_path][$did];
+  $path = $paths[$original_path][$did]->source;
 }
 
 /**
@@ -119,10 +119,10 @@ function domain_path_paths($key = 'nid', $nid = NULL) {
       $paths = array('nid' => array(), 'alias' => array());
       // TODO: better handling for different entities.
       // TODO: Language support!
-      $result = db_query("SELECT domain_id, source, alias, language, entity_type, entity_id FROM {domain_path} WHERE entity_type = 'node'");
+      $result = db_query("SELECT dpid, domain_id, source, alias, language, entity_type, entity_id FROM {domain_path} WHERE entity_type = 'node'");
       foreach ($result as $path) {
-        $paths['nid'][$path->entity_id][$path->domain_id] = $path->alias;
-        $paths['alias'][$path->alias][$path->domain_id] = $path->source;
+        $paths['nid'][$path->entity_id][$path->domain_id] = $path;
+        $paths['alias'][$path->alias][$path->domain_id] = $path;
       }
       // Cache for performance.
       // TODO: test.
@@ -182,10 +182,17 @@ function domain_path_form_node_form_alter(&$form, $form_state) {
     $default = '';
     // TODO: Only exposed checked domains?
     $form['domain_path'][$domain_id] = array(
+      '#type' => 'container',
+      '#access' => user_access('edit domain paths'),
+    );
+    $form['domain_path'][$domain_id]['alias'] = array(
       '#type' => 'textfield',
       '#title' => check_plain($domain['path']),
-      '#default_value' => isset($paths[$domain_id]) ? $paths[$domain_id] : $default,
-      '#access' => user_access('edit domain paths'),
+      '#default_value' => isset($paths[$domain_id]->alias) ? $paths[$domain_id]->alias : $default,
+    );
+    $form['domain_path'][$domain_id]['dpid'] = array(
+      '#type' => 'value',
+      '#value' => isset($paths[$domain_id]->dpid) ? $paths[$domain_id]->dpid : NULL,
     );
   }
 }
@@ -205,11 +212,11 @@ function domain_path_node_validate($node, $form, $form_state) {
   // Make sure we don't duplicate anything.
   foreach ($paths as $domain_id => $path) {
     $key = ($domain_id == -1) ? 0 : $domain_id;
-    if (!empty($path) && $path == $alias) {
+    if (!empty($path['alias']) && $path['alias'] == $alias) {
       form_set_error("domain_path][$key", t('Domain path may not match default path alias. You may leave the element blank.'));
       $set_message = TRUE;
     }
-    elseif (!empty($path)) {
+    elseif (!empty($path['alias'])) {
       $query = db_query("SELECT COUNT(dpid) FROM {domain_path} 
         WHERE domain_id = :domain_id 
         AND alias = :alias 
@@ -217,7 +224,7 @@ function domain_path_node_validate($node, $form, $form_state) {
         AND source != :source", 
         array(
           ':domain_id' => $key,
-          ':alias' => $path,
+          ':alias' => $path['alias'],
           ':language' => isset($node->language) ? $node->language : LANGUAGE_NONE,
           ':source' => "node/$node->nid",
         )
@@ -286,25 +293,42 @@ function domain_path_node_insert($node) {
   if (empty($node->domain_path)) {
     return;
   }
-  // Delete existing aliases.
-  domain_path_node_delete($node);
   // If not set to revert, then save changes.
   if (empty($node->domain_path['domain_path_ignore'])) {
     unset($node->domain_path['domain_path_ignore']);
     foreach ($node->domain_path as $domain_id => $path) {
-      if (!empty($path)) {
+      if (!empty($path['alias'])) {
+        // Save the {domain_path} record.
+        $primary_keys = array();
         $record = array(
           'domain_id' => $domain_id,
           'source' => "node/$node->nid",
-          'alias' => $path,
+          'alias' => $path['alias'],
           'language' => isset($node->language) ? $node->language : LANGUAGE_NONE,
           'entity_type' => 'node',
           'entity_id' => $node->nid,
         );
-        drupal_write_record('domain_path', $record);
+        if (!empty($path['dpid'])) {
+          // Update the existing record.
+          $record['dpid'] = $path['dpid'];
+          $primary_keys[] = 'dpid';
+        }
+        drupal_write_record('domain_path', $record, $primary_keys);
+      }
+      elseif (!empty($path['dpid'])) {
+        // Delete an existing alias record if alias value is empty.
+        db_delete('domain_path')
+          ->condition('entity_type', 'node')
+          ->condition('entity_id', $node->nid)
+          ->condition('dpid', $path['dpid'])
+          ->execute();
       }
     }
   }
+  else {
+    // Delete all existing aliases for the node.
+    domain_path_node_delete($node);
+  }
   // Rebuild the node alias.
   cache_clear_all('domain_path', 'cache');
   drupal_static_reset('domain_path_paths');
