diff --git a/Database/CoolConvUtilities/python/AtlCoolLib.py b/Database/CoolConvUtilities/python/AtlCoolLib.py
index f2d8eff0d4d69c2b3825d442061438fad66b169b..db96ff6683b68e74b63f440badc7637e523ee0bb 100755
--- a/Database/CoolConvUtilities/python/AtlCoolLib.py
+++ b/Database/CoolConvUtilities/python/AtlCoolLib.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 # AtlCoolLib.py
 # module defining utilities for ATLAS command line tool use of COOL
 # Richard Hawkings, started 5/2/07
@@ -9,15 +9,15 @@ Module defining utilities for ATLAS command line/python use of COOL
 """
 
 from __future__ import print_function
-import sys,os,traceback,getopt,time,calendar
-from PyCool import cool,coral
+import sys,os,getopt,time,calendar
+from PyCool import cool
 
 def transConn(conn):
     """
     Translate simple connection string (no slash) to mycool.db with given
     instance, all others left alone
     """
-    if (not '/' in conn):
+    if ('/' not in conn):
         return 'sqlite://X;schema=mycool.db;dbname='+conn
     else:
         return conn
@@ -106,7 +106,7 @@ def timeVal(val):
         try:
             ts=time.strptime(val+'/UTC','%Y-%m-%d:%H:%M:%S/%Z')
             return int(calendar.timegm(ts))
-        except ValueError as e:
+        except ValueError:
             print ("ERROR in time specification, use e.g. 2007-05-25:14:01:00")
             sys.exit(-1)
         
@@ -135,7 +135,7 @@ def indirectOpen(coolstr,readOnly=True,oracle=False,debug=False):
     forceSQLite='ATLAS_COOL_FORCESQLITE' in os.environ
     if (debug and forceSQLite):
         print ("ATLAS_COOL_FORCESQLITE: Force consideration of SQLite replicas")
-    if (len(splitname)!=2 or readOnly==False or oracle==False or forceSQLite):
+    if (len(splitname)!=2 or readOnly is False or oracle is False or forceSQLite):
         try:
             db=dbSvc.openDatabase(connstr,readOnly)
         except Exception as e:
@@ -174,7 +174,7 @@ def indirectOpen(coolstr,readOnly=True,oracle=False,debug=False):
                 if (debug): print ("Established connection to %s" % server)
                 return dbconn
             if (debug): print ("Cannot connect to %s" % server)
-        except Exception as e:
+        except Exception:
             if (debug): print ("Exception connecting to %s" % server)
     # all replicas tried - give up
     print ("All available replicas tried - giving up")
@@ -195,7 +195,6 @@ def replicaList():
         if (epos>0 and line[0]!="#"):
             domains=line[0:epos].split()
             for dom in domains:
-                i=hostname.find(dom)
                 if ((hostname[-len(dom):]==dom and len(dom)>best) or (best==0 and dom=='default')):
                     best=len(dom)
                     serverlist=line[epos+1:].split()
@@ -218,7 +217,7 @@ def pathResolver(leaf,retFile=True):
     paths=['.']+paths
     for path in paths:
         try:
-            s=os.stat(path+'/'+leaf)
+            os.stat(path+'/'+leaf)
             if (retFile):
                 return open(path+'/'+leaf,'r')
             else:
@@ -389,38 +388,6 @@ class coolTool:
         # default implementation of procopts - do nothing
         pass
 
-class coolWrapper:
-    """
-    comment
-    """
-    def __init__(self,db,folder,spec=[],version=cool.FolderVersioning.SINGLE_VERSION):
-        # setup the db reference
-        # if its a string, try to open it
-        if (type(db)==str):
-            self.db=forceOpen(db)
-        else:
-            # assume its an already existing database object
-            self.db=db
-        self.folder=folder
-        self.spec=spec
-        self.version=version
-        # check the database is open
-        if (not self.db.isOpen()):
-            raise RuntimeError ('Database not open')
-        
-
-    def storeDataIOV(self,data,since=cool.ValidityKeyMin,
-                     until=cool.ValidityKeyMax,channel=0,tag=''):
-        if (type(channel)==int):
-            chanid=channel
-        elif (type(channel)==string):
-            # lookup channel
-            print ('channel is string')
-
-    def storeDataRun(self,data,run,channel=0,tag=''):
-        since=(run << 32)
-        until=((run+1) << 32)
-        storeDataIOV(since,until,channel,data,tag)
 
 class RangeList:
     """Hold a list of IOVs (start/end pairs) which are good, allowing parts
