Index: vocabperms.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/vocabperms/vocabperms.module,v
retrieving revision 1.1.2.11
diff -u -u -p -r1.1.2.11 vocabperms.module
--- vocabperms.module	14 Jan 2008 11:31:56 -0000	1.1.2.11
+++ vocabperms.module	10 Feb 2008 19:36:03 -0000
@@ -163,14 +163,9 @@ function _vocabperms_node_form_remove_fi
           }
         }
         if ($perm > VOCABPERMS_EDIT) {
-          /* Convert the element to a value so any preset or existing values
-           * are retained.  Use a default value if available.  Otherwise, use
-           * the first option (which would be selected by default).
-           */
-          $value = isset($elem['#default_value']) ? $elem['#default_value'] : key($elem['#options']);
           $field[$vid] = array(
             '#type' => 'value',
-            '#value' => $value,
+            '#value' => _vocabperms_find_default($elem),
           );
         }
         else {
@@ -185,6 +180,37 @@ function _vocabperms_node_form_remove_fi
 }
 
 /**
+ * Find a default value for the element.
+ */
+function _vocabperms_find_default($elem) {
+  // Use a default value if available.
+  if ($default_value = _vocabperms_find_value($elem, '#default_value')) {
+    return $default_value;
+  }
+  // Otherwise, use the first option (which would be selected by default).
+  if ($default_value = _vocabperms_find_value($elem, '#options')) {
+    return key($default_value);
+  }
+}
+
+/**
+ * recursively called routine to recursively check sub-elements for a specific key,
+ *  (set to either #default_value or #options).
+ */
+function _vocabperms_find_value($elem, $default_key) {
+  if (isset($elem[$default_key])) {
+    return $elem[$default_key];
+  }
+  foreach ($elem as $key => $value) {
+    if ($key[0] != '#') {
+      if ($default_value = _vocabperms_find_value($value, $default_key)) {
+        return $default_value;
+      }
+    }
+  }
+} 
+  
+/**
  * remove vocabularies from nodes when the user doesn't have perms
  *
  * SEE NOTE ABOVE
