diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py
index 2011ac6c9167e19410144508835ae0d710263f5b..99690cea60bcb1fdd9213161bc317738943e9206 100644
--- a/addons/mass_mailing/models/mailing.py
+++ b/addons/mass_mailing/models/mailing.py
@@ -13,6 +13,7 @@ from base64 import b64encode
 
 from odoo import api, fields, models, tools, _, SUPERUSER_ID
 from odoo.exceptions import UserError
+from odoo.osv import expression
 from odoo.tools.safe_eval import safe_eval
 
 _logger = logging.getLogger(__name__)
@@ -193,19 +194,27 @@ class MassMailing(models.Model):
             else:
                 mass_mailing.next_departure = cron_time
 
-    @api.onchange('mailing_model_id', 'contact_list_ids')
+    @api.onchange('mailing_model_name', 'contact_list_ids')
     def _onchange_model_and_list(self):
-        mailing_domain = []
+        mailing_domain = literal_eval(self.mailing_domain) if self.mailing_domain else []
         if self.mailing_model_name:
-            if self.mailing_model_name == 'mailing.list':
-                if self.contact_list_ids:
-                    mailing_domain.append(('list_ids', 'in', self.contact_list_ids.ids))
-                else:
-                    mailing_domain.append((0, '=', 1))
-            elif 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain:
-                mailing_domain.append(('opt_out', '=', False))
+            if mailing_domain:
+                try:
+                    self.env[self.mailing_model_real].search(mailing_domain, limit=1)
+                except:
+                    mailing_domain = []
+            if not mailing_domain:
+                if self.mailing_model_name == 'mailing.list':
+                    if self.contact_list_ids:
+                        mailing_domain = [('list_ids', 'in', self.contact_list_ids.ids)]
+                    else:
+                        mailing_domain = [(0, '=', 1)]
+                elif self.mailing_model_name == 'res.partner':
+                    mailing_domain = [('customer', '=', True)]
+                elif 'opt_out' in self.env[self.mailing_model_name]._fields and not self.mailing_domain:
+                    mailing_domain = [('opt_out', '=', False)]
         else:
-            mailing_domain.append((0, '=', 1))
+            mailing_domain = [(0, '=', 1)]
         self.mailing_domain = repr(mailing_domain)
 
     @api.onchange('subject')