diff --git a/module/VuFind/src/VuFind/XSLT/Processor.php b/module/VuFind/src/VuFind/XSLT/Processor.php
index 38ca7469161c86b4bed2265779f033506a0db857..fd4f47cabdf01b4e5698afb07c2de19f7f385008 100644
--- a/module/VuFind/src/VuFind/XSLT/Processor.php
+++ b/module/VuFind/src/VuFind/XSLT/Processor.php
@@ -41,6 +41,29 @@ use XSLTProcessor;
  */
 class Processor
 {
+    /**
+     * Locate an XSLT file and return its full path.
+     *
+     * @param string $xslt Filename
+     *
+     * @return string
+     * @throws \Exception
+     */
+    protected static function findXslt($xslt)
+    {
+        $paths = [
+            LOCAL_OVERRIDE_DIR . '/xsl/',
+            APPLICATION_PATH . '/module/VuFind/xsl/',
+            APPLICATION_PATH . '/xsl/',
+        ];
+        foreach ($paths as $path) {
+            if (file_exists($path . $xslt)) {
+                return $path . $xslt;
+            }
+        }
+        throw new \Exception('Cannot locate ' . $xslt);
+    }
+
     /**
      * Perform an XSLT transformation and return the results.
      *
@@ -53,8 +76,7 @@ class Processor
     public static function process($xslt, $xml, $params = [])
     {
         $style = new DOMDocument();
-        // TODO: support local overrides
-        $style->load(APPLICATION_PATH . '/module/VuFind/xsl/' . $xslt);
+        $style->load(static::findXslt($xslt));
         $xsl = new XSLTProcessor();
         $xsl->importStyleSheet($style);
         $doc = new DOMDocument();