diff --git a/MetaAnalytic.py b/MetaAnalytic.py
index 37e93d7f1a8fa0b3a4f1c7bd27828069d3cf7962_TWV0YUFuYWx5dGljLnB5..0df9d54510ca846cf1406a6663963d663ae05931_TWV0YUFuYWx5dGljLnB5 100644
--- a/MetaAnalytic.py
+++ b/MetaAnalytic.py
@@ -182,45 +182,13 @@
             return res
 
         @AddMethod(superclass)
-        @api.cr_uid_ids_context
-        def unlink(self, cr, uid, ids, context=None):
-            """When removing this object, remove all associated analytic
-            codes referenced by this object.
-            Note: the method will fail if the code is referenced by any other
-            object due to the RESTRICT constraint. That is the intended
-            behavior.
-            """
-            analytic_obj = self.pool['analytic.structure']
-            code_obj = self.pool['analytic.code']
-
-            # Gather analytic values
-            analytic_values = []
-            for record in self.browse(cr, uid, ids, context=context):
-                for prefix, struct in analytic.iteritems():
-                    values = analytic_obj.extract_values(
-                        cr, uid, record, struct,
-                        prefix=prefix, context=context
-                    )
-                    analytic_values.append(values)
-
-            # Find all related codes
-            code_ids = []
-            for values in analytic_values:
-                filtered_code_ids = filter(None, values.values())
-                code_ids.extend(filtered_code_ids)
-
-            # Set analytic fields to null
-            if analytic_values:
-                # The keys are all the same
-                fields = analytic_values[0].keys()
-                vals = {field: False for field in fields}
-                self.write(cr, uid, ids, vals)
-
-            code_obj.unlink(cr, uid, code_ids, context=context)
-
-            res = super(superclass, self).unlink(
-                cr, uid, ids, context=context
-            )
+        @api.model
+        @api.returns(orm_name, lambda value: value.id)
+        def create(self, vals, **kwargs):
+            """Performs analytic field validation"""
+            res = super(superclass, self).create(vals, **kwargs)
+            # Throws in case of error
+            res._validate_analytic_fields(frozendict(analytic))
             return res
 
         @AddMethod(superclass)
@@ -224,7 +192,6 @@
             return res
 
         @AddMethod(superclass)
-        @api.cr_uid_context
-        @api.returns(orm_name)
-        def create(self, cr, uid, vals, context=None):
+        @api.multi
+        def write(self, vals, **kwargs):
             """Performs analytic field validation"""
@@ -230,5 +197,3 @@
             """Performs analytic field validation"""
-            res = super(superclass, self).create(
-                cr, uid, vals, context=context
-            )
+            res = super(superclass, self).write(vals, **kwargs)
             # Throws in case of error
@@ -234,6 +199,5 @@
             # Throws in case of error
-            self._validate_analytic_fields(cr, uid, res, frozendict(analytic))
-
+            self._validate_analytic_fields(frozendict(analytic))
             return res
 
         @AddMethod(superclass)
@@ -237,21 +201,8 @@
             return res
 
         @AddMethod(superclass)
-        @api.cr_uid_ids_context
-        def write(self, cr, uid, ids, vals, context=None):
-            """Performs analytic field validation"""
-            res = super(superclass, self).write(
-                cr, uid, ids, vals, context=context
-            )
-            # Throws in case of error
-            self._validate_analytic_fields(cr, uid, ids, frozendict(analytic))
-
-            return res
-
-        @AddMethod(superclass)
-        @api.cr_uid_ids_context
-        def _validate_analytic_fields(self, cr, uid, ids, analytic,
-                                      context=None):
+        @api.multi
+        def _validate_analytic_fields(self, analytic):
             """Validation function to validate analytic fields.
             The base implementation doesn't actually do anything.
             :param analytic: frozendict, analytic field parameters, such as
@@ -448,8 +399,8 @@
 
         @AddMethod(superclass)
         @api.cr_uid_context
-        @api.returns(orm_name)
-        def create(self, cr, uid, vals, context=None):
+        @api.returns(orm_name, lambda a: a.id)
+        def create(self, cr, uid, vals, context=None, **kwargs):
             """Create the analytic code."""
 
             code_vals = {}
@@ -492,7 +443,7 @@
                 new_code_id = code_id
 
             res = super(superclass, self).create(
-                cr, uid, vals, context=context
+                cr, uid, vals, context=context,  **kwargs
             )
 
             if code_ref_ids:
@@ -507,7 +458,7 @@
 
         @AddMethod(superclass)
         @api.cr_uid_ids_context
-        def write(self, cr, uid, ids, vals, context=None):
+        def write(self, cr, uid, ids, vals, context=None, **kwargs):
             """Update the analytic code's name if it is not inherited,
             and its parent code if parent-child relations are synchronized.
             """
@@ -559,7 +510,7 @@
                     )
 
             res = super(superclass, self).write(
-                cr, uid, ids, vals, context=context
+                cr, uid, ids, vals, context=context, **kwargs
             )
 
             if code_ref_ids and new is not False:
@@ -569,7 +520,7 @@
 
         @AddMethod(superclass)
         @api.cr_uid_ids_context
-        def unlink(self, cr, uid, ids, context=None):
+        def unlink(self, cr, uid, ids, context=None, **kwargs):
             """When removing this object, remove all associated analytic
             codes referenced by this object.
             Note: the method will fail if the code is referenced by any other
@@ -588,8 +539,7 @@
                 cr, uid, ids, context=context
             )
 
-#             self.write(cr, uid, ids, {column: False}, context=context)
-            code_obj.unlink(cr, uid, code_ids, context=context)
+            code_obj.unlink(cr, uid, code_ids, context=context, **kwargs)
 
             return res