diff --git a/product/ZSQLCatalog/ColumnMap.py b/product/ZSQLCatalog/ColumnMap.py
index dffd6b91aed54f6038c795bb713f2f4fd0a9ec09..29e597607bff3f125cfd1e52037b14f3d35aa5b8 100644
--- a/product/ZSQLCatalog/ColumnMap.py
+++ b/product/ZSQLCatalog/ColumnMap.py
@@ -34,7 +34,6 @@ from interfaces.column_map import IColumnMap
 from zope.interface.verify import verifyClass
 from zope.interface import implements
 from Products.ZSQLCatalog.interfaces.column_map import IColumnMap
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 from Products.ZSQLCatalog.TableDefinition import (PlaceHolderTableDefinition,
                                                   TableAlias,
                                                   InnerJoin,
@@ -56,7 +55,6 @@ class ColumnMap(object):
 
   implements(IColumnMap)
 
-  @profiler_decorator
   def __init__(self,
                catalog_table_name=None,
                table_override_map=None,
@@ -110,7 +108,6 @@ class ColumnMap(object):
       "Cannot do left_joins while forcing implicit join"
     )
 
-  @profiler_decorator
   def registerColumn(self, raw_column, group=DEFAULT_GROUP_ID, simple_query=None):
     assert ' as ' not in raw_column.lower()
     # Sanitize input: extract column from raw column (might contain COUNT, ...).
@@ -151,7 +148,6 @@ class ColumnMap(object):
   def ignoreColumn(self, column):
     self.column_ignore_set.add(column)
 
-  @profiler_decorator
   def registerRelatedKey(self, related_column, column):
     # XXX: should we store the group, or directly the table on which the column is mapped ?
     # The former avoids duplicating data, but requires one more lookup (group + column -> table)
@@ -168,7 +164,6 @@ class ColumnMap(object):
     self.related_group_dict[group] = related_column
     return group
 
-  @profiler_decorator
   def registerCatalog(self):
     """
       Register catalog as being in use in query, and aliased with its own
@@ -189,7 +184,6 @@ class ColumnMap(object):
     self.registerTable(self.catalog_table_name)
     self.resolveTable(self.catalog_table_name, self.catalog_table_name)
 
-  @profiler_decorator
   def registerRelatedKeyColumn(self, related_column, position, group):
     assert group in self.related_group_dict
     group = self.getRelatedKeyGroup(position, group)
@@ -200,7 +194,6 @@ class ColumnMap(object):
   def getRelatedKeyGroup(self, position, group):
     return '%s_column_%s' % (group, position)
 
-  @profiler_decorator
   def registerTable(self, table_name, alias=None, group=DEFAULT_GROUP_ID):
     table_alias_dict = self.table_alias_dict
     table_alias_key = (group, table_name)
@@ -216,7 +209,6 @@ class ColumnMap(object):
     elif alias is not None and alias != existing_value:
       raise ValueError, 'Table %r for group %r is aliased as %r, can\'t alias it now as %r' % (table_name, group, existing_value, alias)
 
-  @profiler_decorator
   def _mapColumns(self, column_table_map, table_usage_dict, column_name_set, group, vote_result_dict):
     mapping_dict = {}
     catalog_table_name = self.catalog_table_name
@@ -320,7 +312,6 @@ class ColumnMap(object):
       if table_name != catalog_table_name:
         self._addJoinTableForColumn(table_name, column_name, group)
 
-  @profiler_decorator
   def build(self, sql_catalog):
     join_query_to_build_list = []
     catalog_table_name = self.catalog_table_name
@@ -497,7 +488,6 @@ class ColumnMap(object):
     else:
       return None
 
-  @profiler_decorator
   def resolveColumn(self, column, table_name, group=DEFAULT_GROUP_ID):
     assert group in self.registry
     assert column in self.registry[group]
@@ -513,7 +503,6 @@ class ColumnMap(object):
       else:
         raise ValueError, 'Cannot remap a column to another table. column_map[%r] = %r, new = %r' % (column_map_key, column_map.get(column_map_key), table_name)
 
-  @profiler_decorator
   def resolveTable(self, table_name, alias, group=DEFAULT_GROUP_ID):
     table_alias_key = (group, table_name)
     assert table_alias_key in self.table_alias_dict
@@ -545,7 +534,6 @@ class ColumnMap(object):
     return []
     
 
-  @profiler_decorator
   def _addJoinTableForColumn(self, table_name, column, group=DEFAULT_GROUP_ID):
     """
       Declare given table as requiring to be joined with catalog table on uid.
diff --git a/product/ZSQLCatalog/Operator/ComparisonOperator.py b/product/ZSQLCatalog/Operator/ComparisonOperator.py
index 79895d68bcacd376e030b4fde530005040ef2763..f152ccea8dac45e0fdb3dfeb17cf782ff3258c21 100644
--- a/product/ZSQLCatalog/Operator/ComparisonOperator.py
+++ b/product/ZSQLCatalog/Operator/ComparisonOperator.py
@@ -32,10 +32,9 @@ from OperatorBase import OperatorBase
 from Products.ZSQLCatalog.SQLExpression import SQLExpression
 from Products.ZSQLCatalog.interfaces.operator import IOperator
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator, list_type_list
+from Products.ZSQLCatalog.SQLCatalog import list_type_list
 
 class ComparisonOperatorBase(OperatorBase):
-  @profiler_decorator
   def asSQLExpression(self, column, value_list, only_group_columns):
     """
       In a Comparison Operator, rendering order is:
@@ -53,7 +52,6 @@ class ComparisonOperatorBase(OperatorBase):
 verifyClass(IOperator, ComparisonOperatorBase)
 
 class MonovaluedComparisonOperator(ComparisonOperatorBase):
-  @profiler_decorator
   def renderValue(self, value_list):
     """
       value_list must either be a non-list or a single-value list.
@@ -65,7 +63,6 @@ class MonovaluedComparisonOperator(ComparisonOperatorBase):
         raise ValueError, '%r: value_list must not contain more than one item. Got %r' % (self, value_list)
     return self._renderValue(value_list)
 
-  @profiler_decorator
   def render(self, column, value_list):
     """
       value_list must either be a non-list or a single-value list.
@@ -80,7 +77,6 @@ class MonovaluedComparisonOperator(ComparisonOperatorBase):
 verifyClass(IOperator, MonovaluedComparisonOperator)
 
 class MultivaluedComparisonOperator(ComparisonOperatorBase):
-  @profiler_decorator
   def renderValue(self, value_list):
     """
       value_list must be a multi-value list (more than one item).
@@ -89,7 +85,6 @@ class MultivaluedComparisonOperator(ComparisonOperatorBase):
       raise ValueError, '%r: value_list must be a list of more than one item. Got %r' % (self, value_list)
     return '(%s)' % ', '.join(map(self._renderValue, value_list))
 
-  @profiler_decorator
   def render(self, column, value_list):
     """
       value_list must be a multi-value list (more than one item).
@@ -105,7 +100,6 @@ class MatchComparisonOperator(MonovaluedComparisonOperator):
     MonovaluedComparisonOperator.__init__(self, operator, '')
     self.where_expression_format_string = 'MATCH (%%(column)s) AGAINST (%%(value_list)s%s)' % (mode, )
 
-  @profiler_decorator
   def asSQLExpression(self, column, value_list, only_group_columns):
     """
       This operator can emit a select expression, so it overrides
@@ -150,7 +144,6 @@ class SphinxSEComparisonOperator(MonovaluedComparisonOperator):
     value_list = '%s;mode=extended2;limit=1000' % value_list
     return self._renderValue(value_list)
 
-  @profiler_decorator
   def asSQLExpression(self, column, value_list, only_group_columns):
     """
       This operator can emit a select expression, so it overrides
diff --git a/product/ZSQLCatalog/Operator/OperatorBase.py b/product/ZSQLCatalog/Operator/OperatorBase.py
index 9151d3372fb74a300829495e210f762c0a35ebc7..e4b6eb50150339c55f3cfabc072ba0ec914f5b93 100644
--- a/product/ZSQLCatalog/Operator/OperatorBase.py
+++ b/product/ZSQLCatalog/Operator/OperatorBase.py
@@ -32,29 +32,23 @@ from zLOG import LOG
 from Products.ZSQLCatalog.interfaces.operator import IOperator
 from zope.interface.verify import verifyClass
 from zope.interface import implements
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 
-@profiler_decorator
 def escapeString(value):
   # Inspired from ERP5Type/Utils:sqlquote, but this product must not depend on it.
   return "'" + value.replace('\\', '\\\\').replace("'", "''") + "'"
 
-@profiler_decorator
 def valueFloatRenderer(value):
   if isinstance(value, basestring):
     value = float(value.replace(' ', ''))
   return repr(value)
 
-@profiler_decorator
 def valueDateTimeRenderer(value):
   return '"%s"' % (value.toZone('UTC').ISO(), )
 
-@profiler_decorator
 def valueDefaultRenderer(value):
   LOG('OperatorBase', 0, 'Unhandled value class: %s (%r). Converted to string and escaped.' % (value.__class__.__name__, value))
   return escapeString(str(value))
 
-@profiler_decorator
 def valueNoneRenderer(value):
   return 'NULL'
 
@@ -70,7 +64,6 @@ value_search_text_renderer = {
   'DateTime': str,
 }
 
-@profiler_decorator
 def valueDefaultSearchTextRenderer(value):
   """
     This is just repr, but always surrounding text strings with doublequotes.
@@ -81,7 +74,6 @@ def valueDefaultSearchTextRenderer(value):
     result = repr(value)
   return result
 
-@profiler_decorator
 def columnFloatRenderer(column, format=None):
   """Format a float column.
 
@@ -98,7 +90,6 @@ def columnFloatRenderer(column, format=None):
       column = "TRUNCATE(%s, %s)" % (column, len(format.split('.')[-1]))
   return column
 
-@profiler_decorator
 def columnDefaultRenderer(column, format=None):
   return column
 
@@ -122,7 +113,6 @@ class OperatorBase(object):
   def getOperatorSearchText(self):
     return self.operator_search_text
 
-  @profiler_decorator
   def _render(self, column, value):
     """
       Render given column and value for use in SQL.
@@ -142,7 +132,6 @@ class OperatorBase(object):
       value = self._renderValue(value)
     return column, value
 
-  @profiler_decorator
   def _renderValue(self, value):
     """
       Render given value as string.
@@ -156,7 +145,6 @@ class OperatorBase(object):
       value = value_renderer.get(value.__class__.__name__, valueDefaultRenderer)(value)
     return value
 
-  @profiler_decorator
   def asSearchText(self, value):
     return value_search_text_renderer.get(value.__class__.__name__, valueDefaultSearchTextRenderer)(value)
 
diff --git a/product/ZSQLCatalog/Query/AutoQuery.py b/product/ZSQLCatalog/Query/AutoQuery.py
index e0b7ddaccf44d00e72c8733178caa080336df03b..cf112d0435626258ebd3bf3420f653914afee359 100644
--- a/product/ZSQLCatalog/Query/AutoQuery.py
+++ b/product/ZSQLCatalog/Query/AutoQuery.py
@@ -32,7 +32,6 @@ from Query import Query
 from zLOG import LOG
 from Products.ZSQLCatalog.interfaces.query import IQuery
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 
 class AutoQuery(Query):
   """
@@ -46,7 +45,6 @@ class AutoQuery(Query):
   """
   wrapped_query = None
 
-  @profiler_decorator
   def __init__(self, *args, **kw):
     """
       Note: "operator" might contain a logical or a comparison operator.
@@ -64,7 +62,6 @@ class AutoQuery(Query):
       raise ValueError, '"key" parameter cannot be used when more than one column is given. key=%r' % (self.search_key, )
     self.search_key = kw.pop('key', None)
 
-  @profiler_decorator
   def _createWrappedQuery(self, sql_catalog):
     """
       Create wrapped query. This requires being able to reach catalog, since
@@ -112,25 +109,21 @@ class AutoQuery(Query):
       raise ValueError, '%r failed generating a query from its parameters.' % (self, )
     self.wrapped_query = query
 
-  @profiler_decorator
   def _asSearchTextExpression(self, sql_catalog, column=None):
     if self.wrapped_query is None:
       self._createWrappedQuery(sql_catalog)
     return self.wrapped_query._asSearchTextExpression(sql_catalog, column=column)
 
-  @profiler_decorator
   def asSearchTextExpression(self, sql_catalog, column=None):
     if self.wrapped_query is None:
       self._createWrappedQuery(sql_catalog)
     return self.wrapped_query.asSearchTextExpression(sql_catalog, column=column)
 
-  @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):
     if self.wrapped_query is None:
       self._createWrappedQuery(sql_catalog)
     return self.wrapped_query.asSQLExpression(sql_catalog, column_map, only_group_columns=only_group_columns)
 
-  @profiler_decorator
   def registerColumnMap(self, sql_catalog, column_map):
     if self.wrapped_query is None:
       self._createWrappedQuery(sql_catalog)
diff --git a/product/ZSQLCatalog/Query/ComplexQuery.py b/product/ZSQLCatalog/Query/ComplexQuery.py
index 75a5eb9dcbc9f46da2c0d2a0d76d4c7b58fe8aa0..6b3e8d777511225866ad52d6ae5a7ae1e1f2d1ca 100644
--- a/product/ZSQLCatalog/Query/ComplexQuery.py
+++ b/product/ZSQLCatalog/Query/ComplexQuery.py
@@ -33,7 +33,6 @@ from Products.ZSQLCatalog.SQLExpression import SQLExpression
 from SQLQuery import SQLQuery
 from Products.ZSQLCatalog.interfaces.query import IQuery
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 from Products.ZSQLCatalog.Query.AutoQuery import AutoQuery
 from Products.ZSQLCatalog.Query.RelatedQuery import RelatedQuery
 
@@ -46,7 +45,6 @@ class ComplexQuery(Query):
   """
     A ComplexQuery represents logical operations between Query instances.
   """
-  @profiler_decorator
   def __init__(self, *args, **kw):
     """
       *args (tuple of Query or of list of Query)
@@ -142,7 +140,6 @@ class ComplexQuery(Query):
         self.logical_operator == 'or'):
       raise NotImplementedError
 
