diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index 96b6f0ecd4c43ae3f4a46c555c3310b53f24880b..8fbe59301ab6407dddd7574ea41b5b11b3bc6996 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -690,7 +690,7 @@ std::pair<bool, std::string> EvalState::resolveSearchPathElem(const SearchPathEl
         try {
             res = { true, store->toRealPath(fetchers::downloadTarball(
                         store, resolveUri(elem.second), "source", false).storePath) };
-        } catch (DownloadError & e) {
+        } catch (DataTransferError & e) {
             printError(format("warning: Nix search path entry '%1%' cannot be downloaded, ignoring") % elem.second);
             res = { false, "" };
         }
diff --git a/src/libstore/datatransfer.cc b/src/libstore/datatransfer.cc
index 452af107d178faf912c4d640969683d3e1fabb20..be5dd27cda60bd7a262eb62cfa6be64ec11a42aa 100644
--- a/src/libstore/datatransfer.cc
+++ b/src/libstore/datatransfer.cc
@@ -112,7 +112,7 @@ struct curlDataTransfer : public DataTransfer
             if (requestHeaders) curl_slist_free_all(requestHeaders);
             try {
                 if (!done)
-                    fail(DownloadError(Interrupted, format("download of '%s' was interrupted") % request.uri));
+                    fail(DataTransferError(Interrupted, format("download of '%s' was interrupted") % request.uri));
             } catch (...) {
                 ignoreException();
             }
@@ -401,14 +401,14 @@ struct curlDataTransfer : public DataTransfer
 
                 auto exc =
                     code == CURLE_ABORTED_BY_CALLBACK && _isInterrupted
-                    ? DownloadError(Interrupted, fmt("%s of '%s' was interrupted", request.verb(), request.uri))
+                    ? DataTransferError(Interrupted, fmt("%s of '%s' was interrupted", request.verb(), request.uri))
                     : httpStatus != 0
-                    ? DownloadError(err,
+                    ? DataTransferError(err,
                         fmt("unable to %s '%s': HTTP error %d",
                             request.verb(), request.uri, httpStatus)
                         + (code == CURLE_OK ? "" : fmt(" (curl error: %s)", curl_easy_strerror(code)))
                         )
-                    : DownloadError(err,
+                    : DataTransferError(err,
                         fmt("unable to %s '%s': %s (%d)",
                             request.verb(), request.uri, curl_easy_strerror(code), code));
 
@@ -662,7 +662,7 @@ struct curlDataTransfer : public DataTransfer
                 auto s3Res = s3Helper.getObject(bucketName, key);
                 DataTransferResult res;
                 if (!s3Res.data)
-                    throw DownloadError(NotFound, fmt("S3 object '%s' does not exist", request.uri));
+                    throw DataTransferError(NotFound, fmt("S3 object '%s' does not exist", request.uri));
                 res.data = s3Res.data;
                 callback(std::move(res));
 #else
diff --git a/src/libstore/datatransfer.hh b/src/libstore/datatransfer.hh
index e1c5196e08baff6c4521ad7aaa81877c912fb8b3..f2ea53ae39293a6e30f21b7e153ef450723dd691 100644
--- a/src/libstore/datatransfer.hh
+++ b/src/libstore/datatransfer.hh
@@ -72,7 +72,7 @@ struct DataTransfer
     virtual ~DataTransfer() { }
 
     /* Enqueue a data transfer request, returning a future to the result of
-       the download. The future may throw a DownloadError
+       the download. The future may throw a DataTransferError
        exception. */
     virtual void enqueueDataTransfer(const DataTransferRequest & request,
         Callback<DataTransferResult> callback) = 0;
@@ -96,11 +96,11 @@ ref<DataTransfer> getDataTransfer();
 /* Return a new DataTransfer object. */
 ref<DataTransfer> makeDataTransfer();
 
-class DownloadError : public Error
+class DataTransferError : public Error
 {
 public:
     DataTransfer::Error error;
-    DownloadError(DataTransfer::Error error, const FormatOrString & fs)
+    DataTransferError(DataTransfer::Error error, const FormatOrString & fs)
         : Error(fs), error(error)
     { }
 };
diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc
index 9a19af5e0ca3432c0256b5a4117aaa300d2d2cc7..5e446ddf282b9b710bdf8c1c33e9456606f877d0 100644
--- a/src/libstore/http-binary-cache-store.cc
+++ b/src/libstore/http-binary-cache-store.cc
@@ -89,7 +89,7 @@ protected:
             request.head = true;
             getDataTransfer()->download(request);
             return true;
-        } catch (DownloadError & e) {
+        } catch (DataTransferError & e) {
             /* S3 buckets return 403 if a file doesn't exist and the
                bucket is unlistable, so treat 403 as 404. */
             if (e.error == DataTransfer::NotFound || e.error == DataTransfer::Forbidden)
@@ -108,7 +108,7 @@ protected:
         req.mimeType = mimeType;
         try {
             getDataTransfer()->download(req);
-        } catch (DownloadError & e) {
+        } catch (DataTransferError & e) {
             throw UploadToHTTP("while uploading to HTTP binary cache at '%s': %s", cacheUri, e.msg());
         }
     }
@@ -125,7 +125,7 @@ protected:
         auto request(makeRequest(path));
         try {
             getDataTransfer()->download(std::move(request), sink);
-        } catch (DownloadError & e) {
+        } catch (DataTransferError & e) {
             if (e.error == DataTransfer::NotFound || e.error == DataTransfer::Forbidden)
                 throw NoSuchBinaryCacheFile("file '%s' does not exist in binary cache '%s'", path, getUri());
             maybeDisable();
@@ -146,7 +146,7 @@ protected:
             {[callbackPtr, this](std::future<DataTransferResult> result) {
                 try {
                     (*callbackPtr)(result.get().data);
-                } catch (DownloadError & e) {
+                } catch (DataTransferError & e) {
                     if (e.error == DataTransfer::NotFound || e.error == DataTransfer::Forbidden)
                         return (*callbackPtr)(std::shared_ptr<std::string>());
                     maybeDisable();
diff --git a/src/nix-channel/nix-channel.cc b/src/nix-channel/nix-channel.cc
index d0719194d5bbd7e5fa81ccd8b922e075b99e9df1..0f8024d7bb9b153540b99f91bea81f6c2cfbcf51 100755
--- a/src/nix-channel/nix-channel.cc
+++ b/src/nix-channel/nix-channel.cc
@@ -113,7 +113,7 @@ static void update(const StringSet & channelNames)
             // Download the channel tarball.
             try {
                 filename = store->toRealPath(fetchers::downloadFile(store, url + "/nixexprs.tar.xz", "nixexprs.tar.xz", false).storePath);
-            } catch (DownloadError & e) {
+            } catch (DataTransferError & e) {
                 filename = store->toRealPath(fetchers::downloadFile(store, url + "/nixexprs.tar.bz2", "nixexprs.tar.bz2", false).storePath);
             }
         }