--- nodeaccess.module.orig	2008-07-22 01:28:46.000000000 +0200
+++ nodeaccess.module	2008-11-05 09:30:38.000000000 +0100
@@ -162,12 +162,19 @@ function nodeaccess_admin_form(&$form_st
     foreach ($perms as $perm) {
       $opts[$perm['gid']] = $perm;
     }
+    $perms = variable_get('nodeaccess_'. $type .'_default', array());
+    foreach ($perms as $perm) {
+      $defs[$perm['gid']] = $perm;
+    }
     // Set default role permissions for node type.
     foreach (user_roles() as $id => $role) {
       $form['nodeaccess'][$type]['roles'][$id]['name'] = array('#value' => $role);
       $form['nodeaccess'][$type]['roles'][$id]['grant_view'] = array('#type' => 'checkbox', '#default_value' => $opts[$id]['grant_view']);
+      $form['nodeaccess'][$type]['roles'][$id]['grant_view_default'] = array('#type' => 'checkbox', '#default_value' => $defs[$id]['grant_view_default']);
       $form['nodeaccess'][$type]['roles'][$id]['grant_update'] = array('#type' => 'checkbox', '#default_value' => $opts[$id]['grant_update']);
+      $form['nodeaccess'][$type]['roles'][$id]['grant_update_default'] = array('#type' => 'checkbox', '#default_value' => $defs[$id]['grant_update_default']);
       $form['nodeaccess'][$type]['roles'][$id]['grant_delete'] = array('#type' => 'checkbox', '#default_value' => $opts[$id]['grant_delete']);
+      $form['nodeaccess'][$type]['roles'][$id]['grant_delete_default'] = array('#type' => 'checkbox', '#default_value' => $defs[$id]['grant_delete_default']);
     }
   }
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save Grants'));
@@ -212,6 +219,11 @@ function nodeaccess_admin_form_submit($f
       $grants[] = array('gid' => $role, 'realm' => 'nodeaccess_rid', 'grant_view' => $val['grant_view'], 'grant_update' => $val['grant_update'], 'grant_delete' => $val['grant_delete']);
     }
     variable_set('nodeaccess_' . $type, $grants);
+    $grants = array();
+    foreach ($form_values[$type]['roles'] as $role => $val) {
+      $grants[] = array('gid' => $role, 'realm' => 'nodeaccess_rid', 'grant_view_default' => $val['grant_view_default'], 'grant_update_default' => $val['grant_update_default'], 'grant_delete_default' => $val['grant_delete_default']);
+    }
+    variable_set('nodeaccess_'. $type .'_default', $grants);
     if ($form_values[$type]['show']) {
       $allowed_types[$type] = 1;
     }
@@ -247,13 +259,16 @@ function theme_nodeaccess_admin_form_rol
 function theme_nodeaccess_admin_form_types($form) {
   $output = drupal_render($form['show']);
   $roles = element_children($form['roles']);
-  $header = array(t('Role'), t('View'), t('Edit'), t('Delete'));
+  $header = array(t('Role'), t('View'), t('View default'), t('Edit'), t('Edit default'), t('Delete'), t('Delete default'));
   foreach ($roles as $role) {
     $row = array();
     $row[] = drupal_render($form['roles'][$role]['name']);
     $row[] = drupal_render($form['roles'][$role]['grant_view']);
+    $row[] = drupal_render($form['roles'][$role]['grant_view_default']);
     $row[] = drupal_render($form['roles'][$role]['grant_update']);
+    $row[] = drupal_render($form['roles'][$role]['grant_update_default']);
     $row[] = drupal_render($form['roles'][$role]['grant_delete']);
+    $row[] = drupal_render($form['roles'][$role]['grant_delete_default']);
     $rows[] = $row;
   }
   $output .= theme('table', $header, $rows);
@@ -604,7 +619,18 @@ function nodeaccess_node_access_records(
     return;
   }
   // Need to find out if node has own grants or whether to use defaults.
-  $default = variable_get('nodeaccess_' . $node->type, array());
+  $default = variable_get('nodeaccess_'. $node->type, array());
+  if ($node->is_new) {
+    // Use the nodeaccess defaults instead of the nodeaccess perms for new nodes.
+    $default_default = variable_get('nodeaccess_'. $node->type .'_default', array());
+    foreach ($default_default as $rid => $roledefault) {
+      foreach ($roledefault as $key => $value) {
+        if (substr($key, 0, 6) == 'grant_') {
+          $default[$rid][substr($key, 0, -8)] = $value;
+        }
+      }
+    }
+  }
   // Load priority setting.
   $priority = variable_get('nodeaccess-priority', 0);
   $result = db_result(db_query("SELECT count(*) FROM {nodeaccess} WHERE nid = %d", $node->nid));

