diff --git a/jeepyb/cmd/close_pull_requests.py b/jeepyb/cmd/close_pull_requests.py
index a113c34..e8265df 100644
--- a/jeepyb/cmd/close_pull_requests.py
+++ b/jeepyb/cmd/close_pull_requests.py
@@ -38,7 +38,7 @@
 import logging
 import os
 
-import jeepyb.log as l
+import jeepyb.log
 import jeepyb.projects as p
 import jeepyb.utils as u
 
@@ -61,12 +61,12 @@
 def main():
 
     parser = argparse.ArgumentParser()
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
     parser.add_argument('--message-file', dest='message_file', default=None,
                         help='The close pull request message')
 
     args = parser.parse_args()
-    l.configure_logging(args)
+    jeepyb.log.configure_logging(args)
 
     if args.message_file:
         try:
@@ -130,5 +130,6 @@
             issue.create_comment(pull_request_text % vars)
             req.edit(state="closed")
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/create_hound_config.py b/jeepyb/cmd/create_hound_config.py
index 601ba74..373ae02 100644
--- a/jeepyb/cmd/create_hound_config.py
+++ b/jeepyb/cmd/create_hound_config.py
@@ -19,14 +19,14 @@
 import json
 import os
 
+import jeepyb.utils as u
+
 # Python2 has unicode as a builtin
 # Python3 does not
 import sys
 if sys.version_info[0] >= 3:
     unicode = str
 
-import jeepyb.utils as u
-
 
 PROJECTS_YAML = os.environ.get('PROJECTS_YAML', '/home/hound/projects.yaml')
 GIT_SERVER = os.environ.get('GIT_BASE', 'opendev.org')
diff --git a/jeepyb/cmd/expire_old_reviews.py b/jeepyb/cmd/expire_old_reviews.py
index 9bbc84c..2dbd015 100644
--- a/jeepyb/cmd/expire_old_reviews.py
+++ b/jeepyb/cmd/expire_old_reviews.py
@@ -22,16 +22,16 @@
 import logging
 import paramiko
 
-import jeepyb.log as l
+import jeepyb.log
 
 logger = logging.getLogger('expire_reviews')
 
 
 def expire_patch_set(ssh, patch_id, patch_subject):
-    message = ('Code review expired due to no recent activity'
-               ' after a negative review. It can be restored using'
-               ' the \`Restore Change\` button under the Patch Set'
-               ' on the web interface.')
+    message = ("Code review expired due to no recent activity"
+               " after a negative review. It can be restored using"
+               " the 'Restore Change' button under the Patch Set"
+               " on the web interface.")
     command = ('gerrit review --abandon '
                '--message="{message}" {patch_id}').format(
                    message=message,
@@ -50,9 +50,9 @@
     parser.add_argument('ssh_key', help='The gerrit admin SSH key file')
     parser.add_argument('--age', dest='age', default='1w',
                         help='The minimum age of a review to expire')
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
     options = parser.parse_args()
-    l.configure_logging(options)
+    jeepyb.log.configure_logging(options)
 
     GERRIT_USER = options.user
     GERRIT_SSH_KEY = options.ssh_key
@@ -85,5 +85,6 @@
 
     logger.info('End expire review')
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index 4ca3e27..212d899 100644
--- a/jeepyb/cmd/manage_projects.py
+++ b/jeepyb/cmd/manage_projects.py
@@ -62,7 +62,7 @@
 import gerritlib.gerrit
 import github
 
-import jeepyb.log as l
+import jeepyb.log
 import jeepyb.utils as u
 
 registry = u.ProjectsRegistry()
@@ -418,13 +418,13 @@
 
 def main():
     parser = argparse.ArgumentParser(description='Manage projects')
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
     parser.add_argument('--nocleanup', action='store_true',
                         help='do not remove temp directories')
     parser.add_argument('projects', metavar='project', nargs='*',
                         help='name of project(s) to process')
     args = parser.parse_args()
-    l.configure_logging(args)
+    jeepyb.log.configure_logging(args)
 
     default_has_github = registry.get_defaults('has-github', True)
 
diff --git a/jeepyb/cmd/notify_impact.py b/jeepyb/cmd/notify_impact.py
index 389d3de..0636c06 100644
--- a/jeepyb/cmd/notify_impact.py
+++ b/jeepyb/cmd/notify_impact.py
@@ -334,5 +334,6 @@
     if impacted(git_log, args.impact):
         process_impact(git_log, args, config)
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/openstackwatch.py b/jeepyb/cmd/openstackwatch.py
index c9d6a54..264112f 100644
--- a/jeepyb/cmd/openstackwatch.py
+++ b/jeepyb/cmd/openstackwatch.py
@@ -78,6 +78,7 @@
                                     OUTPUT_MODE)
     return ret
 
