diff --git a/module/VuFindTheme/Module.php b/module/VuFindTheme/Module.php
index 6c900e455a946f30c54c5aecfb137762e9ed068e..15c58f47cc26b3d87568136b34e8bca46a2d20ee 100644
--- a/module/VuFindTheme/Module.php
+++ b/module/VuFindTheme/Module.php
@@ -89,12 +89,15 @@ class Module
     {
         return [
             'factories' => [
-                'headLink' => 'VuFindTheme\View\Helper\Factory::getHeadLink',
-                'headScript' => 'VuFindTheme\View\Helper\Factory::getHeadScript',
                 'headThemeResources' =>
                     'VuFindTheme\View\Helper\Factory::getHeadThemeResources',
                 'imageLink' => 'VuFindTheme\View\Helper\Factory::getImageLink',
-                'inlineScript' =>
+                // We have to override the Zend helpers using canonical names:
+                'Zend\View\Helper\HeadLink' =>
+                    'VuFindTheme\View\Helper\Factory::getHeadLink',
+                'Zend\View\Helper\HeadScript' =>
+                    'VuFindTheme\View\Helper\Factory::getHeadScript',
+                'Zend\View\Helper\InlineScript' =>
                     'VuFindTheme\View\Helper\Factory::getInlineScript',
             ],
         ];
diff --git a/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php b/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
index b074c98ec320f9d01d90107e85a98ab0a18302fd..fdbb9d8b923fc8273c1fddbffff9379e52da657b 100644
--- a/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
+++ b/module/VuFindTheme/src/VuFindTheme/InjectTemplateListener.php
@@ -54,17 +54,18 @@ class InjectTemplateListener extends \Zend\Mvc\View\Http\InjectTemplateListener
     }
 
     /**
-     * Determine the top-level namespace of the controller
+     * Strip namespace part off controller name for compatibility with theme
+     * system.
      *
-     * @param string $controller Controller name
+     * @param string $controller controller FQCN
      *
-     * @return string
-     *
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @return string|false template name or false if controller was not matched
      */
-    protected function deriveModuleNamespace($controller)
+    public function mapController($controller)
     {
-        // Namespaces just make the theme system more confusing; ignore them:
-        return '';
+        $initial = parent::mapController($controller);
+        $parts = explode('/', $initial);
+        array_shift($parts);
+        return implode('/', $parts);
     }
 }
diff --git a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/ThemeInjectTemplateListenerTest.php b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/ThemeInjectTemplateListenerTest.php
index ccb9f4aaf0ea06b0138c14c81bd1f92b7ccd80bc..8cbd2fc0bce7c173c6110f9e98a5fcf2739c83e1 100644
--- a/module/VuFindTheme/tests/unit-tests/src/VuFindTest/ThemeInjectTemplateListenerTest.php
+++ b/module/VuFindTheme/tests/unit-tests/src/VuFindTest/ThemeInjectTemplateListenerTest.php
@@ -49,7 +49,7 @@ class ThemeInjectTemplateListenerTest extends Unit\TestCase
     {
         $l = new InjectTemplateListener();
         $this->assertEquals(
-            '', $this->callMethod($l, 'deriveModuleNamespace', ['dummy'])
+            'search', $l->mapController('VuFind\Controller\SearchController')
         );
     }