diff --git a/openerp/addons/test_new_api/models.py b/openerp/addons/test_new_api/models.py
index 50993d2427735f025ddf571e540bb29e8af3a010..2d6d17db541ed69b2691313f2c936a6bd0b7804d 100644
--- a/openerp/addons/test_new_api/models.py
+++ b/openerp/addons/test_new_api/models.py
@@ -143,6 +143,8 @@ class Discussion(models.Model):
     participants = fields.Many2many('res.users')
     messages = fields.One2many('test_new_api.message', 'discussion')
     message_changes = fields.Integer(string='Message changes')
+    important_messages = fields.One2many('test_new_api.message', 'discussion',
+                                         domain=[('important', '=', True)])
 
     @api.onchange('moderator')
     def _onchange_moderator(self):
@@ -167,6 +169,7 @@ class Message(models.Model):
     author_partner = fields.Many2one(
         'res.partner', compute='_compute_author_partner',
         search='_search_author_partner')
+    important = fields.Boolean()
 
     @api.one
     @api.constrains('author', 'discussion')
diff --git a/openerp/addons/test_new_api/tests/test_new_fields.py b/openerp/addons/test_new_api/tests/test_new_fields.py
index 6ee9a4a664ee088f6ff5fca49f370738b4f5fddf..16cb198c00509b8136b4a13e2bd790db539a96f7 100644
--- a/openerp/addons/test_new_api/tests/test_new_fields.py
+++ b/openerp/addons/test_new_api/tests/test_new_fields.py
@@ -448,6 +448,14 @@ class TestNewFields(common.TransactionCase):
             [('author_partner.name', '=', 'Demo User')])
         self.assertEqual(messages, self.env.ref('test_new_api.message_0_1'))
 
+    def test_60_x2many_domain(self):
+        """ test the cache consistency of a x2many field with a domain """
+        discussion = self.env.ref('test_new_api.discussion_0')
+        message = discussion.messages[0]
+        self.assertNotIn(message, discussion.important_messages)
+
+        message.important = True
+        self.assertIn(message, discussion.important_messages)
 
 
 class TestMagicFields(common.TransactionCase):
diff --git a/openerp/fields.py b/openerp/fields.py
index 94e15f1bac9ac3bdb5f6abf0da32dc79f806ca69..e44caaf1f3165f896bec1bcaba1c3163f14a88c5 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -971,7 +971,7 @@ class Field(object):
         # invalidate the fields that depend on self, and prepare recomputation
         spec = [(self, records._ids)]
         for field, path in self._triggers:
-            if path and field.store:
+            if path and field.compute and field.store:
                 # don't move this line to function top, see log
                 env = records.env(user=SUPERUSER_ID, context={'active_test': False})
                 target = env[field.model_name].search([(path, 'in', records.ids)])
@@ -1723,6 +1723,15 @@ class _RelationalMulti(_Relational):
             for record in records:
                 record[self.name] = record[self.name].filtered(accessible)
 
+    def setup_triggers(self, env):
+        super(_RelationalMulti, self).setup_triggers(env)
+        # also invalidate self when fields appearing in the domain are modified
+        if isinstance(self.domain, list):
+            comodel = env[self.comodel_name]
+            for arg in self.domain:
+                if isinstance(arg, (tuple, list)) and isinstance(arg[0], basestring):
+                    self._setup_dependency([self.name], comodel, arg[0].split('.'))
+
 
 class One2many(_RelationalMulti):
     """ One2many field; the value of such a field is the recordset of all the