diff --git a/Script/CastorScript.py b/Script/CastorScript.py
index cfd285affbeaec85c1e329d69c13d2024fce7882..3a46daaf892edb583f4c35a2ccf50b72f51af813 100644
--- a/Script/CastorScript.py
+++ b/Script/CastorScript.py
@@ -98,14 +98,6 @@ def main(conf):
         logging.getLogger('').addHandler(email_logger)
     # end if
 
-    ##### Set root Logger for main thread #####
-    mainLog = logging.FileHandler(os.path.join(conf.LogDir,'mainLog.out'),
-                                  'w')
-    mainLog.setFormatter(formatter)
-    logger = logging.getLogger('main')
-    LogLevel = conf.LogLevel
-    set_log_level(LogLevel, mainLog)
-    logger.addHandler(mainLog)
 
     # get logger to files, (Will also log to ERS, when enabled)
     logger = enableFileLogging("main","mainLog.out", conf.LogDir, conf.LogLevel)
@@ -118,11 +110,9 @@ def main(conf):
             from ispy import IPCPartition #pylint: disable=no-name-in-module
             IPCPartition = IPCPartition()
             #ers.addLoggingHandler("main")
-            #TODO rename main_ERS_handler to ers_handler
-            main_ERS_handler = ers.LoggingHandler()
-            set_log_level(conf.ERSLogLevel, main_ERS_handler)
-            #TODO attach ers handler to root logger instead of "main" logger
-            logging.getLogger("main").addHandler(main_ERS_handler)
+            ERSHandler = ers.LoggingHandler()
+            set_log_level(conf.ERSLogLevel, ERSHandler)
+            logging.getLogger().addHandler(ERSHandler)
             logger.info("CastorScript is now logging to partition '%s'",
                         conf.partition)
         except Exception as ex:
@@ -131,16 +121,11 @@ def main(conf):
 
     ##### Start looking for the partition #####
     if conf.ERSenabled:
-        check = CheckThread(conf, manager, copy, delete, event, main_ERS_handler)
+        check = CheckThread(conf, event, ERSHandler)
 
 
     ##### Create db file logger #####
     dblogger = enableFileLogging("Database","DatabaseLog.out",conf.LogDir,conf.LogLevel)
-                                'w')
-    dbLog.setFormatter(formatter)
-    dblogger = logging.getLogger('Database')
-    set_log_level(LogLevel,dbLog)
-    dblogger.addHandler(dbLog)
 
     #### Extend the PYTHON_PATH ####
 
diff --git a/Script/cs/Threads/CheckThread.py b/Script/cs/Threads/CheckThread.py
index cb94ff360a00d4762f12468ba11540f7e3b8fa38..c15452a7761c098ef81600b96c0394dba15acb4d 100644
--- a/Script/cs/Threads/CheckThread.py
+++ b/Script/cs/Threads/CheckThread.py
@@ -1,76 +1,40 @@
 #!/bin/env python
 
 ##### Thread checking constantly the state of the partition #####
-import os
 import threading
 import logging
-from cs.Tools.utils import set_log_level,formatter,thread_id_string
+from cs.Tools.utils import thread_id_string, enableFileLogging
 
 
 class CheckThread(threading.Thread):
 
-    def __init__(self, conf, manager, copy, delete, event, mainERSHandler):
+    def __init__(self, conf, event, ERSHandler):
 
         threading.Thread.__init__(self, name="CheckThread")
 
-        import ers
         from ispy import IPCPartition #pylint: disable=no-name-in-module
         self.IPCPartition = IPCPartition
 
-        self.conf = conf
         self.event = event
-        self.manager = manager
-        self.copy = copy
-        self.delete = delete
-
-        ##### Main logger #####
-        #TODO remove mainLogger (only root logger is needed and there is no need to store it locally)
-        self.mainLogger = logging.getLogger('main')
-        self.main_ERS_handler = mainERSHandler
+        self.ERSHandler = ERSHandler
 
         ##### Get configuration parameters #####
-        self.CheckTimeout = self.conf.CheckTimeout
-        self.ERSLogLevel = self.conf.ERSLogLevel
-        self.LogDir = self.conf.LogDir
-        self.ERSenabled = self.conf.ERSenabled
-        self.partition = self.conf.partition
-        self.LogLevel = self.conf.LogLevel
-        self.ERSTimeout = self.conf.ERSTimeout
+        self.CheckTimeout = conf.CheckTimeout
+        self.partition = conf.partition
+        self.ERSTimeout = conf.ERSTimeout
 
         ##### Define Thread internal variables #####
         self.exitFlag = False
         self.partition_connected = True
 
