--- cck_fullname.module.orig	2008-06-08 18:49:34.000000000 +0100
+++ cck_fullname.module	2009-02-25 18:46:50.000000000 +0000
@@ -738,17 +738,21 @@ function cck_fullname_field_formatter($f
         $output = t('Preferred name: '). theme('cck_fullname', $cck_preferredname, $field);
       }
       return $output;
-    case 'last_name_only'://output legal last name
+    case 'last_name_only'://output preferred last name if present, otherwise legal last name
       //check and clean the values for output
-        if (isset($item['last'])) {
+        if (!empty($item['last_preferred'])) {
+          $cck_fullname['last_preferred'] = strip_tags($item['last_preferred']);
+        } else if (!empty($item['last'])) {
           $cck_fullname['last'] = strip_tags($item['last']);
         }
         $output .= theme('cck_fullname', $cck_fullname, $field);
       return $output;
-    case 'first_name_only'://output preferred first name
+    case 'first_name_only'://output preferred first name if present, otherwise legal first name
       //check and clean the values for output
-        if (isset($item['first_preferred'])) {
+        if (!empty($item['first_preferred'])) {
           $cck_fullname['first_preferred'] = strip_tags($item['first_preferred']);
+        } else if (!empty($item['first'])) {
+          $cck_fullname['first'] = strip_tags($item['first']);
         }
         $output .= theme('cck_fullname', $cck_fullname, $field);
       return $output;
