diff --git a/openerp/fields.py b/openerp/fields.py
index ba3bc259282f9fd69f6ed54dacf8a0b80312e2fa..fc421fc1cc5c5bda103918311330d6c54bb4aea9 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -64,9 +64,11 @@ def copy_cache(records, env):
     for record, target in zip(records, records.with_env(env)):
         if not target._cache:
             for name, value in record._cache.iteritems():
-                target[name] = value
                 if isinstance(value, BaseModel):
+                    target._cache[name] = value.with_env(env)
                     copy_cache(value, env)
+                else:
+                    target._cache[name] = value
 
 
 def resolve_all_mro(cls, name, reverse=False):