diff --git a/user_relationship_node_access/user_relationship_node_access.module b/user_relationship_node_access/user_relationship_node_access.module
index 5240a6e..5f19a31 100644
--- a/user_relationship_node_access/user_relationship_node_access.module
+++ b/user_relationship_node_access/user_relationship_node_access.module
@@ -39,7 +39,7 @@ function theme_user_relationship_node_access_form($form) {
     $rows[] = $row;
   }
 
-  return theme('table', NULL, $rows);
+  return theme('table', NULL, $rows) . drupal_render($form['set_default']);
 }
 
 
@@ -85,29 +85,145 @@ function _user_relationship_node_access_disabling($set = NULL) {
   return $disabling;
 }
 
+/**
+ * Implementation of hook_user().
+ */
+function user_relationship_node_access_user($op, &$edit, &$account, $category = NULL) {
+  switch ($op) {
+    case 'form':
+      if ($category == 'account') {
+        // Allow users to set default settings for sharing content.
+        return _user_relationship_node_access_user_form($op, $edit, $account, $category = NULL);
+      }
+
+    case 'update':
+      if (isset($edit['user_relationship_node_access'])) {
+        $edit['user_relationship_node_access_defaults'] = $edit['user_relationship_node_access'];
+        $edit['user_relationship_node_access'] = NULL;
+      }
+  }
+}
+
+/**
+ * Helper function to show the default URNA settings for a user account.
+ */
+function _user_relationship_node_access_user_form($op, &$edit, &$account, $category = NULL) {
+  $form = _user_relationship_node_access_permission_form('user', $account);
+  if (isset($account->user_relationship_node_access_defaults)) {
+    $defaults = $account->user_relationship_node_access_defaults;
+    foreach ($defaults as $key => $value) {
+      $form['user_relationship_node_access'][$key]['#default_value'] = $value;
+    }
+  }
+  $form['user_relationship_node_access']['#description'] = t('Set your default sharing settings when posting new content.');
+  return $form;
+}
 
 /**
  * hook_form_alter()
  */
 function user_relationship_node_access_form_alter(&$form, $form_state, $form_id) {
-  global $user;
-  if (isset($form['#node']) && $form['#node'] && ($form['#node']->uid != $user->uid)) {
-    return;
+  if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) {
+    // Verify we can set permissions on this node.
+    global $user;
+
+    if ($form['#node']->uid == $user->uid && count($types = user_relationships_types_load()) > 0 && _user_relationship_node_access_node_eligible($form['#node'])) {
+      $form += _user_relationship_node_access_permission_form('node', $form['#node']);
+      $form['user_relationship_node_access']['set_default_wrapper'] = array(
+        '#type' => 'markup',
+        '#value' => '<div id="user-relationship-node-access-set-default"></div>',
+      );
+
+      $form['user_relationship_node_access']['set_default'] = array(
+        '#type' => 'button',
+        '#value' => t('Make default'),
+        '#ahah' => array(
+          'path' => 'user-relationship-node-access/set-default',
+          'wrapper' => 'user-relationship-node-access-set-default',
+        ),
+      );
+
+      // Handle the "Make default" button action.
+      if (isset($form_state['ahah_submission'])) {
+        $defaults = array('user_relationship_node_access_defaults' => $form_state['values']['user_relationship_node_access']);
+        unset($defaults['user_relationship_node_access_defaults']['set_default']);
+        user_save($user, $defaults);
+        drupal_set_message(t("Default sharing settings have been saved."));
+      }
+    }
   }
+}
 
