diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py
index 05cbed9c676fbd3acd812dbbecc5e65b06cf4842..f48f5566e403c8ac216b18a3d445df944999ed7b 100755
--- a/product/ERP5Form/ListBox.py
+++ b/product/ERP5Form/ListBox.py
@@ -44,7 +44,7 @@ from copy import copy
 from Acquisition import aq_base, aq_inner, aq_parent, aq_self
 from zLOG import LOG
 
-from Globals import InitializeClass, Persistent, Acquisition
+from Globals import InitializeClass, Persistent, Acquisition, get_request
 from Products.PythonScripts.Utility import allow_class
 
 import random
@@ -434,6 +434,13 @@ class ListBoxWidget(Widget.Widget):
                                  default='',
                                  required=1)
 
+    def render_view(self, field, value, REQUEST=None, render_format='html', key='listbox'):
+        """
+          Returns
+        """
+        if REQUEST is None: REQUEST=get_request()
+        return self.render(field, key, value, REQUEST, render_format=render_format)                                
+    
     def render(self, field, key, value, REQUEST, render_format='html'):
         """
           This is where most things happen. This method renders a list
@@ -909,7 +916,10 @@ class ListBoxWidget(Widget.Widget):
               stat_context = s[0].asContext(**stat_result)
               stat_context.absolute_url = lambda x: s[0].absolute_url()
               stat_context.domain_url = s[0].getRelativeUrl()
-              report_sections += [(s[0].id, 1, s[2], [stat_context], 1, s[3], s[4], stat_context, 0)]
+              section_title = s[0].getTitle()     
+              section_title = translate('content', section_title, default=section_title.decode('utf-8'))
+              section_title = section_title.encode('utf-8')
+              report_sections += [(s[0].getTitle(), 1, s[2], [stat_context], 1, s[3], s[4], stat_context, 0)]
               #                 report id, is_summary, depth, object_list, object_list_len, XX, XX, report_object, start, stop
             else:
               # Prepare query
@@ -947,15 +957,15 @@ class ListBoxWidget(Widget.Widget):
                 if object_list_len and s[3]:
                   # Display object data at same level as category selector
                   # If this domain is open
-                  report_sections += [ (s[0].id, 0, s[2], [object_list[0]], 1, s[3], s[4], stat_context, 0) ]
+                  report_sections += [ (s[0].getTitle(), 0, s[2], [object_list[0]], 1, s[3], s[4], stat_context, 0) ]
                   report_sections += [ (None, 0, s[2], object_list, object_list_len - 1, s[3], s[4], None, 1) ]
                 else:                  
                   if exception_uid_list is not None:
                     # Display current parent domain
-                    report_sections += [ (s[0].id, 0, s[2], [s[0]], 1, s[3], s[4], stat_context, 0) ]
+                    report_sections += [ (s[0].getTitle(), 0, s[2], [s[0]], 1, s[3], s[4], stat_context, 0) ]
                   else:                    
                     # No data to display
-                    report_sections += [ (s[0].id, 0, s[2], [None], 1, s[3], s[4], stat_context, 0) ]
+                    report_sections += [ (s[0].getTitle(), 0, s[2], [None], 1, s[3], s[4], stat_context, 0) ]
 
           # Reset original value
           selection.edit(report = None)
@@ -1353,7 +1363,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
           title_listboxline = ListBoxLine()
           title_listboxline.markTitleLine()
           for cname in columns:
-            title_listboxline.addColumn( cname[0].encode('utf-8'), cname[1].encode('utf-8'))
+            title_listboxline.addColumn( cname[0], cname[1].encode('utf-8'))
           listboxline_list.append(title_listboxline)  
 
         section_index = 0
@@ -1421,7 +1431,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
                   section_char = '-'
                 list_body = list_body + \
   """<td class="%s" align="left" valign="middle"><a href="portal_selections/foldReport?report_url=%s&form_id=%s&list_selection_name=%s">%s%s%s</a></td>