-  @profiler_decorator
   def _asSearchTextExpression(self, sql_catalog, column=None):
     if column in (None, ''):
       query_column = column
@@ -186,7 +183,6 @@ class ComplexQuery(Query):
         result = '%s:%s' % (column, result)
     return self_is_composed, result
 
-  @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):
     sql_expression_list = [x.asSQLExpression(sql_catalog, column_map, only_group_columns)
                            for x in self.query_list]
@@ -197,7 +193,6 @@ class ComplexQuery(Query):
       where_expression_operator=self.logical_operator,
       from_expression=self.from_expression)
 
-  @profiler_decorator
   def registerColumnMap(self, sql_catalog, column_map):
     for query in self.query_list:
       query.registerColumnMap(sql_catalog, column_map)
@@ -205,7 +200,6 @@ class ComplexQuery(Query):
   def __repr__(self):
     return '<%s of %r.join(%r)>' % (self.__class__.__name__, self.logical_operator, self.query_list)
 
-  @profiler_decorator
   def setTableAliasList(self, table_alias_list):
     """
       This function is here for backward compatibility.
@@ -217,7 +211,6 @@ class ComplexQuery(Query):
     assert len(self.query_list) == 1
     self.query_list[0].setTableAliasList(table_alias_list)
 
-  @profiler_decorator
   def setGroup(self, group):
     for query in self.query_list:
       query.setGroup(group)
diff --git a/product/ZSQLCatalog/Query/EntireQuery.py b/product/ZSQLCatalog/Query/EntireQuery.py
index 0b51f15004907c225dfe41dbabe33f264f2f34e4..b0203a2f399fcb7f6be2336a860d5a6b9f53e815 100644
--- a/product/ZSQLCatalog/Query/EntireQuery.py
+++ b/product/ZSQLCatalog/Query/EntireQuery.py
@@ -35,7 +35,6 @@ from zLOG import LOG
 from Products.ZSQLCatalog.interfaces.entire_query import IEntireQuery
 from zope.interface.verify import verifyClass
 from zope.interface import implements
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 from Products.ZSQLCatalog.TableDefinition import LegacyTableDefinition
 
 def defaultDict(value):
@@ -55,7 +54,6 @@ class EntireQuery(object):
 
   column_map = None
 
-  @profiler_decorator
   def __init__(self, query,
                order_by_list=(),
                group_by_list=(),
@@ -82,7 +80,6 @@ class EntireQuery(object):
   def asSearchTextExpression(self, sql_catalog):
     return self.query.asSearchTextExpression(sql_catalog)
 
-  @profiler_decorator
   def asSQLExpression(self, sql_catalog, only_group_columns):
     column_map = self.column_map
     if column_map is None:
diff --git a/product/ZSQLCatalog/Query/RelatedQuery.py b/product/ZSQLCatalog/Query/RelatedQuery.py
index 951cf712728235ba42d3f268064f7f30b4f4c443..859f65bcf77a7b69ad79a590ddcd3899e7a87222 100644
--- a/product/ZSQLCatalog/Query/RelatedQuery.py
+++ b/product/ZSQLCatalog/Query/RelatedQuery.py
@@ -32,13 +32,11 @@ from Query import Query
 from Products.ZSQLCatalog.SQLExpression import SQLExpression
 from Products.ZSQLCatalog.interfaces.query import IQuery
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 
 class RelatedQuery(Query):
   """
     A RelatedQuery represents the is a container for a join condition.
   """
-  @profiler_decorator
   def __init__(self, search_key, join_condition=None, table_alias_list=None):
     """
       search_key (SearchKey)
