diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py
index 9b437de86e47f5d6e939bf9f1265b1461e70e10c..aae6e4a253974c79bb0be368e86d932e582c1c2d 100644
--- a/openerp/osv/fields.py
+++ b/openerp/osv/fields.py
@@ -156,9 +156,22 @@ class integer_big(_column):
 
 class reference(_column):
     _type = 'reference'
+    _classic_read = False # post-process to handle missing target
+
     def __init__(self, string, selection, size, **args):
         _column.__init__(self, string=string, size=size, selection=selection, **args)
 
+    def get(self, cr, obj, ids, name, uid=None, context=None, values=None):
+        result = {}
+        # copy initial values fetched previously.
+        for value in values:
+            if value[name]:
+                model, res_id = value[name].split(',')
+                if obj.pool.get(model).exists(cr, uid, [int(res_id)], context=context):
+                    result[value['id']] = value[name]
+                else:
+                    result[value['id']] = False
+        return result
 
 class char(_column):
     _type = 'char'