diff --git a/lib/CF/Helpers/Core.pm b/lib/CF/Helpers/Core.pm
index 6aa10097c1f9102013ceac68d309d281dceff206..b60ae0a9b1805e08bba926cc58c4a66872515b59 100644
--- a/lib/CF/Helpers/Core.pm
+++ b/lib/CF/Helpers/Core.pm
@@ -140,6 +140,25 @@ sub register ($class, $self, $conf) {
         );
     });
 
+    $self->helper( prepare_update_data => sub($c, $result, $args) {
+        my $update = {};
+
+        my %protected = ();
+        if ( $result->resultset_class->can('PROTECTED_FIELDS')) {
+            %protected = map {$_ => 1}
+                @{ $result->resultset_class->PROTECTED_FIELDS()};
+        }
+
+        FIELD:
+        foreach my $field ( $result->columns() ) {
+            if ( exists $args->{$field} && ! $protected{$field} ) {
+                $update->{$field} = $args->{$field} ;
+            }
+        }
+
+        return $update;
+    });
+
     $self->helper( format_timestamp => sub($c, $timestamp, $format) {
         return $timestamp;
     });