+
 try:
     conffile = sys.argv[1]
 except IndexError:
@@ -174,5 +175,6 @@
             else:
                 print(content)
 
+
 if __name__ == '__main__':
     main()
diff --git a/jeepyb/cmd/register_zanata_projects.py b/jeepyb/cmd/register_zanata_projects.py
index 6d64625..b737909 100644
--- a/jeepyb/cmd/register_zanata_projects.py
+++ b/jeepyb/cmd/register_zanata_projects.py
@@ -18,7 +18,7 @@
 import logging
 import os
 
-import jeepyb.log as l
+import jeepyb.log
 import jeepyb.projects as p
 import jeepyb.translations as t
 import jeepyb.utils as u
@@ -33,9 +33,9 @@
 
 def main():
     parser = argparse.ArgumentParser(description='Register projects in Zanata')
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
     args = parser.parse_args()
-    l.configure_logging(args)
+    jeepyb.log.configure_logging(args)
 
     registry = u.ProjectsRegistry(PROJECTS_YAML)
     rest_service = t.ZanataRestService(ZANATA_URL, ZANATA_USER, ZANATA_KEY)
diff --git a/jeepyb/cmd/track_upstream.py b/jeepyb/cmd/track_upstream.py
index ba2b482..4a30c61 100644
--- a/jeepyb/cmd/track_upstream.py
+++ b/jeepyb/cmd/track_upstream.py
@@ -54,7 +54,7 @@
 
 import gerritlib.gerrit
 
-import jeepyb.log as l
+import jeepyb.log
 import jeepyb.utils as u
 
 registry = u.ProjectsRegistry()
@@ -139,13 +139,13 @@
 
 def main():
     parser = argparse.ArgumentParser(description='Manage projects')
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
     parser.add_argument('--nocleanup', action='store_true',
                         help='do not remove temp directories')
     parser.add_argument('projects', metavar='project', nargs='*',
                         help='name of project(s) to process')
     args = parser.parse_args()
-    l.configure_logging(args)
+    jeepyb.log.configure_logging(args)
 
     JEEPYB_CACHE_DIR = registry.get_defaults('jeepyb-cache-dir',
                                              '/var/lib/jeepyb')
@@ -224,5 +224,6 @@
     finally:
         os.unlink(ssh_env['GIT_SSH'])
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/trivial_rebase.py b/jeepyb/cmd/trivial_rebase.py
index 19e192b..2c8bfef 100644
--- a/jeepyb/cmd/trivial_rebase.py
+++ b/jeepyb/cmd/trivial_rebase.py
@@ -282,5 +282,6 @@
         SuExec(options, approval["account_id"], ' '.join(gerrit_approve_cmd))
     sys.exit(0)
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/update_blueprint.py b/jeepyb/cmd/update_blueprint.py
index 6de6612..07bcce9 100644
--- a/jeepyb/cmd/update_blueprint.py
+++ b/jeepyb/cmd/update_blueprint.py
@@ -60,6 +60,7 @@
     c.readfp(fp)
     return c
 
+
 GERRIT_CONFIG = get_broken_config(GERRIT_CONFIG)
 SECURE_CONFIG = get_broken_config(GERRIT_SECURE_CONFIG)
 DB_HOST = GERRIT_CONFIG.get("database", "hostname")
@@ -173,5 +174,6 @@
 
     find_specs(lpconn, conn, args)
 
+
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/update_bug.py b/jeepyb/cmd/update_bug.py
index b756304..31fecf7 100644
--- a/jeepyb/cmd/update_bug.py
+++ b/jeepyb/cmd/update_bug.py
@@ -25,7 +25,6 @@
 from launchpadlib import launchpad
 from launchpadlib import uris
 
-import jeepyb.gerritdb
 from jeepyb import projects as p
 from jeepyb import utils as u
 
@@ -82,51 +81,8 @@
     bugtask.bug.newMessage(subject=subject, content=body)
 
 
