diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index c2940062d09b02957911a904e715dd6a845c6d26..796604f4daea201a6886f9526e02ba6334e09bf6 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -416,12 +416,7 @@ $config = [
             'content_toc' => [ /* see VuFind\Content\TOC\PluginManager for defaults */ ],
             'db_row' => [ /* see VuFind\Db\Row\PluginManager for defaults */ ],
             'db_table' => [ /* see VuFind\Db\Table\PluginManager for defaults */ ],
-            'hierarchy_driver' => [
-                'factories' => [
-                    'default' => 'VuFind\Hierarchy\Driver\Factory::getHierarchyDefault',
-                    'flat' => 'VuFind\Hierarchy\Driver\Factory::getHierarchyFlat',
-                ],
-            ],
+            'hierarchy_driver' => [ /* see VuFind\Hierarchy\Driver\PluginManager for defaults */ ],
             'hierarchy_treedataformatter' => [
                 'invokables' => [
                     'json' => 'VuFind\Hierarchy\TreeDataFormatter\Json',
diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
similarity index 69%
rename from module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php
rename to module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
index 945d9fad70d01d47af0edfa08401bbb6f82f9bf3..2318d3f27f281dddb62c6ebced73e3dc27448185 100644
--- a/module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php
+++ b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php
@@ -42,20 +42,28 @@ use Zend\ServiceManager\ServiceManager;
  *
  * @codeCoverageIgnore
  */
-class Factory
+class ConfigurationBasedFactory
 {
     /**
      * This constructs a hierarchy driver using VuFind's service setup.
      *
-     * @param \Zend\ServiceManager\ServiceManager $sm     Top-level service manager
-     * @param string                              $config Name of config to load
-     * @param string                              $class  Name of driver class
+     * @param \Zend\ServiceManager\ServiceManager $sm            Top-level service m.
+     * @param string                              $requestedName Service being built
+     * @param array|null                          $options       Name of driver class
      *
      * @return object
+     *
+     * @throws Exception if options is populated
      */
-    public static function get(ServiceManager $sm, $config,
-        $class = 'VuFind\Hierarchy\Driver\ConfigurationBased'
+    public function __invoke(ServiceManager $sm, $requestedName,
+        array $options = null
     ) {
+        if (!empty($options)) {
+            throw new \Exception('Unexpected options passed to factory.');
+        }
+        // Get config name from requestedName
+        $parts = explode('\\', $requestedName);
+        $config = end($parts);
         // Set up options based on global VuFind settings:
         $configReader = $sm->get('VuFind\Config');
         $globalConfig = $configReader->get('config');
@@ -68,35 +76,11 @@ class Factory
         $driverConfig = $configReader->get($config);
 
         // Build object:
-        return new $class(
+        return new ConfigurationBased(
             $driverConfig,
             $sm->get('VuFind\HierarchyTreeDataSourcePluginManager'),
             $sm->get('VuFind\HierarchyTreeRendererPluginManager'),
             $options
         );
     }
-
-    /**
-     * Factory for HierarchyDefault to be called from module.config.php.
-     *
-     * @param ServiceManager $sm Service manager.
-     *
-     * @return HierarchyDefault
-     */
-    public static function getHierarchyDefault(ServiceManager $sm)
-    {
-        return static::get($sm, 'HierarchyDefault');
-    }
-
-    /**
-     * Factory for HierarchyFlat to be called from module.config.php.
-     *
-     * @param ServiceManager $sm Service manager.
-     *
-     * @return HierarchyFlat
-     */
-    public static function getHierarchyFlat(ServiceManager $sm)
-    {
-        return static::get($sm, 'HierarchyFlat');
-    }
 }
diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php b/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php
index 53fbe1ef4bb1668135193af6584894b16255a72c..41c23b3ff2db0c0995f925005c3742474419108c 100644
--- a/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php
+++ b/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php
@@ -38,6 +38,28 @@ namespace VuFind\Hierarchy\Driver;
  */
 class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
 {
+    /**
+     * Default plugin aliases.
+     *
+     * @var array
+     */
+    protected $aliases = [
+        'default' => 'VuFind\Hierarchy\Driver\HierarchyDefault',
+        'flat' => 'VuFind\Hierarchy\Driver\HierarchyFlat',
+    ];
+
+    /**
+     * Default plugin factories.
+     *
+     * @var array
+     */
+    protected $factories = [
+        'VuFind\Hierarchy\Driver\HierarchyDefault' =>
+            'VuFind\Hierarchy\Driver\ConfigurationBasedFactory',
+        'VuFind\Hierarchy\Driver\HierarchyFlat' =>
+            'VuFind\Hierarchy\Driver\ConfigurationBasedFactory',
+    ];
+
     /**
      * Return the name of the base class or interface that plug-ins must conform
      * to.