@@ -53,7 +51,6 @@ class RelatedQuery(Query):
     self.join_condition = join_condition
     self.table_alias_list = table_alias_list
 
-  @profiler_decorator
   def setTableAliasList(self, table_alias_list):
     """
       This function is here for backward compatibility.
@@ -64,7 +61,6 @@ class RelatedQuery(Query):
     """
     self.table_alias_list = table_alias_list
 
-  @profiler_decorator
   def _asSearchTextExpression(self, sql_catalog, column=None):
     assert column is None
     join_condition = self.join_condition
@@ -74,7 +70,6 @@ class RelatedQuery(Query):
       result = join_condition.asSearchTextExpression(sql_catalog, column=self.search_key.getColumn())
     return False, result
 
-  @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):
     sql_expression_list = [self.search_key.buildSQLExpression(sql_catalog, column_map, only_group_columns, self.group)]
     join_condition = self.join_condition
@@ -82,7 +77,6 @@ class RelatedQuery(Query):
       sql_expression_list.append(join_condition.asSQLExpression(sql_catalog, column_map, only_group_columns))
     return SQLExpression(self, sql_expression_list=sql_expression_list, where_expression_operator='and')
 
-  @profiler_decorator
   def registerColumnMap(self, sql_catalog, column_map):
     self.group = self.search_key.registerColumnMap(column_map, table_alias_list=self.table_alias_list)
     join_condition = self.join_condition
