diff --git a/product/ERP5Form/ProxyField.py b/product/ERP5Form/ProxyField.py
index a128a95ab1df1755902237aff5c36262c5f938d0..94e092ed126fd3056ad346631d9f7d24a5d146dd 100644
--- a/product/ERP5Form/ProxyField.py
+++ b/product/ERP5Form/ProxyField.py
@@ -219,6 +219,21 @@ class ProxyField(ZMIField):
       return self.manage_main(self, REQUEST,
                               manage_tabs_message=message)
 
+  def manage_edit_surcharged_xmlrpc(self, mapping):
+    """Edit surcharged properties
+    This method is similar to manage_edit_xmlrpc, and it marks the properties
+    as not delegated.
+    """
+    self._surcharged_edit(mapping, mapping.keys())
+
+  def manage_tales_surcharged_xmlrpc(self, mapping):
+    """Edit surcharged TALES
+    This method is similar to manage_tales_xmlrpc, and it marks the TALES
+    properties as not delegated.
+    """
+    self._surcharged_tales(mapping, mapping.keys())
+
+
   def _surcharged_edit(self, result, surcharge_list):
     # first check for any changes  
     values = self.values
diff --git a/product/ERP5Form/tests/testFields.py b/product/ERP5Form/tests/testFields.py
index c432f6621edb9ca19d95e50a62e481514b3a1697..850a02d28ccb0d62f3363d2cc5961f5f96331350 100644
--- a/product/ERP5Form/tests/testFields.py
+++ b/product/ERP5Form/tests/testFields.py
@@ -270,6 +270,25 @@ class TestProxyField(unittest.TestCase):
     # and validate
     self.container.Base_view.validate_all_to_request(dict())
     
+  def test_manage_edit_surcharged_xmlrpc(self):
+    # manage_edit_surcharged_xmlrpc is a method to edit proxyfields
+    # programmatically
+    original_field = self.addField(self.container.Base_viewProxyFieldLibrary,
+                                   'my_string', 'String', 'StringField')
+    proxy_field = self.addField(self.container.Base_view,
+                                'my_String', '', 'ProxyField')
+    proxy_field.manage_edit_xmlrpc(dict(form_id='Base_viewProxyFieldLibrary',
+                                        field_id='my_date',))
+
+    proxy_field.manage_edit_surcharged_xmlrpc(dict(title='Title'))
+    self.assertFalse(proxy_field.is_delegated('title'))
+    self.assertEquals('Title', proxy_field.get_value('title'))
+
+    # beware that all values that are not passed in the mapping will be
+    # delegated again, regardless of the old state.
+    proxy_field.manage_edit_surcharged_xmlrpc(dict())
+    self.assertTrue(proxy_field.is_delegated('title'))
+
 
 class TestFieldValueCache(unittest.TestCase):
   """Tests field value caching system