diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp
index ab32c86446b329f99c427ef689cb1dee0795c5d0..37d8b8e9a256ef262c8ec9e0b734efb167b81659 100644
--- a/parse-defsystem.lisp
+++ b/parse-defsystem.lisp
@@ -247,7 +247,13 @@ system names contained using COERCE-NAME. Return the result."
     ;; that is registered to a different location to find-system,
     ;; we also need to remember it in a special variable *systems-being-defined*.
     (with-system-definitions ()
-      (let* ((name (string-downcase (coerce-name name)))
+      (let* ((name (let ((rawname (coerce-name name)))
+                     (unless (equal (string-downcase rawname) rawname)
+                       (cerror "Continue, using downcased system name."
+                               'formatted-system-definition-error
+                               :format-control
+                               "Error, systems must have lowercase names."))
+                     (string-downcase rawname)))
              (source-file (if sfp source-file (resolve-symlinks* (load-pathname))))
              (registered (system-registered-p name))
              (registered! (if registered