-  """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, section_name)
+  """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8')))
   
                 if render_format == 'list': 
                   
@@ -1440,7 +1450,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
                   section_char = '+'
                 list_body = list_body + \
   """<td class="%s" align="left" valign="middle"><a href="portal_selections/unfoldReport?report_url=%s&form_id=%s&list_selection_name=%s">%s%s%s</a></td>
-  """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, section_name)
+  """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8')))
 
                 if render_format == 'list': 
                   
@@ -1664,7 +1674,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
                       if 'nbsp' in attribute_value_tmp:
                         attribute_value_tmp = None
                       
-                    current_listboxline.addColumn( property_id , attribute_value_tmp)
+                    current_listboxline.addColumn( cname[0] , attribute_value_tmp)
   
                 else:
                   # Check if url_columns defines a method to retrieve the URL.
@@ -1718,7 +1728,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
                       if 'nbsp' in attribute_value_tmp:
                         attribute_value_tmp = None
                       
-                    current_listboxline.addColumn( property_id , attribute_value_tmp)
+                    current_listboxline.addColumn( cname[0] , attribute_value_tmp)
 
             list_body = list_body + '</tr>'
 
@@ -1794,16 +1804,17 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
                     if 'nbsp' in value_tmp:
                       value_tmp = None
                     
-                  current_listboxline.addColumn( column[1] , value_tmp )
+                  current_listboxline.addColumn( column[0] , value_tmp )
 
               else:
                 list_body += '<td class="Data">&nbsp;</td>'
                 #if render_format == 'list': current_listboxline.addColumn( column[1] , None)
-                if render_format == 'list': current_listboxline.addColumn( None , None)
+                if render_format == 'list':
+                  current_listboxline.addColumn( column[0] , None)
             except:
               list_body += '<td class="Data">&nbsp;</td>'
               #if render_format == 'list': current_listboxline.addColumn( column[1] , None)
-              if render_format == 'list': current_listboxline.addColumn( None , None)
+              if render_format == 'list': current_listboxline.addColumn( extended_columns[n][0] , None)
           list_body += '</tr>'
 
           if render_format == 'list':
@@ -2152,8 +2163,8 @@ class ListBoxLine:
     """
     self.setListboxLineContentMode('StatLine')
     
-  security.declarePublic('isStateLine')
-  def isStateLine(self):
+  security.declarePublic('isStatLine')
+  def isStatLine(self):
     """
       Returns 1 is this line contains no data but only stats
     """
diff --git a/product/ERP5Form/Report.py b/product/ERP5Form/Report.py
index 3ab3952150cca1312af317f297ec7f7e39cc7a99..18803c0ac6d2df5d85942f705c9d412346077b47 100755
--- a/product/ERP5Form/Report.py
+++ b/product/ERP5Form/Report.py
@@ -26,7 +26,9 @@
 #
 ##############################################################################
 
-from Globals import InitializeClass, PersistentMapping, DTMLFile
+from copy import copy
+
+from Globals import InitializeClass, PersistentMapping, DTMLFile, get_request
 from AccessControl import Unauthorized, getSecurityManager, ClassSecurityInfo
 from Products.PythonScripts.Utility import allow_class
 from Products.Formulator.DummyField import fields
@@ -180,7 +182,10 @@ class ReportSection:
   
   param_dict = {}
 
