Index: viewfield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/viewfield/viewfield.module,v
retrieving revision 1.20
diff -u -p -r1.20 viewfield.module
--- viewfield.module	17 Jun 2009 02:56:40 -0000	1.20
+++ viewfield.module	14 Jul 2009 16:09:16 -0000
@@ -114,6 +114,10 @@ function viewfield_field_formatter_info(
     'default' => array(
       'label' => t('Default'),
       'field types' => array('viewfield')
+    ),                                                       
+    'linked' => array(
+      'label' => t('Linked'),
+      'field types' => array('viewfield')
     ),
   );
 }
@@ -321,6 +325,10 @@ function viewfield_theme() {
       'arguments' => array('element' => NULL),
       'file' => 'theme/viewfield.theme.inc',
     ),
+    'viewfield_formatter_linked' => array(
+      'arguments' => array('element' => NULL),
+      'file' => 'theme/viewfield.theme.inc',
+    ),
   );
 }
 
Index: theme/viewfield.theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/viewfield/theme/viewfield.theme.inc,v
retrieving revision 1.4
diff -u -p -r1.4 viewfield.theme.inc
--- theme/viewfield.theme.inc	15 Jun 2009 19:13:02 -0000	1.4
+++ theme/viewfield.theme.inc	14 Jul 2009 16:09:16 -0000
@@ -7,21 +7,50 @@
  */
 
 /**
- * Return a themed view avoiding viewfield recursion.
+ * Return a themed view using the selected display.
  */
 function theme_viewfield_formatter_default($element) {
+  return _theme_viewfield_formatter($element);
+}
+
+/**
+ * Return a themed view using the display linked to the selected display if one exists.
+ */
+function theme_viewfield_formatter_linked($element) {
+  return _theme_viewfield_formatter($element, $linked = TRUE);
+}
+
+/**
+ * Return a themed view avoiding viewfield recursion.
+ */
+function _theme_viewfield_formatter($element, $linked = FALSE) {
   global $_viewfield_stack;
   // For safety's sake, we can only display 2 levels of viewfields.
   if (count($_viewfield_stack) <= 2) {
-    list($view_name, $display) = explode('|', $element['#item']['vname'], 2);
+    list($view_name, $display_id) = explode('|', $element['#item']['vname'], 2);
     $view_args = _viewfield_get_view_args($element['#item']['token_enabled'], $element['#item']['vargs'], $element['#node']);
-    $node = $element['#node'];
+    $node = $element['#node'];          
+    
     // Need to prevent recursive views and node building, but don't need to do
     // it on new node previews.
     if ($node->nid) {
       _viewfield_nodestack_push($node->nid);
     }
-    array_unshift($view_args, $view_name, $display);
+
+    $view = views_get_view($view_name);           
+
+    if($linked) {
+      $view->init_display();
+      $display_handler = $view->display[$display_id]->handler;
+    
+      if($display_handler->uses_link_display()) {
+        $link_display_id = $display_handler->get_link_display(); 
+        $display_id = empty($view->display[$link_display_id]) ? $display_id : $link_display_id;
+      }
+    }
+    
+    array_unshift($view_args, $view_name, $display_id);        
+
     $output = call_user_func_array('views_embed_view', $view_args);
     // This node is "safe" again.
     if ($node->nid) {
