diff --git a/includes/record_feature.admin.inc b/includes/record_feature.admin.inc
index a79640b..1a188cb 100644
--- a/includes/record_feature.admin.inc
+++ b/includes/record_feature.admin.inc
@@ -583,14 +583,19 @@
       // Compose rows.
       $rows = array();
       foreach (element_children($form['variables']) as $key) {
+        $original = $form['variables'][$key]['original']['#value'];
+        $original = is_scalar($original) ? $original : '<pre>' . print_r($original, TRUE) . '</pre>';
+        $modified = $form['variables'][$key]['modified']['#value'];
+        $modified = is_scalar($modified) ? $modified : '<pre>' . print_r($modified, TRUE) . '</pre>';
+
         $row = array(
           array(
             'data' => drupal_render($form['export']['variables'][$key]),
             'class' => 'checkbox', /* This is for centering */
           ),
           $key,
-          $form['variables'][$key]['original']['#value'],
-          $form['variables'][$key]['modified']['#value'],
+          $original,
+          $modified,
         );
         $rows[] = $row;
       }
diff --git a/record_feature.module b/record_feature.module
index dcd37a5..c32d441 100644
--- a/record_feature.module
+++ b/record_feature.module
@@ -315,6 +315,41 @@
   return $feature_obj;
 }
 
+function _record_feature_equal_data($new, $old) {
+	if (gettype($new) != gettype($old)) {
+		return FALSE;
+	}
+
+	if (is_array($new)) {
+		$diff = _record_feature_diff_assoc($new, $old);
+		return empty($diff);
+	}
+
+	if (is_scalar($new)) {
+		return ((string) $new == (string) $old);
+	}
+
+	if (is_null($new) || is_object($old)) {
+		return ($new == $old);
+	}
+
+	return FALSE;
+}
+
+function _record_feature_diff_assoc(array $rec_data, array $old_data) {
+	$diff = array();
+
+	foreach ($rec_data as $index => $item) {
+		if (array_key_exists($index, $old_data) && _record_feature_equal_data($item, $old_data[$index])) {
+			continue;
+		}
+
+		$diff[$index] = $item;
+	}
+
+	return $diff;
+}
+
 /**
  * Helper function to process recorded variables data
  *
@@ -327,8 +362,8 @@
   // Get current variable state.
   global $conf;
   // Store the differences.
-  $variables_ori = array_diff_assoc($rec_data, $conf); // Original values.
-  $variables_new = array_diff_assoc($conf, $rec_data); // Modified values.
+  $variables_ori = _record_feature_diff_assoc($rec_data, $conf); // Original values.
+  $variables_new = _record_feature_diff_assoc($conf, $rec_data); // Modified values.
 
   // Remove our temporary variable.
   unset($variables_new['record_feature_recording']);