-        ##### Set Logger for CheckThread #####
-        self.logFile = os.path.join(self.LogDir,'CheckLog.out')
-        # TODO rename all handlers (they are not loggers)
-        # TODO there is no need to store them in the object (double check) (make them local variables) 
-        self.CheckLog = logging.FileHandler(self.logFile,'w')
-        self.CheckLog.setFormatter(formatter)
-
-        ##### Set Logger Level #####
-        set_log_level(self.LogLevel, self.CheckLog)
-
-        self.logger = logging.getLogger('CheckThread')
-        self.logger.addHandler(self.CheckLog)
-
-        ##### Add ERS handler #####
-        if self.ERSenabled:
-            try:
-                #TODO remove: we don't need another ers handler, just use the central one
-                self.check_ERS_handler=ers.LoggingHandler()
-                set_log_level(self.ERSLogLevel,self.check_ERS_handler)
-                self.logger.addHandler( self.check_ERS_handler )
-            except Exception,ex:
-                self.logger.error("CheckThread could not create ERS, reason is '%s'", str(ex))
+        self.logger = enableFileLogging("CheckThread","CheckLog.out", conf.LogDir, conf.LogLevel)
+
     # end def __init__()
 
 
     def run(self):
 
-        #TODO log thread id to local logger and not mainLogger
-        self.mainLogger.info(thread_id_string())
-
+        self.logger.info(thread_id_string())
 
         while True:
 
@@ -83,45 +47,20 @@ class CheckThread(threading.Thread):
                 self.event.wait(self.ERSTimeout)
                 self.logger.warning('Found partition %s, adding ERS', self.partition)
                 self.partition_connected = True
-                ##### Add ERS handlers to all loggers #####
-                self.change_state_ers(True)
-
+                ##### Add ERS handler to root logger #####
+                logging.getLogger().addHandler(self.ERSHandler)
             ##### Check for the disappearance of partition #####
             elif self.partition_connected and not self.IPCPartition(self.partition).isValid():
                 self.logger.warning('Lost connection to partition %s, removing ERS handlers', self.partition)
                 self.partition_connected = False
-                ##### Remove ERS handlers from all loggers #####
-                self.change_state_ers(False)
+
+                ##### Remove ERS handler from root logger #####
+                logging.getLogger().removeHandler(self.ERSHandler)
             self.event.wait(self.CheckTimeout)
 
         # end while
     # end def run()
 
-
-    ##### Call add/remove ERS functions from threads #####
-    def change_state_ers(self, create_ers_handler):
-        if create_ers_handler:
-            ##### Add ERS handler to all loggers #####
-            #TODO this should be the root logger
-            self.mainLogger.addHandler(self.main_ERS_handler)
-            self.logger.addHandler(self.check_ERS_handler)
-            self.copy.AddRemoveERS(True)
-            self.manager.AddRemoveERS(True)
-            if self.delete:
-                self.delete.AddRemoveERS(True)
-        else:
-            ##### Remove ERS from all loggers #####
-            #TODO this should be the root logger
-            self.mainLogger.removeHandler(self.main_ERS_handler)
-            self.logger.removeHandler(self.check_ERS_handler)
-            self.copy.AddRemoveERS(False)
-            self.manager.AddRemoveERS(False)
-            if self.delete:
-                self.delete.AddRemoveERS(False)
-        # end if,else
-    # end def change_state_ers()
-
-
     ##### Exit handler #####
     def checkExit(self):
         self.exitFlag = True
diff --git a/Script/cs/Threads/CopyThread.py b/Script/cs/Threads/CopyThread.py
index 62af5edc2223c1136273a99aae2c078d93a0677a..436ca77f7a22b21c0e84ab89b5995c2d49835fc3 100644
--- a/Script/cs/Threads/CopyThread.py
+++ b/Script/cs/Threads/CopyThread.py
@@ -3,12 +3,11 @@
 import threading, glob, os
 from time import time
 import signal
-import logging
 import Queue
 import uuid
 import errno
 import cs.Tools.Constants as Constants
-from cs.Tools.utils import set_log_level,formatter,thread_id_string,adler32,get_bw
+from cs.Tools.utils import thread_id_string,adler32,get_bw, enableFileLogging
 
 
 class CopyThread(threading.Thread):
@@ -34,11 +33,7 @@ class CopyThread(threading.Thread):
         self.NoneTimeout = self.conf.NoneTimeout
         self.CopyTimeout = self.conf.CopyTimeout
         self.bwLimit = self.conf.bwLimit
