diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py
index d40ee0f9db41831c235c55fe5f959109d5ce30ca..6b5097ff55cab34b20ab5a5c7f03902eb5b6d0e7 100644
--- a/product/ERP5Form/ListBox.py
+++ b/product/ERP5Form/ListBox.py
@@ -1925,7 +1925,7 @@ class ListBoxRendererLine:
             processed_value = original_value
       else:
         # This is an usual line.
-        obj = self.getObject()
+        obj = None # Only evaluate if needed
         brain = self.getBrain()
 
         # Use a widget, if any.
@@ -1934,37 +1934,40 @@ class ListBoxRendererLine:
         if editable_field is not None:
           tales = editable_field.tales.get('default', '')
           if tales:
+            if obj is None: obj = self.getObject()
             original_value = editable_field.__of__(obj).get_value('default',
                                                         cell=brain)
             processed_value = original_value
 
         # If a tales expression is not defined, get a skin, an accessor or a property.
         if not tales:
-          if brain is not obj and getattr(aq_self(brain), alias, None) is not None:
+          if (obj is None or brain is not obj) and getattr(aq_self(brain), alias, None) is not None:
             original_value = getattr(brain, alias)
             processed_value = original_value
-          elif obj is not None:
-            try:
-              # Get the trailing part.
-              try:
-                property_id = sql[sql.rindex('.') + 1:]
-              except ValueError:
-                property_id = sql
-
+          else:
+            obj = self.getObject()
+            if obj is not None:
               try:
-                original_value = obj.getProperty(property_id, _marker)
-                if original_value is _marker:
-                  raise AttributeError, property_id
-                processed_value = original_value
-              except AttributeError:
-                original_value = getattr(obj, property_id, None)
-                processed_value = original_value
-            except (AttributeError, KeyError, Unauthorized):
+                # Get the trailing part.
+                try:
+                  property_id = sql[sql.rindex('.') + 1:]
+                except ValueError:
+                  property_id = sql
+  
+                try:
+                  original_value = obj.getProperty(property_id, _marker)
+                  if original_value is _marker:
+                    raise AttributeError, property_id
+                  processed_value = original_value
+                except AttributeError:
+                  original_value = getattr(obj, property_id, None)
+                  processed_value = original_value
+              except (AttributeError, KeyError, Unauthorized):
+                original_value = None
+                processed_value = 'Could not evaluate %s' % property_id
+            else:
               original_value = None
-              processed_value = 'Could not evaluate %s' % property_id
-          else:
-            original_value = None
-            processed_value = 'Object does not exist'
+              processed_value = 'Object does not exist'
 
       # If the value is callable, evaluate it.
       if callable(original_value):