@@ -449,7 +416,6 @@ class RangeList:
                     self._ends[ix]=start
                 elif (start>self._starts[ix] and end<self._ends[ix]):
                     # have to split the stored interval
-                    oldstart=self._starts[ix]
                     oldend=self._ends[ix]
                     self._ends[ix]=start
                     self._insert(ix+1,end,oldend)
@@ -507,11 +473,11 @@ class TimeStampToRLB:
         # First try to read timestamp info            
         isFirst=True
         try:
-            readobjs=readfolder.browseObjects(self.since,self.until,cool.ChannelSelection.all());
+            readobjs=readfolder.browseObjects(self.since,self.until,cool.ChannelSelection.all())
             while readobjs.goToNext():
                 readobj=readobjs.currentRef()
                 payload=readobj.payload()
-                if (isFirst == True):
+                if (isFirst is True):
                     isFirst=False
                     self.StartTime=payload['StartTime']
                 else:
@@ -532,7 +498,7 @@ class TimeStampToRLB:
             print ("Problem accessing folder %s" % lbtimename)
             raise RuntimeError ("TimeStampToRLB: Initialisation error")
         try:
-            readobjs=readfolder.browseObjects(self.StartTime, self.EndTime, cool.ChannelSelection.all());
+            readobjs=readfolder.browseObjects(self.StartTime, self.EndTime, cool.ChannelSelection.all())
             while readobjs.goToNext():
                 readobj=readobjs.currentRef()
                 payload=readobj.payload()
diff --git a/Database/CoolConvUtilities/python/AtlCoolTool.py b/Database/CoolConvUtilities/python/AtlCoolTool.py
index 10558b055c5ec863d083000e5f809eee23524643..76c3feffd621ee4b3ed02958079094d986c828dc 100755
--- a/Database/CoolConvUtilities/python/AtlCoolTool.py
+++ b/Database/CoolConvUtilities/python/AtlCoolTool.py
@@ -262,7 +262,7 @@ class AtlCoolTool:
         elif not node.startswith('/'): node=self.curdir+'/'+node
         if (node.startswith('//')): node=node[1:]
         res=InfoList()
-        chk=raw_input('Delete folder(set) '+node+' ? (y/n)')
+        chk=input('Delete folder(set) '+node+' ? (y/n)')
         if not (chk=='y' or chk=='Y'):
             res.append('Deletion aborted!')
             return res
@@ -303,7 +303,7 @@ class AtlCoolTool:
             if (self.curtag==''):
                 restag=""
             else:
-                if not self.curtag in f.listTags():
+                if self.curtag not in f.listTags():
                     # tag is not defined here, try hierarchical tag
                     try:
                         restag=f.resolveTag(self.curtag)
@@ -391,8 +391,8 @@ class AtlCoolTool:
         res['description'] = f.description()
         if (doCount):
             res['cardinality'] = f.countObjects( cool.ValidityKeyMin,
-                                             cool.ValidityKeyMax,
-                                             cool.ChannelSelection.all() )
+                                                 cool.ValidityKeyMax,
+                                                 cool.ChannelSelection.all() )
             res['size'] = res['cardinality'] * byteSize( f.payloadSpecification() )
         else:
             res['cardinality']='-'
@@ -502,12 +502,12 @@ class AtlCoolTool:
             iseq=0
             for ichan in chanlist:
                 try:
