diff --git a/README.rst b/README.rst
index 183a9a2..b66305e 100644
--- a/README.rst
+++ b/README.rst
@@ -17,4 +17,4 @@
 
     # Do your commits
     $ git review
-    # Enter your username if promped
+    # Enter your username if prompted
diff --git a/zuul/launcher/jenkins.py b/zuul/launcher/jenkins.py
index 1e58bce..7ac92c3 100644
--- a/zuul/launcher/jenkins.py
+++ b/zuul/launcher/jenkins.py
@@ -23,7 +23,6 @@
 import time
 import urllib   # for extending jenkins lib
 import urllib2  # for extending jenkins lib
-import urlparse
 from uuid import uuid4
 
 import jenkins
@@ -378,21 +377,6 @@
             self.log.error("Build %s has not started but "
                            "was not found in queue" % build)
 
-    def getBestBuildURL(self, url):
-        try:
-            test_url = urlparse.urljoin(url, 'testReport')
-            self.jenkins.jenkins_open(urllib2.Request(test_url))
-            return test_url
-        except:
-            pass
-        try:
-            console_url = urlparse.urljoin(url, 'consoleFull')
-            self.jenkins.jenkins_open(urllib2.Request(console_url))
-            return console_url
-        except:
-            pass
-        return url
-
     def setBuildDescription(self, build, description):
         if not build.number:
             return
@@ -412,8 +396,6 @@
             self.log.debug("Found build %s" % build)
             del self.builds[uuid]
             if url:
-                build.base_url = url
-                url = self.getBestBuildURL(url)
                 build.url = url
             build.result = status
             build.number = number
diff --git a/zuul/model.py b/zuul/model.py
index 0517450..eb8bc26 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -450,7 +450,6 @@
     def __init__(self, job, uuid):
         self.job = job
         self.uuid = uuid
-        self.base_url = None
         self.url = None
         self.number = None
         self.result = None
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index f5d1298..3cd1025 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -922,17 +922,13 @@
                         result = job.failure_message
                     if job.failure_pattern:
                         pattern = job.failure_pattern
-                url = None
-                if build.url:
-                    if pattern:
-                        url = pattern.format(change=changeish,
-                                             pipeline=self.pipeline,
-                                             job=job,
-                                             build=build)
-                    else:
-                        url = build.url
-                if not url:
-                    url = job.name
+                if pattern:
+                    url = pattern.format(change=changeish,
+                                         pipeline=self.pipeline,
+                                         job=job,
+                                         build=build)
+                else:
+                    url = build.url or job.name
                 if not job.voting:
                     voting = ' (non-voting)'
                 else:
@@ -960,10 +956,10 @@
         change = build.build_set.change
 
         for build in build.build_set.getBuilds():
-            if build.base_url:
+            if build.url:
                 concurrent_builds += """\
 <li>
-  <a href="{build.base_url}">
+  <a href="{build.url}">
   {build.job.name} #{build.number}</a>: {build.result}
 </li>
 """.format(build=build)
@@ -979,7 +975,7 @@
             if other_build:
                 other_builds += """\
 <li>
-  Preceded by: <a href="{build.base_url}">
+  Preceded by: <a href="{build.url}">
   {build.job.name} #{build.number}</a>
 </li>
 """.format(build=other_build)
@@ -990,7 +986,7 @@
             if other_build:
                 other_builds += """\
 <li>
-  Succeeded by: <a href="{build.base_url}">
+  Succeeded by: <a href="{build.url}">
   {build.job.name} #{build.number}</a>
 </li>
 """.format(build=other_build)
