diff --git a/viewfield.module b/viewfield.module
index 5584082..21b698f 100755
--- a/viewfield.module
+++ b/viewfield.module
@@ -55,8 +55,9 @@ function viewfield_field_settings($op, $field) {
       return array(
         // Views requires at least 96 chars for the view name and display, plus
         // we need 1 for our delimiter. Round up to a common value of 128.
-        'vname' => array('type' => 'varchar', 'not null' => FALSE, 'length' => 128),
-        'vargs' => array('type' => 'varchar', 'not null' => FALSE, 'length' => 255),
+        'noderef' => array('type' => 'varchar', 'not null' => FALSE, 'length' => 128),
+        'vname'   => array('type' => 'varchar', 'not null' => FALSE, 'length' => 128),
+        'vargs'   => array('type' => 'varchar', 'not null' => FALSE, 'length' => 255),
       );
   }
 }
@@ -112,6 +113,15 @@ function theme_viewfield_formatter_default($element) {
 
   $node = $element['#node'];
 
+  $view_args = array();
+  if (module_exists('nodereference')) {
+    if ($noderef_field = $element['#item']['noderef']) {
+      foreach ($node->{$noderef_field} as $noderef) {
+        $noderefs[] = $noderef['nid'];
+      }
+      $view_args = array(implode(',', $noderefs));
+    }
+  }
   if (!empty($element['#item']['vname']) && !isset($_viewfield_stack[$node->nid])) {
     // Push id of current node unless it's a new node being previewed.
     if ($node->nid) {
@@ -119,8 +129,9 @@ function theme_viewfield_formatter_default($element) {
     }
 
     list($view_name, $display) = explode('|', $element['#item']['vname'], 2);
-    $view_args = _viewfield_get_view_args($element['#item']['vargs'], $element['#node']);
-
+    if (empty($view_args)) {
+      $view_args = _viewfield_get_view_args($element['#item']['vargs'], $element['#node']);
+    }
 
     // Render the view like Views would do.
     // @see views_embed_view()
@@ -201,7 +212,7 @@ function viewfield_elements() {
   return array(
     'viewfield_select' => array(
       '#input' => TRUE,
-      '#columns' => array('vname', 'vargs'),
+      '#columns' => array('vname', 'vargs', 'noderef'),
       '#delta' => 0,
       '#process' => array('viewfield_select_process'),
     ),
@@ -233,7 +244,16 @@ function viewfield_select_process($element, $edit, $form_state, $form) {
     $element['vname']['#access'] = FALSE;
     $element['vname']['#default_value'] = $key;
   }
-
+  if ($noderefs = _viewfield_noderefs($element['#type_name'])) {
+    $element['noderef'] = array(
+      '#type' => 'select',
+      '#title' => t('Set View Arguments to Nodes in Field'),
+      '#options' => $noderefs,
+      '#default_value' => isset($element['#default_value']['noderef']) ? $element['#default_value']['noderef'] : '--',
+      '#access' => $is_field_settings_form || !$field['widget']['force_default'],
+      '#description' => t('Takes values from corresponding node reference field and passes nids as views arguments.'),
+    );
+  }
   $element['vargs'] = array(
     '#type' => 'textfield',
     '#title' => !isset($label) ? t('Arguments') : t('%field (@value) arguments', array(
@@ -269,6 +289,30 @@ function viewfield_select_process($element, $edit, $form_state, $form) {
   return $element;
 }
 
+/*
+ * Helper function to load all node reference fields
+ */
+function _viewfield_noderefs($type) {
+  $noderefs = array();
+  if (!module_exists('nodereference')) {
+    return NULL;
+  }
+  $fields = content_fields(NULL, $type);
+  foreach ($fields as $field_name => $field) {
+    if ($field['type'] == 'nodereference') {
+      $noderefs[$field_name] = $field['widget']['label'];
+    }
+  }
+  if (!empty($noderefs)) {
+    $noderefs['--'] = '<none>';
+    ksort($noderefs);
+    return $noderefs;
+  }
+  else {
+    return NULL;
+  }
+}
+
 /**
  * Prepare a list of views for selection.
  */
@@ -381,3 +425,5 @@ function _viewfield_get_view_args($vargs, $node) {
   }
   return $args;
 }
+
+
