diff --git a/zorg/buildbot/builders/ClangLTOBuilder.py b/zorg/buildbot/builders/ClangLTOBuilder.py
index 1cd39a0..5121e7f 100644
--- a/zorg/buildbot/builders/ClangLTOBuilder.py
+++ b/zorg/buildbot/builders/ClangLTOBuilder.py
@@ -1,7 +1,7 @@
 from buildbot.steps.shell import ShellCommand
-from buildbot.steps.slave import RemoveDirectory
-from buildbot.status.results import FAILURE
+from buildbot.process.results import FAILURE
 from buildbot.process.properties import WithProperties
+from buildbot.plugins import steps
 
 from zorg.buildbot.commands.CmakeCommand import CmakeCommand
 from zorg.buildbot.commands.NinjaCommand import NinjaCommand
@@ -27,13 +27,13 @@
 
     # This stage could use incremental build.
     # Clean stage1, only if requested.
-    f.addStep(RemoveDirectory(name='clean-%s-dir' % obj_dir,
+    f.addStep(steps.RemoveDirectory(name='clean-%s-dir' % obj_dir,
               dir=obj_dir,
               haltOnFailure=False,
               flunkOnFailure=False,
               doStepIf=clean
               ))
-    f.addStep(RemoveDirectory(name='clean-%s-dir' % f.stage_installdirs[stage_idx],
+    f.addStep(steps.RemoveDirectory(name='clean-%s-dir' % f.stage_installdirs[stage_idx],
               dir=f.stage_installdirs[stage_idx],
               haltOnFailure=False,
               flunkOnFailure=False,
@@ -82,7 +82,6 @@
                            path=src_dir,
                            env=env,
                            workdir=obj_dir,
-                           doStepIf=FileDoesNotExist("CMakeCache.txt")
                            ))
 
     # Build clang by the system compiler
@@ -138,13 +137,13 @@
     staged_install = f.stage_installdirs[use_stage_idx]
 
     # Always do a clean build for the staged compiler.
-    f.addStep(RemoveDirectory(name='clean-%s-dir' % obj_dir,
+    f.addStep(steps.RemoveDirectory(name='clean-%s-dir' % obj_dir,
               dir=obj_dir,
               haltOnFailure=False,
               flunkOnFailure=False,
               ))
 
-    f.addStep(RemoveDirectory(name='clean-%s-dir' % f.stage_installdirs[stage_idx],
+    f.addStep(steps.RemoveDirectory(name='clean-%s-dir' % f.stage_installdirs[stage_idx],
               dir=f.stage_installdirs[stage_idx],
               haltOnFailure=False,
               flunkOnFailure=False,
@@ -175,11 +174,11 @@
 
     cmake_args.append(
         WithProperties(
-            "-DCMAKE_CXX_COMPILER=%(workdir)s/" + staged_install + "/bin/clang++"
+            "-DCMAKE_CXX_COMPILER=%(builddir)s/" + staged_install + "/bin/clang++"
         ))
     cmake_args.append(
         WithProperties(
-            "-DCMAKE_C_COMPILER=%(workdir)s/" + staged_install + "/bin/clang"
+            "-DCMAKE_C_COMPILER=%(builddir)s/" + staged_install + "/bin/clang"
         ))
 
     CmakeCommand.applyRequiredOptions(cmake_args, [
@@ -194,7 +193,6 @@
                            path=src_dir,
                            env=env,
                            workdir=obj_dir,
-                           doStepIf=FileDoesNotExist("CMakeCache.txt")
                            ))
 
     # Build clang by the staged compiler
@@ -250,9 +248,6 @@
     if lto is None:
         lto = 'ON'
 
-    if jobs is None:
-        jobs = "%(jobs)s"
-
     if extra_configure_args is None:
         extra_configure_args = []
     else:
@@ -330,11 +325,11 @@
 
         configure_args.append(
             WithProperties(
-                "-DCMAKE_AR=%(workdir)s/" + staged_install + "/bin/llvm-ar"
+                "-DCMAKE_AR=%(builddir)s/" + staged_install + "/bin/llvm-ar"
             ))
         configure_args.append(
             WithProperties(
-                "-DCMAKE_RANLIB=%(workdir)s/" + staged_install + "/bin/llvm-ranlib"
+                "-DCMAKE_RANLIB=%(builddir)s/" + staged_install + "/bin/llvm-ranlib"
             ))
 
         _addSteps4StagedCompiler(f,
@@ -371,10 +366,9 @@
 
         # Only if the compare-compilers step has failed.
         def _prevStepFailed(step):
-            steps = step.build.getStatus().getSteps()
+            steps = step.build.executedSteps
             prev_step = steps[-2]
-            (result, _) = prev_step.getResults()
-            return (result == FAILURE)
+            return (prev_step.results == FAILURE)
 
         dir1 = f.stage_objdirs[-2]
         dir2 = f.stage_objdirs[-1]
