diff --git a/product/ERP5Form/PlanningBox.py b/product/ERP5Form/PlanningBox.py
index 5ee4f0917f03db2c03307b92e40e93a471dc914f..b0ab3780a253bf5907f40e5e6e1d3a2c2fd0d315 100644
--- a/product/ERP5Form/PlanningBox.py
+++ b/product/ERP5Form/PlanningBox.py
@@ -584,10 +584,6 @@ class PlanningBoxValidator(Validator.StringBaseValidator):
       for axis_element in axis_group.axis_element_list:
         for activity in axis_element.activity_list:
           # for each activity, saving its properties into a dict
-          if activity.link.startswith('/erp5'):
-            pass
-          else:
-            activity.link = '/erp5/' + activity.link
           if activity.link in object_dict.keys():
             object_dict[activity.link].append(
                        { 'activity_name' : activity.name,
@@ -983,10 +979,13 @@ class PlanningBoxWidget(Widget.Widget):
     ####### DATA DEFINITION #######
     self.build_error_list = None
     # recovering usefull planning properties
-    form = field.aq_parent # getting form
-    list_method = field.get_value('list_method') # method used to list objects
-    report_root_list = field.get_value('report_root_list') # list of domains
-    portal_types = field.get_value('portal_types') # Portal Types of objects
+    # getting form
+    form = field.aq_parent
+    list_method = field.get_value('list_method')
+    title_line = field.get_value('title_line')
+    # list of domain
+    report_root_list = field.get_value('report_root_list')
+    portal_types = field.get_value('portal_types')
     # selection name used to store selection params
     selection_name = field.get_value('selection_name')
     # getting sorting keys and order (list)
@@ -1009,6 +1008,7 @@ class PlanningBoxWidget(Widget.Widget):
                                 REQUEST=REQUEST, list_method=list_method,
                                 selection=selection, params = params,
                                 selection_name=selection_name,
+                                title_line=title_line,
                                 report_root_list=report_root_list,
                                 portal_types=portal_types, sort=sort,
                                 list_error=list_error)
@@ -1045,7 +1045,7 @@ class BasicStructure:
 
   def __init__ (self, here='', form='', field='', REQUEST='', list_method='',
     selection=None, params = '', selection_name='', report_root_list='',
-    portal_types='', sort=None, list_error=None):
+    title_line='', portal_types='', sort=None, list_error=None):
     """ init main internal parameters """
     self.here = here
     self.form = form
@@ -1055,6 +1055,7 @@ class BasicStructure:
     self.selection = selection
     self.params = params
     self.list_method = list_method
+    self.title_line = title_line
     self.selection_name = selection_name
     self.report_root_list = report_root_list
     self.portal_types = portal_types
@@ -1646,7 +1647,7 @@ class BasicStructure:
 
   def buildGroupStructure(self):
       """
-      this procedure builds BasicGroup instances corresponding to the
+      This procedure builds BasicGroup instances corresponding to the
       report_group_objects returned from the ERP5 request.
       """
       position = 0
@@ -1665,9 +1666,15 @@ class BasicStructure:
         # updating position_informations
         position +=1
         # recovering usefull informations, basic_structure
-	# XXX should be used title_lines method 
-        title = report_group_object.getObject().getTitle()
-        name = report_group_object.getObject().getTitle()
+	if self.title_line not in (None,''):
+	  title_line_method = getattr(report_group_object.getObject(), \
+			                               self.title_line, None)
+        else:
+          title_line_method = getattr(report_group_object.getObject(), \
+                                                       'getTitle', None) 
+        if title_line_method is not None:
+          title = title_line_method()
+          name = title_line_method()
         depth = report_group_object.getDepth()
         is_open = report_group_object.getIsOpen()
         is_pure_summary = report_group_object.getIsPureSummary()
@@ -1693,7 +1700,6 @@ class BasicStructure:
                                  secondary_axis_stop  = group_stop,
                                  property_dict = property_dict)
 
-
         if object_list != None:
           child_group.setBasicActivities(object_list,self.list_error,
                                          secondary_axis_bounds)
@@ -2431,7 +2437,6 @@ class Activity:
     else:
       return 2
 
-
   def addBlocs(self, main_axis_start=None, main_axis_stop=None,
                secondary_axis_start=None, secondary_axis_stop=None,
                secondary_axis_range=None, planning=None, warning=0,
@@ -2844,7 +2849,7 @@ class AxisGroup:
   def addActivity(self, activity=None, axis_element_already_insered= 0):
     """
     Procedure that permits to add activity to the corresponding AxisElement in
-    an AxisGroup. can create new Axis Element in the actual Axisgroup if
+    an AxisGroup. This can create new Axis Element in the actual AxisGroup if
     necessary. Permits representation of MULTITASKING
     """
 
@@ -2853,7 +2858,6 @@ class AxisGroup:
     try:
       # iterating each axis_element of the axis_group
       for axis_element in self.axis_element_list:
-
         can_add = 1
         # recovering all activity properties of the actual axis_element and
         # iterating through them to check if one of them crosses the new one
@@ -3017,7 +3021,6 @@ class AxisGroup:
         block.position_main.relative_range = final_range
     return 1
 
-
 class AxisElement:
   """
   Represents a line in an item. In most cases, an AxisGroup element will
@@ -3053,7 +3056,7 @@ class Info:
   security.declarePublic('edit')
   def edit(self, info=None):
      """
-     special method allowing to update Info content from an external script
+     Special method allowing to update Info content from an external script
      """
      self.info = info