-  def __init__(self, path='', form_id='view', param_dict=None ):
+  def __init__(self, path='', form_id='view', 
+                     title=None, translated_title=None, level=1,
+                     selection_name=None, selection_params=None, listbox_display_mode=None,
+                     selection_columns=None, selection_sort_order=None ):
     """
       Initialize the line and set the default values
       Selected columns must be defined in parameter of listbox.render...
@@ -188,8 +193,16 @@ class ReportSection:
     
     self.path = path
     self.form_id = form_id
-    if param_dict is not None: self.param_dict = param_dict
-    
+    self.title = title
+    self.translated_title = translated_title
+    self.level = level
+    self.saved_request = {}
+    self.selection_name = selection_name
+    self.selection_params = selection_params
+    self.listbox_display_mode = listbox_display_mode
+    self.selection_columns = selection_columns
+    self.selection_sort_order = selection_sort_order
+        
   #security.declarePublic('__getitem__')
   #def __getitem__(self, column_id):
   #  return self.__dict__[column_id]
@@ -198,6 +211,14 @@ class ReportSection:
   def getTitle(self):
     return self.title
 
+  security.declarePublic('getTranslatedTitle')
+  def getTranslatedTitle(self):
+    return self.translated_title
+
+  security.declarePublic('getLevel')
+  def getLevel(self):
+    return self.level
+
   security.declarePublic('getPath')
   def getPath(self):
     return self.path
@@ -210,9 +231,56 @@ class ReportSection:
   def getFormId(self):
     return self.form_id
   
-  security.declarePublic('getParamDict')
-  def getParamDict(self):
-    return self.param_dict
-  
+  _no_parameter_ = []    
+    
+  security.declarePublic('pushRequest')
+  def pushReport(self, context):
+    REQUEST = get_request()
+    for k,v in self.param_dict.items():
+      self.saved_request[k] = REQUEST.form.get(k, self._no_parameter_)
+      REQUEST.form[k] = v    
+    if self.selection_name is not None:
+      portal_selections = context.portal_selections
+      if self.listbox_display_mode is not None:        
+        self.saved_display_mode = portal_selections.getListboxDisplayMode(self.selection_name, REQUEST=REQUEST)
+        portal_selections.setListboxDisplayMode(REQUEST, self.listbox_display_mode,
+                                              selection_name=self.selection_name)
+      if self.selection_params is not None:
+        self.saved_params = portal_selections.getSelectionParams(self.selection_name, REQUEST=REQUEST)
+        portal_selections.setSelectionParamsFor(self.selection_name, 
+                                                self.selection_params, REQUEST=REQUEST)
+      if self.selection_columns is not None:
+        self.saved_columns = portal_selections.getSelectionColumns(self.selection_name, REQUEST=REQUEST)
+        portal_selections.setSelectionColumns(self.selection_name, self.selection_columns,
+                                            REQUEST=REQUEST)
+      if self.selection_sort_order is not None:
+        self.saved_sort_order = portal_selections.getSelectionSortOrder(self.selection_name, REQUEST=REQUEST)
+        portal_selections.setSelectionSortOrder(self.selection_name, self.selection_sort_order,
+                                            REQUEST=REQUEST)
+
+        
+  security.declarePublic('popRequest')
+  def popReport(self, context):
+    REQUEST = get_request()
+    for k,v in self.param_dict.items():
+      if self.saved_request[k] is self._no_parameter_:
+        del REQUEST.form[k]
+      else:
+        REQUEST.form[k] = self.saved_request[k]      
+    if self.selection_name is not None:
+      portal_selections = context.portal_selections
+      if self.listbox_display_mode is not None:        
+        portal_selections.setListboxDisplayMode(REQUEST, self.saved_display_mode,
+                                              selection_name=self.selection_name)
+      if self.param_dict is not None:
+        portal_selections.setSelectionParamsFor(self.selection_name, 
+                                                self.saved_params, REQUEST=REQUEST)
+      if self.selection_columns is not None:
+        portal_selections.setSelectionColumns(self.selection_name, self.saved_columns,
+                                            REQUEST=REQUEST)
+      if self.selection_sort_order is not None:
+        portal_selections.setSelectionSortOrder(self.selection_name, self.saved_sort_order,
+                                            REQUEST=REQUEST)
+    
 InitializeClass(ReportSection)
 allow_class(ReportSection)
diff --git a/product/ERP5Form/SelectionTool.py b/product/ERP5Form/SelectionTool.py
index 2a3310bf5d1829eaa8fc4437deeb4cdbd3a0bae4..34ed5f756b0ecc837a8579b3601d8ee3def7942a 100755
--- a/product/ERP5Form/SelectionTool.py
+++ b/product/ERP5Form/SelectionTool.py
@@ -620,15 +620,26 @@ class SelectionTool( UniqueObject, SimpleItem ):
       referer = referer.replace('report_depth:int=', 'noreport_depth:int=')
       return request.RESPONSE.redirect(referer)
 
-
+    security.declareProtected(ERP5Permissions.View, 'getListboxDisplayMode')
+    def getListboxDisplayMode(self, selection_name, REQUEST=None):
+      if REQUEST is None:
+        REQUEST = get_request()
+        selection = self.getSelectionFor(selection_name, REQUEST)
+    
+        if getattr(selection, 'report_tree_mode', 0):
+          return 'ReportTreeMode'
+        elif getattr(selection, 'domain_tree_mode', 0):
+          return 'DomainTreeMode'
+        return 'FlatListMode'
+          
     security.declareProtected(ERP5Permissions.View, 'setListboxDisplayMode')
-    def setListboxDisplayMode(self, REQUEST,listbox_display_mode):
+    def setListboxDisplayMode(self, REQUEST,listbox_display_mode, selection_name=None):
       """
         Toogle display of the listbox
       """
 
       request = REQUEST
-      selection_name = request.list_selection_name
+      if selection_name is None: selection_name = request.list_selection_name
       selection = self.getSelectionFor(selection_name, REQUEST)
 
       if listbox_display_mode == 'FlatListMode':
@@ -643,7 +654,11 @@ class SelectionTool( UniqueObject, SimpleItem ):
         flat_list_mode = 0
         domain_tree_mode = 0
         report_tree_mode = 1
-
+      else:
+        flat_list_mode = 0
+        domain_tree_mode = 0
+        report_tree_mode = 0      
+        
       selection.edit(flat_list_mode=flat_list_mode,domain_tree_mode=domain_tree_mode,
                                                 report_tree_mode=report_tree_mode)
 
@@ -653,36 +668,38 @@ class SelectionTool( UniqueObject, SimpleItem ):
       selection.edit(params = params)
 
       referer = request['HTTP_REFERER']
+      referer = referer.replace('noreset=', 'reset=')
+      referer = referer.replace('noreset:int=', 'reset:int=')
       referer = referer.replace('reset=', 'noreset=')
       referer = referer.replace('reset:int=', 'noreset:int=')
       return request.RESPONSE.redirect(referer)
 
 
     security.declareProtected(ERP5Permissions.View, 'setFlatListMode')
-    def setFlatListMode(self, REQUEST):
+    def setFlatListMode(self, REQUEST, selection_name=None):
       """
         Set display of the listbox to FlatList mode
       """
 
-      return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='FlatListMode')
+      return self.setListboxDisplayMode(REQUEST=REQUEST, listbox_display_mode='FlatListMode', selection_name=selection_name)
 
 
     security.declareProtected(ERP5Permissions.View, 'setDomainTreeMode')
-    def setDomainTreeMode(self, REQUEST):
+    def setDomainTreeMode(self, REQUEST, selection_name=None):
       """
          Set display of the listbox to DomainTree mode
       """
 
-      return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='DomainTreeMode')
+      return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='DomainTreeMode', selection_name=selection_name)
 
 
     security.declareProtected(ERP5Permissions.View, 'setReportTreeMode')
-    def setReportTreeMode(self, REQUEST):
+    def setReportTreeMode(self, REQUEST, selection_name=None):
       """
         Set display of the listbox to ReportTree mode
       """
 
-      return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='ReportTreeMode')
+      return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='ReportTreeMode',selection_name=selection_name)
 
     security.declareProtected(ERP5Permissions.View, 'getSelectionSelectedValueList')
     def getSelectionSelectedValueList(self, selection_name, REQUEST=None, selection_method=None, context=None):