--- driven_cck.diff.inc	2010-04-16 18:42:15.000000000 +0300
+++ driven_cck.diff.inc	2010-11-23 20:13:22.758016031 +0200
@@ -36,6 +36,12 @@
         'filefield_upload',
         'filefield_remove',
         'upload',
+        // drop: data [#865388]
+        // fieldfield module has some inconsistencies regarding wether data is FALSE, an empty array or completely missing
+        'data',
+        // @per-module-discrimination: support filefield_sources [#872726]
+        // @TODO: pending proper review of that module's behavior (this was a quick patch)
+        'filefield_remote',
       );
       driven_diff_drop_keys($value, $keys);
       // on preview $default needs cleanup as well,
@@ -352,11 +358,17 @@
     }
     return driven_taxo_diff_render($old, $new, $meta);
   }
-  
-  $node = (object)array(
-    'type' => $node_type, 
-    'build_mode' => NODE_BUILD_NORMAL
-  );
+
+  // Trying to load a node if that is possible
+  if (arg(0) == 'node' && is_numeric(arg(1))) {
+    $node = node_load(arg(1));
+  }
+  else {
+    $node = (object)array(
+      'type' => $node_type,
+      'build_mode' => NODE_BUILD_NORMAL
+    );
+  }
 
   list($old, $new) = driven_diff_symmetric_diff($old, $new);
   
@@ -378,29 +390,32 @@
   $incoming = array();
   $classes = array($field['type'], $field['field_name']);
   // old/new deltas don't have to match
-  
-  foreach ($old_view[$field_name]['field']['items'] as $delta => $item) {
-    $rendered = drupal_render($item);
-    if (!empty($rendered)) {
-      if ($field['multiple']) {
-        $rendered = driven_diff_output('driven_diff_outgoing', array(
-          'content' => $rendered,
-          'classes' => $classes,
-        ));
+  if (is_array($old_view[$field_name])) {
+    foreach ($old_view[$field_name]['field']['items'] as $delta => $item) {
+      $rendered = drupal_render($item);
+      if (!empty($rendered)) {
+        if ($field['multiple']) {
+          $rendered = driven_diff_output('driven_diff_outgoing', array(
+            'content' => $rendered,
+            'classes' => $classes,
+          ));
+        }
+        $outgoing[] = $rendered;
       }
-      $outgoing[] = $rendered;
     }
   }
-  foreach ($new_view[$field_name]['field']['items'] as $delta => $item) {
-    $rendered = drupal_render($item);
-    if (!empty($rendered)) {
-      if ($field['multiple']) {
-        $rendered = driven_diff_output('driven_diff_incoming', array(
-          'content' => $rendered,
-          'classes' => $classes,
-        ));
+  if (is_array($new_view[$field_name])) {
+    foreach ($new_view[$field_name]['field']['items'] as $delta => $item) {
+      $rendered = drupal_render($item);
+      if (!empty($rendered)) {
+        if ($field['multiple']) {
+          $rendered = driven_diff_output('driven_diff_incoming', array(
+            'content' => $rendered,
+            'classes' => $classes,
+          ));
+        }
+        $incoming[] = $rendered;
       }
-      $incoming[] = $rendered;
     }
   }
   