-  if (
-    !isset($form['type']) ||
-    is_null($form['type']) ||
-    !isset($form['type']['#value']) ||
-    $form['type']['#value'] .'_node_form' != $form_id ||
-    !count($types = user_relationships_types_load())
-  ) {
-    return;
+/**
+ * Does the very standard things that must be done in any normal callback.
+ * Used by each AHAH callback in this module. This code is from the
+ * ahah_example from the Examples project on drupal.org.
+ *
+ * Note that this calls the form builder function, so do any modifications to
+ * your form in the same function that is called by drupal_get_form().
+ */
+function user_relationship_node_access_ahah_callback_helper() {
+  $form_state = array('storage' => NULL, 'submitted' => FALSE);
+  $form_build_id = $_POST['form_build_id'];
+  $form = form_get_cache($form_build_id, $form_state);
+  $args = $form['#parameters'];
+  $form_id = array_shift($args);
+  $form_state['post'] = $form['#post'] = $_POST;
+  // Enable the submit/validate handlers to determine whether AHAH-submittted.
+  $form_state['ahah_submission'] = TRUE;
+  $form['#programmed'] = $form['#redirect'] = FALSE;
+  // Stash the original form action to avoid overwriting with
+  // drupal_rebuild_form(). For more information, see:
+  // http://drupal.org/node/591696
+  // http://jbenner.net/blog/prevent-ahah-the-right-way-from-breaking-with-validation
+  $form_state['action'] = $form['#action'];
+
+  // We don't do any validation on #ahah callbacks.
+  unset($form['#validate']);
+  foreach (element_children($form) as $child) {
+    $form[$child]['#validated'] = TRUE;
   }
 
-  // verify we can set permissions on this node
-  if (!_user_relationship_node_access_node_eligible($form['#node'])) {
-    return;
+  drupal_process_form($form_id, $form, $form_state);
+  $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
+  return $form;
+}
+
+/**
+ * Form callback function to set the default access settings.
+ */
+function user_relationship_node_access_set_default() {
+  $form = user_relationship_node_access_ahah_callback_helper();
+
+  $output = theme('status_messages');
+
+  drupal_json(array('status' => TRUE, 'data' => $output));
+  exit();
+}
+
+/**
+ * Helper function to generate the permissions grid for a node edit form or for
+ * a user edit form.
+ *
+ * @param $object_type
+ *   The type of form being viewed. Either 'node' or 'user'.
+ * @param $object
+ *   The object associated with the form being viewed. If $object_type is
+ *   'node', pass the node object. If $object_type is 'user', pass the user
+ *    object.
+ *
+ * @return
+ *   A Form API array suitable for including in another form.
+ */
+function _user_relationship_node_access_permission_form($object_type, $object) {
+  $form = array();
+  $types = user_relationships_types_load();
+  if ($object_type == 'node') {
+    $node = $object;
+    $account = user_load($node->uid);
+  }
+  else {
+    $account = $object;
   }
 
   foreach ($types as $rtid => $type) {
@@ -124,26 +240,33 @@ function user_relationship_node_access_form_alter(&$form, $form_state, $form_id)
 
   // reverse the optimization made after saving
   $permissions = array();
-  if (isset($form['#node']->user_relationship_node_access) && is_array($form['#node']->user_relationship_node_access)) {
-    foreach ($form['#node']->user_relationship_node_access as $rtid => $permission) {
+  if ($object_type == 'node' && isset($node->user_relationship_node_access) && is_array($node->user_relationship_node_access)) {
+    foreach ($node->user_relationship_node_access as $rtid => $permission) {
       foreach ($permission as $action => $trash) {
         $permissions[$action][$rtid] = $rtid;
       }
     }
   }
-  
-  // get permissions that can be set - from node author not current user
-  $author_allowed_perms = _user_relationship_node_access_get_allowed_grants(user_load($form['#node']->uid));
-  
+  else {
+    // There are no permissions set on this node. Pull in the defaults from
+    // the author of the node.
+    if (isset($account->user_relationship_node_access_defaults)) {
+      $permissions = $account->user_relationship_node_access_defaults;
+    }
+  }
+
+  // Get permissions that can be set - from node author or the user defaults.
+  $author_allowed_perms = _user_relationship_node_access_get_allowed_grants(user_load($object->uid));
+
   if (!count($author_allowed_perms)) {
-    return;
+    return array();
   }
-  
+
   // use advanced form with a table if more than one permission, otherwise just a simple 'post to related users' checkbox
   $use_advanced_form = count($author_allowed_perms) > 1;
   // different labels for group posts (that have the group audience fieldset)
-  $is_group_post = module_exists('og') && og_is_group_post_type($form['type']['#value']);
-  
+  $is_group_post = module_exists('og') && og_is_group_content_type('node', $node->type);
+
   $form['user_relationship_node_access'] = array(
     '#type'         => 'fieldset',
     '#title'        => $use_advanced_form ? t('User Relationships Node Access') : t('Post to Social Network'),
@@ -181,6 +304,7 @@ function user_relationship_node_access_form_alter(&$form, $form_state, $form_id)
     }
   }
 
+  return $form;
 }
 
 /**
@@ -222,6 +346,16 @@ function user_relationship_node_access_menu() {
     'type' => MENU_NORMAL_ITEM,
   );
 
+  // AHAH callbacks.
+  $items['user-relationship-node-access/set-default'] = array(
+    'title' => 'Set default sharing settings',
+    'page callback' => 'user_relationship_node_access_set_default',
+    'access arguments' => array('access content'),
+    'file path' => drupal_get_path('module', 'node'),
+    'file' => 'node.pages.inc',
+    'type' => MENU_CALLBACK,
+  );
+
   return $items;
 }
 
@@ -254,6 +388,11 @@ function user_relationship_node_access_nodeapi(&$node, $op, $a3 = NULL, $a4 = NU
     if (is_array($node->user_relationship_node_access)) {
       // reformat the array and optimize
       foreach ($node->user_relationship_node_access as $action => $permissions) {
+        // @todo: The new set_default button results in a warning. Find a better way to avoid a
+        // notice.
+        if (!is_array($permissions)) {
+          continue;
+        }
         foreach ($permissions as $key => $permission) {
           //make sure user is allowed to set this permission
           if ($allowed_grants[$action] && $permission) {
