--- viewfield.module.orig	2009-01-19 18:27:50.000000000 -0600
+++ viewfield.module	2009-01-19 18:27:50.000000000 -0600
@@ -82,6 +82,14 @@ function viewfield_field_settings($op, $
           '#default_value' => $field['token_enabled'],
         );
       }
+
+$form['allow_recursion'] = array(
+  '#type' => 'checkbox',
+  '#title' => t('Allow recursion'),
+  '#description' => t('Allow views to load the node containing the view. 
+Enable this only if you really know what you\'re doing.'),
+  '#default_value' => $field['allow_recursion'],
+);
       
       $form_state = NULL;
       $form['super_default_widget'] = array('#tree' => TRUE);
@@ -97,7 +105,8 @@ function viewfield_field_settings($op, $
       break;
       
     case 'save':
-      return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget');
+      return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget', 'allow_recursion');
+
       
     case 'database columns':
       $columns = array(
@@ -146,6 +155,9 @@ function viewfield_field($op, &$node, $f
           $items[$delta] = _viewfield_get_super_defaults($field);
           $items[$delta]['default'] = TRUE;
         }
+// Keep the allow_recursion flag for later use.
+$items[$delta]['allow_recursion'] = $field['allow_recursion'];
+
         // load here the actual arguments to avoid the body disappearing
         $items[$delta]['actual_vargs'] = _viewfield_get_view_args($field, $items[$delta][$field_key_vargs], $node);
         $adds[$field_name][$delta] = $items[$delta];
@@ -191,7 +203,7 @@ function theme_viewfield_formatter($elem
   $view_name = $element['#item']['vname'];
   $view_args = $element['#item']['actual_vargs'];
   
-  return _viewfield_get_view_content($view_name, $view_args, $display, $node);
+  return _viewfield_get_view_content($view_name, $view_args, $display, $node, $element['#item']['allow_recursion']);
 }
  
 
@@ -476,7 +488,7 @@ function _viewfield_get_token_help() {
 /**
  * Return a themed view avoiding viewfield recursion
  */
-function _viewfield_get_view_content($view_name, $view_args, $display, $node) {
+function _viewfield_get_view_content($view_name, $view_args, $display, $node, $allow_recursion) {
   global $_viewfield_stack;
   $output = '';
   
@@ -484,7 +496,7 @@ function _viewfield_get_view_content($vi
   if (!empty($view_name) && count($_viewfield_stack) <= 2) {
     // Need to prevent recursive views and node building, but don't need to do it on
     // new node previews.
-    if ($node->nid) {
+    if ($node->nid && !$allow_recursion) {
       _viewfield_nodestack_push($node->nid);
     }
     
@@ -494,7 +506,7 @@ function _viewfield_get_view_content($vi
     }
     
     // This node is "safe" again.
-    if ($node->nid) {
+    if ($node->nid && !$allow_recursion) {
       _viewfield_nodestack_pop();
     }
   }
