diff --git a/concatenate-source.lisp b/concatenate-source.lisp
index 3c7258dad6ff8c04917cb17dcb05e6dbd20b53dc..a2eb5d6d96b46fb9d1e12c10036b98470b22ad26 100644
--- a/concatenate-source.lisp
+++ b/concatenate-source.lisp
@@ -77,9 +77,11 @@
     (lisp-compilation-output-files o s))
 
   (defmethod perform ((o basic-concatenate-source-op) (s system))
-    (let ((inputs (input-files o s))
-          (output (output-file o s)))
-      (concatenate-files inputs output)))
+    (let* ((ins (input-files o s))
+           (out (output-file o s))
+           (tmp (tmpize-pathname out)))
+      (concatenate-files ins tmp)
+      (rename-file-overwriting-target tmp out)))
   (defmethod perform ((o basic-load-concatenated-source-op) (s system))
     (perform-lisp-load-source o s))
   (defmethod perform ((o basic-compile-concatenated-source-op) (s system))