-def set_in_progress(bugtask, launchpad, uploader, change_url):
-    """Set bug In progress with assignee being the uploader"""
-
-    # Retrieve uploader from Launchpad by correlating Gerrit E-mail
-    # address to OpenID, and only set if there is a clear match.
-    try:
-        searchkey = uploader[uploader.rindex("(") + 1:-1]
-    except ValueError:
-        searchkey = uploader
-
-    # The counterintuitive query is due to odd database schema choices
-    # in Gerrit. For example, an account with a secondary E-mail
-    # address added looks like...
-    # select email_address,external_id from account_external_ids
-    #     where account_id=1234;
-    # +-----------------+-----------------------------------------+
-    # | email_address   | external_id                             |
-    # +-----------------+-----------------------------------------+
-    # | plugh@xyzzy.com | https://login.ubuntu.com/+id/fR0bnU1 |
-    # | bar@foo.org     | mailto:bar@foo.org                      |
-    # | NULL            | username:quux                           |
-    # +-----------------+-----------------------------------------+
-    # ...thus we need a join on a secondary query to search against
-    # all the user's configured E-mail addresses.
-    #
-    # Worse, we also need to filter by active accounts only since
-    # picking an inactive account could result in using the wrong
-    # OpenId entirely.
-    #
-    query = """SELECT t.external_id FROM account_external_ids t
-            INNER JOIN (
-                SELECT t.account_id FROM account_external_ids t
-                WHERE t.email_address = %s )
-            original ON t.account_id = original.account_id
-            AND t.external_id LIKE 'https://login.ubuntu.com%%'
-            JOIN accounts a ON a.account_id = t.account_id
-            WHERE a.inactive = 'N'"""
-
-    cursor = jeepyb.gerritdb.connect().cursor()
-    cursor.execute(query, searchkey)
-    data = cursor.fetchone()
-    if data:
-        assignee = launchpad.people.getByOpenIDIdentifier(identifier=data[0])
-        if assignee:
-            bugtask.assignee = assignee
+def set_in_progress(bugtask, launchpad, change_url):
+    """Set bug In progress"""
 
     bugtask.status = "In Progress"
     bugtask.lp_save()
@@ -255,8 +211,7 @@
         if args.branch == 'master':
             if (bugtask.status not in [u'Fix Committed', u'Fix Released'] and
                     task.needs_change('set_in_progress')):
-                set_in_progress(bugtask, launchpad,
-                                args.uploader, args.change_url)
+                set_in_progress(bugtask, launchpad, args.change_url)
         else:
             series = args.branch.rsplit('/', 1)[-1]
 
@@ -267,8 +222,7 @@
                         task.needs_change('set_in_progress') and
                         reltask.status not in [u'Fix Committed',
                                                u'Fix Released']):
-                    set_in_progress(reltask, launchpad,
-                                    args.uploader, args.change_url)
+                    set_in_progress(reltask, launchpad, args.change_url)
                     break
 
         if args.patchset == '1' and (task.needs_change('add_comment') or
@@ -349,16 +303,19 @@
     parser.add_argument('--commit', default=None)
     parser.add_argument('--topic', default=None)
     parser.add_argument('--change-owner', default=None)
+    parser.add_argument('--change-owner-username', default=None)
     # change-abandoned
     parser.add_argument('--abandoner', default=None)
+    parser.add_argument('--abandoner-username', default=None)
     parser.add_argument('--reason', default=None)
     # change-merged
     parser.add_argument('--submitter', default=None)
+    parser.add_argument('--submitter-username', default=None)
     parser.add_argument('--newrev', default=None)
     # patchset-created
     parser.add_argument('--uploader', default=None)
+    parser.add_argument('--uploader-username', default=None)
     parser.add_argument('--patchset', default=None)
-    parser.add_argument('--is-draft', default=None)
     parser.add_argument('--kind', default=None)
 
     args = parser.parse_args()
diff --git a/jeepyb/cmd/welcome_message.py b/jeepyb/cmd/welcome_message.py
index 4e6b779..d09397d 100644
--- a/jeepyb/cmd/welcome_message.py
+++ b/jeepyb/cmd/welcome_message.py
@@ -31,7 +31,7 @@
 import paramiko
 
 import jeepyb.gerritdb
-import jeepyb.log as l
+import jeepyb.log
 
 logger = logging.getLogger('welcome_reviews')
 
@@ -155,16 +155,17 @@
     parser.add_argument('--dryrun', dest='dryrun', action='store_true')
     parser.add_argument('--no-dryrun', dest='dryrun', action='store_false')
     parser.set_defaults(dryrun=False)
-    l.setup_logging_arguments(parser)
+    jeepyb.log.setup_logging_arguments(parser)
 
     args = parser.parse_args()
 
-    l.configure_logging(args)
+    jeepyb.log.configure_logging(args)
 
     # they're a first-timer, post the message on 1st patchset
     if is_newbie(args.uploader) and args.patchset == '1' and not args.dryrun:
         post_message(args.commit, args.ssh_user, args.ssh_key,
                      args.message_file)
 
+
 if __name__ == "__main__":
     main()
diff --git a/test-requirements.txt b/test-requirements.txt
index d528919..117f7a3 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,4 +1,4 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
-hacking<0.11,>=0.10.2
+flake8
diff --git a/tox.ini b/tox.ini
index 835b4ac..46bd1ce 100644
--- a/tox.ini
+++ b/tox.ini
@@ -18,6 +18,7 @@
 
 [flake8]
 # E125 and H are intentionally ignored
-ignore = E125,H
+# W503 is a mistake in flake8
+ignore = E125,H,W503,W504
 show-source = True
 exclude = .venv,.tox,dist,doc,build,*.egg