diff --git a/product/ZSQLCatalog/Query/SimpleQuery.py b/product/ZSQLCatalog/Query/SimpleQuery.py
index dd4c7c1faddf7e012c584c9e13e004836af36f5f..dae9d3a6cf3d8a5bf391b381bd1d0b513f2c2660 100644
--- a/product/ZSQLCatalog/Query/SimpleQuery.py
+++ b/product/ZSQLCatalog/Query/SimpleQuery.py
@@ -31,7 +31,7 @@
 from Query import Query
 from Products.ZSQLCatalog.interfaces.query import IQuery
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator, list_type_list
+from Products.ZSQLCatalog.SQLCatalog import list_type_list
 from zLOG import LOG, WARNING
 
 NULL_SEARCH_TEXT_OPERATOR_DICT = {
@@ -46,7 +46,6 @@ class SimpleQuery(Query):
     A SimpleQuery represents a single comparison between a single column and
     one or more values.
   """
-  @profiler_decorator
   def __init__(self, search_key=None, comparison_operator='=', group=None, **kw):
     """
       search_key (None, SearchKey instance)
@@ -103,17 +102,14 @@ class SimpleQuery(Query):
     self.comparison_operator = comparison_operator
     self.group = group
 
-  @profiler_decorator
   def _asSearchTextExpression(self, sql_catalog, column=None):
     return False, self.getSearchKey(sql_catalog).buildSearchTextExpression(self.getOperator(sql_catalog), self.getValue(), column=column)
 
-  @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):
     return self.getSearchKey(sql_catalog).buildSQLExpression(
       self.getOperator(sql_catalog), self.getValue(),
       column_map, only_group_columns, group=self.group)
 
-  @profiler_decorator
   def registerColumnMap(self, sql_catalog, column_map):
     self.group = self.getSearchKey(sql_catalog).registerColumnMap(column_map, group=self.group, simple_query=self)
 
diff --git a/product/ZSQLCatalog/SQLCatalog.py b/product/ZSQLCatalog/SQLCatalog.py
index f30b7a16a3ae79a34e27b7d8a59580d4991b8d5a..a46d9dc7616d36380548c08dbb6d449bc429d9a7 100644
--- a/product/ZSQLCatalog/SQLCatalog.py
+++ b/product/ZSQLCatalog/SQLCatalog.py
@@ -59,14 +59,6 @@ try:
 except ImportError:
   ActiveObject = ExtensionClass.Base
 
-
-PROFILING_ENABLED = False
-if PROFILING_ENABLED:
-  from tiny_profiler import profiler_decorator, profiler_report, profiler_reset
-else:
-  def profiler_decorator(func):
-    return func
-
 try:
   from Products.CMFCore.Expression import Expression
   from Products.PageTemplates.Expressions import getEngine
