diff --git a/addons/crm/models/ir_config_parameter.py b/addons/crm/models/ir_config_parameter.py
index af74a83e2724a0acb866568c4c7ad21209cc1a22..74d1e7ab197a309dee353c2d6416bc2a914a3543 100644
--- a/addons/crm/models/ir_config_parameter.py
+++ b/addons/crm/models/ir_config_parameter.py
@@ -2,6 +2,7 @@
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 
 from odoo import api, models
+from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG
 
 
 class IrConfigParameter(models.Model):
@@ -25,7 +26,7 @@ class IrConfigParameter(models.Model):
     def unlink(self):
         pls_emptied = any(record.key == "crm.pls_fields" for record in self)
         result = super(IrConfigParameter, self).unlink()
-        if pls_emptied:
+        if pls_emptied and not self._context.get(MODULE_UNINSTALL_FLAG):
             self.flush()
             self.env.registry.setup_models(self.env.cr)
-        return pls_emptied
+        return result
diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py
index 9d00322a9712344973a3952b54179e24d8d09430..7615388bdaab5fe183d8c4fcfc23572b85523089 100644
--- a/odoo/addons/base/models/ir_model.py
+++ b/odoo/addons/base/models/ir_model.py
@@ -771,7 +771,8 @@ class IrModelFields(models.Model):
                     if inverse.manual and inverse.type == 'one2many':
                         failed_dependencies.append((field, inverse))
 
-        if not self._context.get(MODULE_UNINSTALL_FLAG) and failed_dependencies:
+        uninstalling = self._context.get(MODULE_UNINSTALL_FLAG)
+        if not uninstalling and failed_dependencies:
             msg = _("The field '%s' cannot be removed because the field '%s' depends on it.")
             raise UserError(msg % failed_dependencies[0])
         elif failed_dependencies:
@@ -797,7 +798,7 @@ class IrModelFields(models.Model):
             for view in views:
                 view._check_xml()
         except Exception:
-            if not self._context.get(MODULE_UNINSTALL_FLAG):
+            if not uninstalling:
                 raise UserError("\n".join([
                     _("Cannot rename/delete fields that are still present in views:"),
                     _("Fields: %s") % ", ".join(str(f) for f in fields),
@@ -809,8 +810,9 @@ class IrModelFields(models.Model):
                         + ", ".join(str(f) for f in fields)
                         + " the following view might be broken %s" % view.name)
         finally:
-            # the registry has been modified, restore it
-            self.pool.setup_models(self._cr)
+            if not uninstalling:
+                # the registry has been modified, restore it
+                self.pool.setup_models(self._cr)
 
     @api.ondelete(at_uninstall=False)
     def _unlink_if_manual(self):