diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index e9aa7eba06b73805012a38f62672225d899e3a78..9ce63af369be176a5ab028f439f19b4936951c7d 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -416,6 +416,9 @@ $config = array(
                 $logger->setConfig(\VuFind\Config\Reader::getConfig());
                 return $logger;
             },
+            'VuFind\RecordRouter' => function ($sm) {
+                return new \VuFind\Record\Router($sm->get('VuFind\RecordLoader'));
+            },
             'VuFind\SMS' => 'VuFind\SMS\Factory',
             'VuFind\Translator' => function ($sm) {
                 $factory = new \Zend\I18n\Translator\TranslatorServiceFactory();
@@ -450,7 +453,6 @@ $config = array(
             'VuFind\CacheManager' => 'VuFind\Cache\Manager',
             'VuFind\Mailer' => 'VuFind\Mailer',
             'VuFind\RecordLoader' => 'VuFind\Record\Loader',
-            'VuFind\RecordRouter' => 'VuFind\Record\Router',
             'VuFind\SearchSpecsReader' => 'VuFind\Config\SearchSpecsReader',
             'VuFind\SessionManager' => 'Zend\Session\SessionManager',
             'VuFind\WorldCatConnection' => 'VuFind\Connection\WorldCat',
diff --git a/module/VuFind/src/VuFind/Record/Router.php b/module/VuFind/src/VuFind/Record/Router.php
index eb5cafa4cccd3c065c73afb37586478269ed9c2f..c38b74db0880e2428da3569bce170c4e684384a2 100644
--- a/module/VuFind/src/VuFind/Record/Router.php
+++ b/module/VuFind/src/VuFind/Record/Router.php
@@ -38,6 +38,23 @@ namespace VuFind\Record;
  */
 class Router
 {
+    /**
+     * Record loader
+     *
+     * @var \VuFind\Record\Loader
+     */
+    protected $loader;
+
+    /**
+     * Constructor
+     *
+     * @param \VuFind\Record\Loader $loader Record loader
+     */
+    public function __construct(\VuFind\Record\Loader $loader)
+    {
+        $this->loader = $loader;
+    }
+
     /**
      * Get routing details for a controller action.
      *
@@ -75,12 +92,13 @@ class Router
             if (isset($config->Collections->collections)
                 && $config->Collections->collections
             ) {
-                if (is_object($driver)
-                    && true === $driver->tryMethod('isCollection')
-                ) {
+                if (!is_object($driver)) {
+                    list($source, $id) = explode('|', $driver, 2);
+                    $driver = $this->loader->load($id, $source);
+                }
+                if (true === $driver->tryMethod('isCollection')) {
                     $route['route'] = 'collection';
                 }
-                // TODO: make routing work correctly in non-object $driver case
             }
         }
         return $route;