@@ -1108,14 +1100,11 @@ class Catalog(Folder,
     """
     return self._getColumnIds()[:]
 
-  @profiler_decorator
   @transactional_cache_decorator('SQLCatalog.getColumnMap')
-  @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getColumnMap',
     cache_factory='erp5_content_long',
     cache_id_generator=generateCatalogCacheId,
   )
-  @profiler_decorator
   def getColumnMap(self):
     """
     Calls the show column method and returns dictionnary of
@@ -1128,14 +1117,11 @@ class Catalog(Folder,
         result.setdefault('%s.%s' % (table, field), []).append(table) # Is this inconsistent ?
     return result
 
-  @profiler_decorator
   @transactional_cache_decorator('SQLCatalog.getResultColumnIds')
-  @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getResultColumnIds',
     cache_factory='erp5_content_long',
     cache_id_generator=generateCatalogCacheId,
   )
-  @profiler_decorator
   def getResultColumnIds(self):
     """
     Calls the show column method and returns dictionnary of
@@ -1150,14 +1136,11 @@ class Catalog(Folder,
     keys.sort()
     return keys
 
-  @profiler_decorator
   @transactional_cache_decorator('SQLCatalog.getSortColumnIds')
-  @profiler_decorator
   @caching_instance_method(id='SQLCatalog.getSortColumnIds',
       cache_factory='erp5_content_long',
       cache_id_generator=generateCatalogCacheId,
   )
-  @profiler_decorator
   def getSortColumnIds(self):
     """
     Calls the show column method and returns dictionnary of
@@ -1940,9 +1923,7 @@ class Catalog(Folder,
     """
     return self.getCatalogMethodIds(valid_method_meta_type_list=('Script (Python)', ))
 
-  @profiler_decorator
   @transactional_cache_decorator('SQLCatalog._getSQLCatalogRelatedKeyList')
-  @profiler_decorator
   def _getSQLCatalogRelatedKeySet(self):
     column_map = self.getColumnMap()
     column_set = set(column_map)
@@ -2008,7 +1989,6 @@ class Catalog(Folder,
     """
     return self._getTableIndex(table).copy()
 
-  @profiler_decorator
   def isValidColumn(self, column_id):
     """
       Tells wether given name is or not an existing column.
@@ -2023,7 +2003,6 @@ class Catalog(Folder,
         result = self.getRelatedKeyDefinition(column_id) is not None
     return result
 
-  @profiler_decorator
   def getRelatedKeyDefinition(self, key):
     """
       Returns the definition of given related key name if found, None
@@ -2067,7 +2046,6 @@ class Catalog(Folder,
   def getScriptableKeyScript(self, key):
     return self._getgetScriptableKeyDict().get(key)
 
-  @profiler_decorator
   def getColumnSearchKey(self, key, search_key_name=None):
     """
       Return a SearchKey instance for given key, using search_key_name
@@ -2096,7 +2074,6 @@ class Catalog(Folder,
   def hasColumn(self, column):
     return self.getColumnSearchKey(column)[0] is not None
 
-  @profiler_decorator
   def getColumnDefaultSearchKey(self, key, search_key_name=None):
     """
       Return a SearchKey instance which would ultimately receive the value
@@ -2112,7 +2089,6 @@ class Catalog(Folder,
           related_key_definition=related_key_definition)
     return search_key
 
-  @profiler_decorator
   def buildSingleQuery(self, key, value, search_key_name=None, logical_operator=None, comparison_operator=None):
     """
       From key and value, determine the SearchKey to use and generate a Query
@@ -2140,7 +2116,6 @@ class Catalog(Folder,
       result = script(value)
     return result
 
-  @profiler_decorator
   def _buildQueryFromAbstractSyntaxTreeNode(self, node, search_key, wrap):
     if search_key.dequoteParsedText():
       _dequote = dequote
@@ -2178,7 +2153,6 @@ class Catalog(Folder,
         result = None
     return result
 
-  @profiler_decorator
   def buildQueryFromAbstractSyntaxTreeNode(self, node, key, wrap=lambda x: x):
     """
       Build a query from given Abstract Syntax Tree (AST) node by recursing in
@@ -2229,7 +2203,6 @@ class Catalog(Folder,
     return self._parseSearchText(self.getSearchKey(
       column, search_key=search_key), search_text, is_valid=is_valid)
 
-  @profiler_decorator
   def buildQuery(self, kw, ignore_empty_string=True, operator='and'):
     query_list = []
     append = query_list.append
@@ -2317,7 +2290,6 @@ class Catalog(Folder,
     return ComplexQuery(query_list, logical_operator=operator,
         unknown_column_dict=unknown_column_dict)
 
-  @profiler_decorator
   def buildOrderByList(self, sort_on=None, sort_order=None, order_by_expression=None):
     """
       Internal method. Should not be used by code outside buildSQLQuery.
@@ -2361,7 +2333,6 @@ class Catalog(Folder,
       order_by_list = [[x.strip()] for x in order_by_expression.split(',')]
     return order_by_list
 
-  @profiler_decorator
   def buildEntireQuery(self, kw, query_table='catalog', ignore_empty_string=1,
                        limit=None, extra_column_list=()):
     group_by_list = kw.pop('group_by_list', kw.pop('group_by', kw.pop('group_by_expression', ())))
@@ -2433,7 +2404,6 @@ class Catalog(Folder,
       extra_column_list=extra_column_list,
       from_expression=from_expression)
 
-  @profiler_decorator
   def buildSQLQuery(self, query_table='catalog', REQUEST=None,
                           ignore_empty_string=1, only_group_columns=False,
                           limit=None, extra_column_list=(),
@@ -2447,14 +2417,11 @@ class Catalog(Folder,
   # Compatibililty SQL Sql
   buildSqlQuery = buildSQLQuery
 
-  @profiler_decorator
   @transactional_cache_decorator('SQLCatalog._getSearchKeyDict')
-  @profiler_decorator
   @caching_instance_method(id='SQLCatalog._getSearchKeyDict',
     cache_factory='erp5_content_long',
     cache_id_generator=generateCatalogCacheId,
   )
-  @profiler_decorator
   def _getSearchKeyDict(self):
     result = {}
     search_key_column_dict = {
@@ -2476,7 +2443,6 @@ class Catalog(Folder,
         LOG('SQLCatalog', WARNING, 'Wrong configuration for sql_catalog_search_keys: %r' % line)
     return result
 
-  @profiler_decorator
   def getSearchKey(self, column, search_key=None):
     """
       Return an instance of a SearchKey class.
@@ -2508,7 +2474,6 @@ class Catalog(Folder,
                                  # the ZSQLMethod class itself
                                  'zsql_brain',
                                ])
-  @profiler_decorator
   def _queryResults(self, REQUEST=None, build_sql_query_method=None, **kw):
     """ Returns a list of brains from a set of constraints on variables """
     if build_sql_query_method is None:
@@ -2823,7 +2788,6 @@ import SearchKey
 SEARCH_KEY_INSTANCE_POOL = {}
 SEARCH_KEY_CLASS_CACHE = {}
 
-@profiler_decorator
 def getSearchKeyInstance(search_key_class_name, column):
   assert isinstance(search_key_class_name, basestring)
   try:
@@ -2877,14 +2841,3 @@ from Query.EntireQuery import EntireQuery
 from Query.SQLQuery import SQLQuery
 
 verifyClass(ISearchKeyCatalog, Catalog)
-
-if PROFILING_ENABLED:
-  def Catalog_dumpProfilerData(self):
-    return profiler_report()
-
-  def Catalog_resetProfilerData(self):
-    profiler_reset()
-
-  Catalog.dumpProfilerData = Catalog_dumpProfilerData
-  Catalog.resetProfilerData = Catalog_resetProfilerData
-
diff --git a/product/ZSQLCatalog/SQLExpression.py b/product/ZSQLCatalog/SQLExpression.py
index 1052db718a85032de0ffb838ddb5ace14e6f3c7e..5158d1c9d35837b0116425d5a99f66d9975c9094 100644
--- a/product/ZSQLCatalog/SQLExpression.py
+++ b/product/ZSQLCatalog/SQLExpression.py
@@ -32,7 +32,6 @@ from interfaces.sql_expression import ISQLExpression
 from zope.interface.verify import verifyClass
 from zope.interface import implements
 from types import NoneType
-from SQLCatalog import profiler_decorator
 
 SQL_LIST_SEPARATOR = ', '
 SQL_TABLE_FORMAT = '%s' # XXX: should be changed to '`%s`', but this breaks some ZSQLMethods.
@@ -85,7 +84,6 @@ class SQLExpression(object):
 
   implements(ISQLExpression)
 
-  @profiler_decorator
   def __init__(self,
                query,
                table_alias_dict=None,
@@ -136,7 +134,6 @@ class SQLExpression(object):
                     DeprecationWarning)
     self.from_expression = from_expression
 
-  @profiler_decorator
   def getTableAliasDict(self):
     """
       Returns a dictionary:
@@ -163,7 +160,6 @@ class SQLExpression(object):
         result[alias] = table_name
     return result
 
-  @profiler_decorator
   def getFromExpression(self):
     """
       Returns a TableDefinition stored in one of the from_expressions or None
@@ -186,7 +182,6 @@ class SQLExpression(object):
         raise ValueError, message
     return result
 
-  @profiler_decorator
   def getOrderByList(self):
     """
       Returns a list of strings.
@@ -206,7 +201,6 @@ class SQLExpression(object):
           known_column_set.add(order_by[0])
     return result
 
-  @profiler_decorator
   def _getOrderByDict(self, delay_error=True):
     result_dict = self.order_by_dict.copy()
     for sql_expression in self.sql_expression_list:
@@ -232,7 +226,6 @@ class SQLExpression(object):
   def getOrderByDict(self):
     return self._getOrderByDict(delay_error=False)
 
-  @profiler_decorator
   def getOrderByExpression(self):
     """
       Returns a string.
@@ -251,7 +244,6 @@ class SQLExpression(object):
       append(expression)
     return SQL_LIST_SEPARATOR.join(result)
 
-  @profiler_decorator
   def getWhereExpression(self):
     """
       Returns a string.
@@ -273,7 +265,6 @@ class SQLExpression(object):
         result = '(%s)' % (operator.join(x.getWhereExpression() for x in self.sql_expression_list), )
     return result
 
-  @profiler_decorator
   def getLimit(self):
     """
       Returns a list of 1 or 2 items (int or string).
@@ -296,7 +287,6 @@ class SQLExpression(object):
         raise ValueError, message
     return result
 
-  @profiler_decorator
   def getLimitExpression(self):
     """
       Returns a string.
@@ -305,7 +295,6 @@ class SQLExpression(object):
     """
     return SQL_LIST_SEPARATOR.join(str(x) for x in self.getLimit())
 
-  @profiler_decorator
   def getGroupByset(self):
     """
       Returns a set of strings.
@@ -318,7 +307,6 @@ class SQLExpression(object):
       result.update(sql_expression.getGroupByset())
     return result
 
-  @profiler_decorator
   def getGroupByExpression(self):
     """
       Returns a string.
@@ -330,7 +318,6 @@ class SQLExpression(object):
   def canMergeSelectDict(self):
     return self.can_merge_select_dict
 
-  @profiler_decorator
   def _getSelectDict(self):
     result = self.select_dict.copy()
     mergeable_set = set()
@@ -361,7 +348,6 @@ class SQLExpression(object):
           mergeable_set.add(alias)
     return result, mergeable_set
 
-  @profiler_decorator
   def getSelectDict(self):
     """
       Returns a dict:
@@ -374,7 +360,6 @@ class SQLExpression(object):
     """
     return self._getSelectDict()[0]
 
-  @profiler_decorator
   def getSelectExpression(self):
     """
       Returns a string.
@@ -395,7 +380,6 @@ class SQLExpression(object):
       append((SQL_TABLE_FORMAT % (alias, ), SQL_TABLE_FORMAT % (table, )))
     return from_table_list
 
-  @profiler_decorator
   def asSQLExpressionDict(self):
     from_expression = self.getFromExpression()
     from_table_list = self.getFromTableList()
diff --git a/product/ZSQLCatalog/SearchKey/DateTimeKey.py b/product/ZSQLCatalog/SearchKey/DateTimeKey.py
index 9e8ea5e34f02fcc4bb92a5f6be422b81f0c8b730..b2900529c5ef3cfef1bae74f5ba1d05ecbc4ee7d 100644
--- a/product/ZSQLCatalog/SearchKey/DateTimeKey.py
+++ b/product/ZSQLCatalog/SearchKey/DateTimeKey.py
@@ -36,7 +36,6 @@ from zLOG import LOG
 from DateTime.DateTime import DateTime, DateTimeError, _cache
 from Products.ZSQLCatalog.interfaces.search_key import ISearchKey
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 from Products.ZSQLCatalog.SearchText import parse
 
 MARKER = []
@@ -48,11 +47,9 @@ date_completion_format_dict = {
   'international': ['%s/01/01', '%s/01']
 }
 
-@profiler_decorator
 def _DateTime(*args, **kw):
   return DateTime(*args, **kw)
 
-@profiler_decorator
 def castDate(value, change_timezone=True):
   if value is None:
     return None
@@ -114,7 +111,6 @@ def getYearLen(datetime):
 
 delta_list = [getYearLen, getMonthLen, 1, 1.0 / 24, 1.0 / (24 * 60), 1.0 / (24 * 60 * 60)]
 
-@profiler_decorator
 def countDelimiters(value):
   assert isinstance(value, basestring)
   # Detect if timezone was provided, to avoid counting it as in precision computation.
@@ -135,7 +131,6 @@ def countDelimiters(value):
       last_delimiter = None
   return delimiter_count
 
-@profiler_decorator
 def getPeriodBoundaries(value):
   first_date = castDate(value, change_timezone=False)
   if isinstance(value, dict):
@@ -152,7 +147,6 @@ def getPeriodBoundaries(value):
     delta = delta(first_date)
   return first_date.toZone('UTC'), (first_date + delta).toZone('UTC')
 
-@profiler_decorator
 def wholePeriod(search_key, group, column, value_list, exclude=False):
   if exclude:
     first_operator = '<'
@@ -177,7 +171,6 @@ def matchWholePeriod(search_key, group, column, value_list, *ignored):
 def matchNotWholePeriod(search_key, group, column, value_list, *ignored):
   return wholePeriod(search_key, group, column, value_list, exclude=True)
 
-@profiler_decorator
 def matchExact(search_key, group, column, value_list, comparison_operator, logical_operator):
   if comparison_operator is None:
     comparison_operator = '='
@@ -191,11 +184,9 @@ def matchExact(search_key, group, column, value_list, comparison_operator, logic
 def getNextPeriod(value):
   return getPeriodBoundaries(value)[1]
 
-@profiler_decorator
 def matchBeforeNextPeriod(search_key, group, column, value_list, comparison_operator, logical_operator):
   return matchExact(search_key, group, column, [getNextPeriod(x) for x in value_list], '<', logical_operator)
 
-@profiler_decorator
 def matchAfterPeriod(search_key, group, column, value_list, comparison_operator, logical_operator):
   return matchExact(search_key, group, column, [getNextPeriod(x) for x in value_list], '>=', logical_operator)
 
@@ -275,7 +266,6 @@ class DateTimeKey(SearchKey):
   def _renderValueAsSearchText(self, value, operator):
     return '"%s"' % (DateTime(value).ISO(), )
 
-  @profiler_decorator
   def _buildQuery(self, operator_value_dict, logical_operator, parsed, group):
     column = self.getColumn()
     query_list = []
diff --git a/product/ZSQLCatalog/SearchKey/FullTextKey.py b/product/ZSQLCatalog/SearchKey/FullTextKey.py
index f4edfc292a05a2da2a4d78702badab4bbb8f8fab..f01e84976cbcb0d784d1d26fa6f33a7a19148e58 100644
--- a/product/ZSQLCatalog/SearchKey/FullTextKey.py
+++ b/product/ZSQLCatalog/SearchKey/FullTextKey.py
@@ -33,7 +33,6 @@ from Products.ZSQLCatalog.Query.SimpleQuery import SimpleQuery
 from Products.ZSQLCatalog.SearchText import parse
 from Products.ZSQLCatalog.interfaces.search_key import ISearchKey
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 import re
 
 FULLTEXT_BOOLEAN_DETECTOR = re.compile(r'.*((^|\s)[\+\-<>\(\~]|[\*\)](\s|$))')
@@ -54,7 +53,6 @@ class FullTextKey(SearchKey):
   def _renderValueAsSearchText(self, value, operator):
     return '(%s)' % (value, )
 
-  @profiler_decorator
   def _processSearchValue(self, search_value, logical_operator,
                           comparison_operator):
     """
@@ -81,7 +79,6 @@ class FullTextKey(SearchKey):
         operator_value_dict['match'] = new_value_list
     return operator_value_dict, logical_operator, parsed
 
-  @profiler_decorator
   def _buildQuery(self, operator_value_dict, logical_operator, parsed, group):
     """
       Special Query builder for FullText queries: merge all values having the
diff --git a/product/ZSQLCatalog/SearchKey/RelatedKey.py b/product/ZSQLCatalog/SearchKey/RelatedKey.py
index c91e89820ffb5e0bfc2dc3e797135e55d04a39a0..1c624f51ccd050fedeb3a11dc69559b43b038e39 100644
--- a/product/ZSQLCatalog/SearchKey/RelatedKey.py
+++ b/product/ZSQLCatalog/SearchKey/RelatedKey.py
@@ -36,7 +36,6 @@ from Products.ZSQLCatalog.SQLExpression import SQLExpression
 from Products.ZSQLCatalog.interfaces.search_key import IRelatedKey
 from zope.interface.verify import verifyClass
 from zope.interface import implements
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 from Products.ZSQLCatalog.TableDefinition import TableAlias, InnerJoin, LeftJoin
 
 from logging import getLogger
@@ -68,7 +67,6 @@ class RelatedKey(SearchKey):
 
   related_key_definition = None
 
-  @profiler_decorator
   def _buildRelatedKey(self, related_key_definition):
     """
       Extract RelatedKey parameters from its definition, and cache this
@@ -90,7 +88,6 @@ class RelatedKey(SearchKey):
       table_list, self.real_column, self.related_key_id = related_key_definition.split('/')
       self.table_list = table_list.split(',')
 
-  @profiler_decorator
   def _getSearchKey(self, sql_catalog, search_key_name):
     """
       Get search key relevant to the actual column.
@@ -102,7 +99,6 @@ class RelatedKey(SearchKey):
     """
     return sql_catalog.getSearchKey(self.real_column, search_key_name)
 
-  @profiler_decorator
   def getSearchKey(self, sql_catalog, related_key_definition, search_key_name=None):
     """
       Get search key relevant to the actual column, extracting information
@@ -118,7 +114,6 @@ class RelatedKey(SearchKey):
     self._buildRelatedKey(related_key_definition)
     return self._getSearchKey(sql_catalog, search_key_name)
 
-  @profiler_decorator
   def buildQuery(self, sql_catalog, related_key_definition,
                  search_value=None):
     self._buildRelatedKey(related_key_definition)
@@ -128,7 +123,6 @@ class RelatedKey(SearchKey):
     return RelatedQuery(search_key=self,
                         join_condition=join_condition)
 
-  @profiler_decorator
   def registerColumnMap(self, column_map, table_alias_list=None):
     related_column = self.getColumn()
     group = column_map.registerRelatedKey(related_column, self.real_column)
@@ -189,7 +183,6 @@ class RelatedKey(SearchKey):
       condition = join_query_list[-1]
       return InnerJoin(left, right, condition)
 
-  @profiler_decorator
   def buildSQLExpression(self, sql_catalog, column_map, only_group_columns, group):
     """
       Render RelatedKey's ZSQLMethod by providing it table aliases from
diff --git a/product/ZSQLCatalog/SearchKey/SearchKey.py b/product/ZSQLCatalog/SearchKey/SearchKey.py
index 9e7727c0d6cecdb3b0ca2a7b7a251920a5e0018f..e23447918c46f6b33e62867c240092520f0461e5 100644
--- a/product/ZSQLCatalog/SearchKey/SearchKey.py
+++ b/product/ZSQLCatalog/SearchKey/SearchKey.py
@@ -34,7 +34,7 @@ from Products.ZSQLCatalog.Query.ComplexQuery import ComplexQuery
 from Products.ZSQLCatalog.interfaces.search_key import ISearchKey
 from zope.interface.verify import verifyClass
 from zope.interface import implements
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator, list_type_list
+from Products.ZSQLCatalog.SQLCatalog import list_type_list
 
 single_operator_dict = {
   'min': '>=',
@@ -91,14 +91,12 @@ class SearchKey(object):
   def getColumn(self):
     return self.column
 
-  @profiler_decorator
   def buildSQLExpression(self, operator, value, column_map, only_group_columns,
                          group):
     column_name = self.getColumn()
     rendered_column = column_map.asSQLColumn(column_name, group=group)
     return operator.asSQLExpression(rendered_column, value, only_group_columns)
 
-  @profiler_decorator
   def _renderValueAsSearchText(self, value, operator):
     """
       Render a single value as valid SearchText using provided operator.
@@ -115,7 +113,6 @@ class SearchKey(object):
       value = operator_value_deprocessor(value)
     return operator.asSearchText(value)
 
-  @profiler_decorator
   def buildSearchTextExpression(self, operator, value, column=None):
     operator_text = operator.getOperatorSearchText()
     if column is None:
@@ -137,13 +134,11 @@ class SearchKey(object):
       result = '%s:%s' % (column, result)
     return result
 
-  @profiler_decorator
   def registerColumnMap(self, column_map, group, simple_query):
     column_map.registerColumn(self.getColumn(), group=group,
                               simple_query=simple_query)
     return group
 
-  @profiler_decorator
   def _getComparisonOperator(self, value):
     """
       From a basestring instance, return a contained operator and value
@@ -164,7 +159,6 @@ class SearchKey(object):
       operator = self._guessComparisonOperator(value)
     return operator, value
 
-  @profiler_decorator
   def _guessComparisonOperator(self, value):
     """
       From a basestring instance, return an operator.
@@ -176,7 +170,6 @@ class SearchKey(object):
     """
     return self.default_comparison_operator
 
-  @profiler_decorator
   def _preprocessValue(self, value, operator):
     operator_value_preprocessor = operator_value_preprocessor_dict.get(
       operator)
@@ -184,7 +177,6 @@ class SearchKey(object):
       value = operator_value_preprocessor(value)
     return value
 
-  @profiler_decorator
   def _processSearchValue(self, search_value, default_logical_operator,
                           comparison_operator):
     """
@@ -325,7 +317,6 @@ class SearchKey(object):
       operator_value_dict[comparison_operator] = search_value
     return operator_value_dict, logical_operator, parsed
 
-  @profiler_decorator
   def _buildQuery(self, operator_value_dict, logical_operator, parsed, group):
     """
       Create Queries from values, logical and comparison operators.
@@ -354,7 +345,6 @@ class SearchKey(object):
                            group=group, **{column: value}))
     return query_list
 
-  @profiler_decorator
   def buildQuery(self, search_value, group=None, logical_operator=None,
                  comparison_operator=None):
     assert logical_operator in (None, 'and', 'or'), repr(logical_operator)
diff --git a/product/ZSQLCatalog/SearchKey/SphinxSEFullTextKey.py b/product/ZSQLCatalog/SearchKey/SphinxSEFullTextKey.py
index 8758d506976a6598b462d6f6586b12c6cfa331ac..ae8b5c81dbc665da3d1aeecba7b528a0b28d4cdb 100644
--- a/product/ZSQLCatalog/SearchKey/SphinxSEFullTextKey.py
+++ b/product/ZSQLCatalog/SearchKey/SphinxSEFullTextKey.py
@@ -30,7 +30,6 @@ from Products.ZSQLCatalog.Query.SimpleQuery import SimpleQuery
 from Products.ZSQLCatalog.SearchText import parse
 from Products.ZSQLCatalog.interfaces.search_key import ISearchKey
 from zope.interface.verify import verifyClass
-from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
 
 class SphinxSEFullTextKey(SearchKey):
   """
@@ -48,7 +47,6 @@ class SphinxSEFullTextKey(SearchKey):
   def _renderValueAsSearchText(self, value, operator):
     return '(%s)' % (value, )
 
-  @profiler_decorator
   def _buildQuery(self, operator_value_dict, logical_operator, parsed, group):
     """
       Special Query builder for FullText queries: merge all values having the
diff --git a/product/ZSQLCatalog/SearchText/SearchTextParser.py b/product/ZSQLCatalog/SearchText/SearchTextParser.py
index 8d919421d70192a3d103df3de187047cbfa640a6..d97a1aaffaaf2ad23fe8956c0482b9ecf7d2c8f8 100755
--- a/product/ZSQLCatalog/SearchText/SearchTextParser.py
+++ b/product/ZSQLCatalog/SearchText/SearchTextParser.py
@@ -32,11 +32,6 @@ import threading
 from AdvancedSearchTextDetector import AdvancedSearchTextDetector
 from AdvancedSearchTextParser import AdvancedSearchTextParser
 from lexer import ParserOrLexerError
-try:
-  from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
-except ImportError:
-  def profiler_decorator(funct):
-    return funct
 
 if __name__ == '__main__':
   DEBUG = 1
@@ -90,11 +85,9 @@ def safeParsingDecorator(func):
   wrapper.__name__ = func.__name__
   return wrapper
 
-@profiler_decorator
 def isAdvancedSearchText(input, is_column):
   return parser_pool.get(DETECTOR_ID)(input, is_column)
 
-@profiler_decorator
 @safeParsingDecorator
 def parse(input, is_column, *args, **kw):
   if isAdvancedSearchText(input, is_column):