-        self.bwDevice = self.conf.bwDevice
-        self.LogDir = self.conf.LogDir
-        self.LogLevel = self.conf.LogLevel
-        self.ERSLogLevel = self.conf.ERSLogLevel
-        self.ERSenabled = self.conf.ERSenabled
+        self.bwDevice = self.conf.bwDevice        
         self.localChecksum = self.conf.computeChecksum
         self.DdmMonitoringEnabled = conf.DdmMonitoringEnabled
 
@@ -48,25 +43,8 @@ class CopyThread(threading.Thread):
         self.dbFlag = True
         self.ddmQueueFullSince = None #timestamp indicating since when the queue is full
 
-        ##### Set Logger for CopyThread #####
-        self.logFile = os.path.join(self.LogDir,'CopyLog.out')
-        self.CopyLog = logging.FileHandler(self.logFile,'w')
-        self.CopyLog.setFormatter(formatter)
-        set_log_level(self.LogLevel, self.CopyLog)
-
-        self.logger = logging.getLogger('CopyThread')
-        self.logger.addHandler(self.CopyLog)
-
-        ##### Add ERS handler #####
-        if self.ERSenabled:
-            try:
-                import ers
-                #ers.addLoggingHandler('CopyThread')
-                self.Copy_ERS_handler=ers.LoggingHandler()
-                set_log_level(self.ERSLogLevel,self.Copy_ERS_handler)
-                logging.getLogger( 'CopyThread' ).addHandler( self.Copy_ERS_handler )
-            except Exception,ex:
-                self.logger.error("CopyThread could not create ERS, reason is '%s'", str(ex))
+        # get logger to files, (Will also log to ERS)
+        self.logger = enableFileLogging("CopyThread","CopyLog.out", conf.LogDir, conf.LogLevel)
 
 
     # end def __init__()
diff --git a/Script/cs/Threads/DdmMonitoringThread.py b/Script/cs/Threads/DdmMonitoringThread.py
index fddd376febd5591e0eb52f77fa9eeb92d43d545f..71cab22da7cf416e964ca6f4ea3fd628ff38333c 100644
--- a/Script/cs/Threads/DdmMonitoringThread.py
+++ b/Script/cs/Threads/DdmMonitoringThread.py
@@ -1,13 +1,11 @@
 #!/bin/env python
 import threading
-import logging
-import os
 import urllib2
 import json
 import Queue
 import time
 
-from cs.Tools.utils import set_log_level, formatter, thread_id_string
+from cs.Tools.utils import thread_id_string, enableFileLogging
 
 class DdmMonitoringThread(threading.Thread):
 
@@ -22,24 +20,8 @@ class DdmMonitoringThread(threading.Thread):
         self.requestErrorSince = None
         self.requestErrorCriticalLogged = False
 
-        ##### Set Logger #####
-        self.logFile = os.path.join(self.conf.LogDir, 'DdmMonitoring.out')
-        self.LogFileHandler = logging.FileHandler(self.logFile, 'w')
-        self.LogFileHandler.setFormatter(formatter)
-        set_log_level(self.conf.LogLevel, self.LogFileHandler)
-
-        self.logger = logging.getLogger('DdmMonitoring')
-        self.logger.addHandler(self.LogFileHandler)
-
-        self.LogERSHandler = None
-        if self.conf.ERSenabled:
-            try:
-                import ers
-                self.LogERSHandler = ers.LoggingHandler()
-                set_log_level(self.conf.ERSLogLevel, self.LogERSHandler)
-                self.logger.addHandler(self.LogERSHandler)
-            except Exception as ex:
-                self.logger.error("DdmMonitoringThread could not create ERS, reason is '%s'", str(ex))
+        # get logger to files, (Will also log to ERS)
+        self.logger = enableFileLogging("DdmMonitoring", "DdmMonitoring.out", conf.LogDir, conf.LogLevel)
 
 
     def run(self):
diff --git a/Script/cs/Threads/DeleteThread.py b/Script/cs/Threads/DeleteThread.py
index f944a115dea9d96d1c1400e31ccdbb9843332281..ef0806cf4ce4a0830ec5f3723f6d99d7de355996 100644
--- a/Script/cs/Threads/DeleteThread.py
+++ b/Script/cs/Threads/DeleteThread.py
@@ -6,10 +6,9 @@ import glob
 import errno
 from time import time
 import operator
-import logging
 from itertools import imap, chain
 import cs.Tools.Constants as Constants
-from cs.Tools.utils import set_log_level,formatter,thread_id_string
+from cs.Tools.utils import thread_id_string, enableFileLogging
 
 class DeleteThread(threading.Thread):
 