-                    channame=f.channelName(ichan);
-                except:
+                    channame=f.channelName(ichan)
+                except Exception:
                     channame='<none>'
                 try:
-                    chandesc=f.channelDescription(ichan);
-                except:
+                    chandesc=f.channelDescription(ichan)
+                except Exception:
                     chandesc='<none>'
                 res.append('%i: %i %s %s' % (iseq,ichan,channame,chandesc))
                 iseq+=1
@@ -559,7 +559,7 @@ class AtlCoolTool:
             # check tag exists, confirm action if not
             if tag1 not in f.listTags():
                 print ("WARNING: Tag %s does not exist in node %s" % (tag1,node))
-                chk=raw_input("Do you want to proceed anyway (y/n)")
+                chk=input("Do you want to proceed anyway (y/n)")
                 if (chk.upper()!="Y"):
                     raise Exception('ABORTED - Tag %s does not exist' % tag1)
             try:
@@ -780,7 +780,7 @@ class AtlCoolTool:
                                     res.append('Tag %s already at state %i' % (rtag,curstate))
                             else:
                                 res.append('Skip tag %s due to UPD mode' % rtag)
-                        except:
+                        except Exception:
                             pass
             res.append('Changed state of %i tags' % nmod)
         else:
@@ -826,7 +826,7 @@ class AtlCoolTool:
                 if (multi):
                     try:
                         rtag=subf.resolveTag(tag)
-                    except:
+                    except Exception:
                         rtag='<nothing>'
                     res.append('Folder %s : tag %s' % (inode,rtag))
         return res
@@ -869,7 +869,7 @@ class AtlCoolTool:
                             if finode==('') : finode='/'
                         try:
                             subf=self.db.getFolder(inode)
-                        except:
+                        except Exception:
                             subf=self.db.getFolderSet(inode)
                         try:
                             rtag=subf.resolveTag(tag1)
@@ -880,7 +880,7 @@ class AtlCoolTool:
                             except Exception as e:
                                 print (e)
                                 res.append('createTagRelation failed with error %s' %e)
-                        except:
+                        except Exception:
                             res.append('Folder %s : no tag selected' % inode)
             res.append('All done')
         else:
diff --git a/Database/CoolConvUtilities/python/RunLister.py b/Database/CoolConvUtilities/python/RunLister.py
index c2af163795e62c9f485560664243932dce65aa0d..73cab836345ac51c000c8b4539eba3c5249f57d4 100644
--- a/Database/CoolConvUtilities/python/RunLister.py
+++ b/Database/CoolConvUtilities/python/RunLister.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
 # RunLister.py
 
@@ -273,6 +273,9 @@ class coolRunLister:
         folderLB_Params=self.cooldb.getFolder(self.coolpath+'/LB_Params')
         itr=folderLB_Params.browseObjects(time1,time2,cool.ChannelSelection.all())
         srun=-1
+        slbmax = None
+        sstart = None
+        send = None
         runlist={}
         while itr.goToNext():
             obj=itr.currentRef()
@@ -410,6 +413,9 @@ class coolRunLister:
     def correlateTrigger(self):
         "Retrieve run/LB information from trigger and correlate with RunCtrl"
         srun=-1
+        slbmax = None
+        sstart = None
+        send = None
         self.triglbmap={}
         folderTrigLBLB=self.cooltrigdb.getFolder(self.cooltlbpath+'/LBLB')
         itr=folderTrigLBLB.browseObjects((self.minrun << 32),((self.maxrun+1) << 32),cool.ChannelSelection.all())
@@ -548,7 +554,7 @@ Black runs were not recorded.
             # set colour based on status
             col='000000' # black for non-recorded runs
             if (runp.rec):
-                if (runp.cleanstop==True):
+                if (runp.cleanstop is True):
                     col='008000' # green - for runs with EOR and cleanstop
                 else:
                     col='FF0000' # red - for runs without EOR or cleanstop