diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index 3493c98..12f2ea2 100644
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -206,12 +206,12 @@
     def getPatchsetCreatedEvent(self, patchset):
         event = {"type": "patchset-created",
                  "change": {"project": self.project,
-                           "branch": self.branch,
-                           "id": "I5459869c07352a31bfb1e7a8cac379cabfcb25af",
-                           "number": str(self.number),
-                           "subject": self.subject,
-                           "owner": {"name": "User Name"},
-                           "url": "https://hostname/3"},
+                            "branch": self.branch,
+                            "id": "I5459869c07352a31bfb1e7a8cac379cabfcb25af",
+                            "number": str(self.number),
+                            "subject": self.subject,
+                            "owner": {"name": "User Name"},
+                            "url": "https://hostname/3"},
                  "patchSet": self.patchsets[patchset - 1],
                  "uploader": {"name": "User Name"}}
         return event
@@ -305,8 +305,8 @@
         return json.loads(json.dumps(self.data))
 
     def setMerged(self):
-        if (self.depends_on_change
-            and self.depends_on_change.data['status'] != 'MERGED'):
+        if (self.depends_on_change and
+            self.depends_on_change.data['status'] != 'MERGED'):
             return
         if self.fail_merge:
             return
@@ -425,29 +425,34 @@
         if self.canceled:
             self.jenkins.all_jobs.remove(self)
             return
-        self.callback.jenkins_endpoint(FakeJenkinsEvent(
-                self.name, self.number, self.parameters,
-                'STARTED'))
+        self.callback.jenkins_endpoint(FakeJenkinsEvent(self.name,
+                                                        self.number,
+                                                        self.parameters,
+                                                        'STARTED'))
         if self.jenkins.hold_jobs_in_build:
             self._wait()
         self.log.debug("Job %s continuing" % (self.parameters['UUID']))
 
         result = 'SUCCESS'
-        if ('ZUUL_REF' in self.parameters) and self.jenkins.fakeShouldFailTest(
-            self.name,
-            self.parameters['ZUUL_REF']):
+        if (('ZUUL_REF' in self.parameters) and
+            self.jenkins.fakeShouldFailTest(self.name,
+                                            self.parameters['ZUUL_REF'])):
             result = 'FAILURE'
         if self.aborted:
             result = 'ABORTED'
 
         self.jenkins.fakeAddHistory(name=self.name, number=self.number,
                                     result=result)
-        self.callback.jenkins_endpoint(FakeJenkinsEvent(
-                self.name, self.number, self.parameters,
-                'COMPLETED', result))
-        self.callback.jenkins_endpoint(FakeJenkinsEvent(
-                self.name, self.number, self.parameters,
-                'FINISHED', result))
+        self.callback.jenkins_endpoint(FakeJenkinsEvent(self.name,
+                                                        self.number,
+                                                        self.parameters,
+                                                        'COMPLETED',
+                                                        result))
+        self.callback.jenkins_endpoint(FakeJenkinsEvent(self.name,
+                                                        self.number,
+                                                        self.parameters,
+                                                        'FINISHED',
+                                                        result))
         self.jenkins.all_jobs.remove(self)
 
 
@@ -482,8 +487,8 @@
                 self.log.debug("releasing job %s" % (job.parameters['UUID']))
                 job.release()
             else:
-                self.log.debug("not releasing job %s" % (
-                        job.parameters['UUID']))
+                self.log.debug("not releasing job %s" %
+                               (job.parameters['UUID']))
         self.log.debug("done releasing jobs %s (%s)" % (regex,
                                                         len(self.all_jobs)))
 
diff --git a/tox.ini b/tox.ini
index 34075cb..334cc94 100644
--- a/tox.ini
+++ b/tox.ini
@@ -11,7 +11,7 @@
 
 [testenv:pep8]
 deps = pep8==1.3.3
-commands = pep8 --ignore=E122,E125,E126,E128 --repeat --show-source --exclude=.venv,.tox,dist,doc,build .
+commands = pep8 --ignore=E125 --repeat --show-source --exclude=.venv,.tox,dist,doc,build .
 
 [testenv:cover]
 setenv = NOSE_WITH_COVERAGE=1
diff --git a/zuul/launcher/jenkins.py b/zuul/launcher/jenkins.py
index be659ae..c53e6f6 100644
--- a/zuul/launcher/jenkins.py
+++ b/zuul/launcher/jenkins.py
@@ -227,8 +227,9 @@
             params['ZUUL_BRANCH'] = change.branch
             params['GERRIT_CHANGES'] = changes_str
             params['ZUUL_CHANGES'] = changes_str
-            params['ZUUL_REF'] = 'refs/zuul/%s/%s' % (change.branch,
-                change.current_build_set.ref)
+            params['ZUUL_REF'] = ('refs/zuul/%s/%s' %
+                                  (change.branch,
+                                   change.current_build_set.ref))
 
             zuul_changes = ' '.join(['%s,%s' % (c.number, c.patchset)
                                      for c in dependent_changes + [change]])
diff --git a/zuul/lib/gerrit.py b/zuul/lib/gerrit.py
index ca626f0..0cefa22 100644
--- a/zuul/lib/gerrit.py
+++ b/zuul/lib/gerrit.py
@@ -139,8 +139,8 @@
         data = json.loads(lines[0])
         if not data:
             return False
-        self.log.debug("Received data from Gerrit query: \n%s" % (
-                pprint.pformat(data)))
+        self.log.debug("Received data from Gerrit query: \n%s" %
+                       (pprint.pformat(data)))
         return data
 
     def _open(self):
diff --git a/zuul/model.py b/zuul/model.py
index 96859c4..c6841c5 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -486,8 +486,7 @@
         return '<Change 0x%x %s>' % (id(self), self._id())
 
     def equals(self, other):
-        if (self.number == other.number and
-            self.patchset == other.patchset):
+        if self.number == other.number and self.patchset == other.patchset:
             return True
         return False
 
@@ -508,8 +507,7 @@
         return self.newrev
 
     def equals(self, other):
-        if (self.ref == other.ref and
-            self.newrev == other.newrev):
+        if self.ref == other.ref and self.newrev == other.newrev:
             return True
         return False
 
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 329d0c4..66c18e8 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -98,8 +98,8 @@
                                 branches=toList(trigger.get('branch')),
                                 refs=toList(trigger.get('ref')),
                                 approvals=approvals,
-                                comment_filters=toList(
-                        trigger.get('comment_filter')))
+                                comment_filters=
+                                toList(trigger.get('comment_filter')))
                 manager.event_filters.append(f)
 
         for config_job in data['jobs']:
@@ -533,8 +533,8 @@
         if hasattr(change, 'refspec') and not ref:
             change.current_build_set.setConfiguration()
             ref = change.current_build_set.getRef()
-            merged = self.sched.merger.mergeChanges([change], ref,
-                         mode=model.MERGE_IF_NECESSARY)
+            mode = model.MERGE_IF_NECESSARY
+            merged = self.sched.merger.mergeChanges([change], ref, mode=mode)
             if not merged:
                 self.log.info("Unable to merge change %s" % change)
                 self.pipeline.setUnableToMerge(change)