@@ -36,10 +35,6 @@ class DeleteThread(threading.Thread):
         self.DirList = [os.path.normpath(k) for k in self.conf.DirList]
         self.DeleteTimeout = self.conf.DeleteTimeout
         self.MigDelay = self.conf.MigDelay
-        self.LogDir = self.conf.LogDir
-        self.LogLevel = self.conf.LogLevel
-        self.ERSLogLevel = self.conf.ERSLogLevel
-        self.ERSenabled = self.conf.ERSenabled
 
         #### Import the function to resolve the merged file names #####
         self.mergedChecker = None
@@ -53,27 +48,8 @@ class DeleteThread(threading.Thread):
         self.dbFlag = True
         self.deleteNow = False
 
-        ##### Set Logger for DeleteThread #####
-        self.logFile = os.path.join(self.LogDir,'DeleteLog.out')
-        self.DeleteLog = logging.FileHandler(self.logFile,'w')
-        self.DeleteLog.setFormatter(formatter)
-        set_log_level(self.LogLevel, self.DeleteLog)
-
-        self.logger = logging.getLogger('DeleteThread')
-        self.logger.addHandler(self.DeleteLog)
-
-        ##### Add ERS handler #########
-        if self.ERSenabled:
-            try:
-                import ers
-                #ers.addLoggingHandler('DeleteThread')
-                self.Del_ERS_handler=ers.LoggingHandler()
-                set_log_level(self.ERSLogLevel,self.Del_ERS_handler)
-                logging.getLogger('DeleteThread').addHandler( self.Del_ERS_handler )
-            except Exception,ex:
-                self.logger.error("DeleteThread could not create ERS, reason is '%s'", str(ex))
-
-
+        # get logger to files, (Will also log to ERS)
+        self.logger = enableFileLogging("DeleteThread","DeleteLog.out", conf.LogDir, conf.LogLevel)
 
     # end def __init__()
 
diff --git a/Script/cs/Threads/ManagerThread.py b/Script/cs/Threads/ManagerThread.py
index e2153c0f9c2582cb5391366389579f42be55a0fd..a9eef28355adb0bdae0d970f397f5ff7472b2159 100644
--- a/Script/cs/Threads/ManagerThread.py
+++ b/Script/cs/Threads/ManagerThread.py
@@ -7,14 +7,13 @@ It is in charge of ls on SFO disk.
 
 import threading, os, glob
 from time import time
-import logging
 import datetime
 import pprint
 import math
 import cs.Tools.Constants as Constants
 import errno
 import re
-from cs.Tools.utils import set_log_level,formatter,thread_id_string
+from cs.Tools.utils import thread_id_string, enableFileLogging
 from itertools import chain
 
 class ManagerThread(threading.Thread):
@@ -44,11 +43,7 @@ class ManagerThread(threading.Thread):
         self.CopyDir = self.conf.CopyDir
         self.Pool = self.conf.Pool
         self.StageHost = self.conf.StageHost
-        self.drivenPool = self.conf.drivenPool
-        self.LogDir = self.conf.LogDir
-        self.LogLevel = self.conf.LogLevel
-        self.ERSLogLevel = self.conf.ERSLogLevel
-        self.ERSenabled = self.conf.ERSenabled
+        self.drivenPool = self.conf.drivenPool        
 
         self.CopyFileList = [] # all files currently handled by CastorScript
         self.ProblDict = {} # files declared problematic with extra info to manage retries
@@ -56,24 +51,8 @@ class ManagerThread(threading.Thread):
         self.Year = ''
         self.Month = ''
 
-        # Set Logger for ManagerThread
-        self.logFile = os.path.join(self.LogDir,'ManagerLog.out')
-        self.ManagerLog = logging.FileHandler(self.logFile,'w')
-        self.ManagerLog.setFormatter(formatter)
-        set_log_level(self.LogLevel, self.ManagerLog)
-
-        self.logger = logging.getLogger('ManagerThread')
-        self.logger.addHandler(self.ManagerLog)
-
-        if self.ERSenabled:
-            try:
-                import ers
-                #ers.addLoggingHandler('ManagerThread')
-                self.manage_ERS_handler=ers.LoggingHandler()
-                set_log_level(self.ERSLogLevel,self.manage_ERS_handler)
-                logging.getLogger('ManagerThread').addHandler( self.manage_ERS_handler )
-            except Exception,ex:
-                self.logger.error("ManagerThread could not create ERS, reason is '%s'", str(ex))
+        # get logger to files, (Will also log to ERS)
+        self.logger = enableFileLogging("ManagerThread","ManagerLog.out", conf.LogDir, conf.LogLevel)
 
 
     def initialize(self):