diff --git a/includes/node_form.inc b/includes/node_form.inc
index a02601c..c3be37e 100644
--- a/includes/node_form.inc
+++ b/includes/node_form.inc
@@ -64,9 +64,15 @@ function signup_save_node($node, $op) {
   }
 
   if ($needs_defaults) {
-    $values = db_fetch_array(db_query("SELECT forwarding_email, send_confirmation, confirmation_email, close_signup_limit, send_reminder, reminder_days_before, reminder_email FROM {signup} WHERE nid = 0"));
-    $values[] = $node->nid;
-    db_query("INSERT INTO {signup} (forwarding_email, send_confirmation, confirmation_email, close_signup_limit, send_reminder, reminder_days_before, reminder_email, nid) VALUES ('%s', %d, '%s', %d, %d, %d, '%s', %d)", $values);
+    $values = db_fetch_array(db_query("SELECT forwarding_email as signup_forwarding_email, send_confirmation as signup_send_confirmation, confirmation_email as signup_confirmation_email, close_signup_limit as signup_close_limit, send_reminder as signup_send_reminder, reminder_days_before as signup_reminder_days_before, reminder_email as signup_reminder_email FROM {signup} WHERE nid = 0"));
+    // Preserve any signup values that have been programatically
+    // set in the new node.
+    $node = (array)$node;
+    $node = array_merge($values, $node);
+    $save_values = array_intersect_key($node, $values);
+    $save_values['nid'] = $node['nid'];
+    $node = (object)$node;
+    db_query("INSERT INTO {signup} (forwarding_email, send_confirmation, confirmation_email, close_signup_limit, send_reminder, reminder_days_before, reminder_email, nid) VALUES ('%s', %d, '%s', %d, %d, %d, '%s', %d)", $save_values);
   }
   db_query("UPDATE {signup} SET user_reg_form = %d WHERE nid = %d", $node->signup_user_reg, $node->nid);
   $node = node_load($node->nid);
