From 06800c5939a2c163a4b93efc71b9195d3f64e920 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Tue, 26 Jun 2012 12:07:14 -0400
Subject: [PATCH] Defined static routes; adjusted parameter lists to URL view
 helper to use them.

---
 module/VuFind/config/module.config.php        | 205 ++++++++++--------
 .../VuFind/src/VuFind/Search/Base/Options.php |  25 ++-
 .../src/VuFind/Search/Favorites/Options.php   |   7 +-
 .../src/VuFind/Search/MixedList/Options.php   |   7 +-
 .../VuFind/src/VuFind/Search/Solr/Options.php |  17 +-
 .../src/VuFind/Search/SolrAuth/Options.php    |  14 +-
 .../src/VuFind/Search/SolrAuthor/Options.php  |   7 +-
 .../Search/SolrAuthorFacets/Options.php       |   7 +-
 .../VuFind/Search/SolrReserves/Options.php    |  14 +-
 .../src/VuFind/Search/Summon/Options.php      |  16 +-
 .../VuFind/src/VuFind/Search/Tags/Options.php |   7 +-
 .../src/VuFind/Search/WorldCat/Options.php    |  16 +-
 .../VuFind/Theme/Root/Helper/RecordLink.php   |  12 +-
 .../templates/Recommend/AuthorFacets.phtml    |   4 +-
 .../templates/Recommend/AuthorInfo.phtml      |   2 +-
 .../Recommend/AuthorityRecommend.phtml        |   2 +-
 .../templates/Recommend/CatalogResults.phtml  |   2 +-
 .../templates/Recommend/ExpandFacets.phtml    |   2 +-
 .../templates/Recommend/FavoriteFacets.phtml  |   2 +-
 .../templates/Recommend/SideFacets.phtml      |   2 +-
 .../templates/Recommend/SummonResults.phtml   |   2 +-
 .../Recommend/WorldCatIdentities.phtml        |   4 +-
 .../templates/Recommend/WorldCatTerms.phtml   |   2 +-
 .../RecordDriver/SolrAuth/result-list.phtml   |   4 +-
 .../RecordDriver/SolrDefault/core.phtml       |   4 +-
 .../SolrDefault/link-author.phtml             |   2 +-
 .../SolrDefault/link-journaltitle.phtml       |   2 +-
 .../SolrDefault/link-series.phtml             |   2 +-
 .../SolrDefault/link-subject.phtml            |   2 +-
 .../RecordDriver/SolrDefault/link-title.phtml |   2 +-
 .../RecordDriver/SolrDefault/list-entry.phtml |  12 +-
 .../SolrDefault/result-grid.phtml             |   2 +-
 .../SolrDefault/result-list.phtml             |   2 +-
 .../RecordDriver/Summon/link-author.phtml     |   2 +-
 .../Summon/link-journaltitle.phtml            |   2 +-
 .../RecordDriver/Summon/link-series.phtml     |   2 +-
 .../RecordDriver/Summon/link-subject.phtml    |   2 +-
 .../RecordDriver/Summon/link-title.phtml      |   2 +-
 .../RecordDriver/WorldCat/link-author.phtml   |   2 +-
 .../RecordDriver/WorldCat/link-series.phtml   |   2 +-
 .../RecordDriver/WorldCat/link-subject.phtml  |   2 +-
 .../RecordDriver/WorldCat/link-title.phtml    |   2 +-
 .../blueprint/templates/admin/config.phtml    |   4 +-
 .../templates/admin/maintenance.phtml         |   2 +-
 .../blueprint/templates/admin/menu.phtml      |   8 +-
 .../ajax/result-google-map-info.phtml         |   4 +-
 .../templates/ajax/status-full.phtml          |   2 +-
 .../templates/alphabrowse/home.phtml          |  18 +-
 .../blueprint/templates/author/home.phtml     |   2 +-
 .../blueprint/templates/browse/home.phtml     |  10 +-
 .../blueprint/templates/browse/top_list.phtml |   2 +-
 .../blueprint/templates/cart/cart.phtml       |   2 +-
 .../blueprint/templates/cart/email.phtml      |   2 +-
 .../blueprint/templates/cart/export.phtml     |   2 +-
 .../blueprint/templates/cart/save.phtml       |   4 +-
 .../blueprint/templates/error/index.phtml     |   4 +-
 .../vufind/blueprint/templates/footer.phtml   |  14 +-
 .../vufind/blueprint/templates/header.phtml   |  10 +-
 .../templates/install/disabled.phtml          |   2 +-
 .../blueprint/templates/install/done.phtml    |   2 +-
 .../templates/install/fixbasicconfig.phtml    |   2 +-
 .../templates/install/fixcache.phtml          |   2 +-
 .../templates/install/fixdatabase.phtml       |   2 +-
 .../templates/install/fixdependencies.phtml   |   2 +-
 .../blueprint/templates/install/fixils.phtml  |   2 +-
 .../blueprint/templates/install/fixsolr.phtml |   2 +-
 .../blueprint/templates/install/home.phtml    |   4 +-
 .../blueprint/templates/layout/layout.phtml   |   4 +-
 .../templates/myresearch/account.phtml        |   7 +-
 .../templates/myresearch/cataloglogin.phtml   |   7 +-
 .../templates/myresearch/checkedout.phtml     |   9 +-
 .../templates/myresearch/delete.phtml         |   2 +-
 .../blueprint/templates/myresearch/edit.phtml |   9 +-
 .../templates/myresearch/editlist.phtml       |   7 +-
 .../templates/myresearch/email.phtml          |   2 +-
 .../templates/myresearch/export.phtml         |   2 +-
 .../templates/myresearch/fines.phtml          |   9 +-
 .../templates/myresearch/holds.phtml          |   9 +-
 .../templates/myresearch/login.phtml          |  11 +-
 .../blueprint/templates/myresearch/menu.phtml |  12 +-
 .../templates/myresearch/mylist.phtml         |  13 +-
 .../templates/myresearch/profile.phtml        |   7 +-
 .../vufind/blueprint/templates/oai/home.phtml |   2 +-
 .../blueprint/templates/record/save.phtml     |   4 +-
 .../blueprint/templates/record/view.phtml     |   6 +-
 .../templates/search/advanced/layout.phtml    |   6 +-
 .../templates/search/history-table.phtml      |   6 +-
 .../blueprint/templates/search/home.phtml     |   2 +-
 .../templates/search/list-authorfacets.phtml  |   2 +-
 .../blueprint/templates/search/results.phtml  |   8 +-
 .../templates/search/searchbox.phtml          |  13 +-
 .../blueprint/templates/upgrade/error.phtml   |   2 +-
 .../templates/upgrade/fixanonymoustags.phtml  |   2 +-
 .../templates/upgrade/fixmetadata.phtml       |   2 +-
 .../templates/upgrade/getdbcredentials.phtml  |   2 +-
 .../templates/upgrade/getsourcedir.phtml      |   2 +-
 .../blueprint/templates/upgrade/home.phtml    |   2 +-
 .../templates/Recommend/FavoriteFacets.phtml  |   2 +-
 .../RecordDriver/SolrAuth/result-list.phtml   |   2 +-
 .../RecordDriver/SolrDefault/core.phtml       |   2 +-
 .../SolrDefault/link-author.phtml             |   2 +-
 .../SolrDefault/link-journaltitle.phtml       |   2 +-
 .../SolrDefault/link-series.phtml             |   2 +-
 .../SolrDefault/link-subject.phtml            |   2 +-
 .../RecordDriver/SolrDefault/link-title.phtml |   2 +-
 .../RecordDriver/Summon/link-author.phtml     |   2 +-
 .../Summon/link-journaltitle.phtml            |   2 +-
 .../RecordDriver/Summon/link-series.phtml     |   2 +-
 .../RecordDriver/Summon/link-subject.phtml    |   2 +-
 .../RecordDriver/Summon/link-title.phtml      |   2 +-
 .../RecordDriver/WorldCat/link-author.phtml   |   2 +-
 .../RecordDriver/WorldCat/link-series.phtml   |   2 +-
 .../RecordDriver/WorldCat/link-subject.phtml  |   2 +-
 .../RecordDriver/WorldCat/link-title.phtml    |   2 +-
 .../templates/alphabrowse/home.phtml          |  14 +-
 .../jquerymobile/templates/author/home.phtml  |   2 +-
 .../jquerymobile/templates/browse/home.phtml  |  16 +-
 .../templates/default-footer-navbar.phtml     |   4 +-
 .../jquerymobile/templates/header.phtml       |   2 +-
 .../templates/myresearch/editlist.phtml       |   8 +-
 .../templates/myresearch/fines.phtml          |   2 +-
 .../templates/myresearch/footer-navbar.phtml  |   6 +-
 .../templates/myresearch/header-navbar.phtml  |   6 +-
 .../templates/myresearch/login.phtml          |   4 +-
 .../templates/myresearch/mylist.phtml         |   2 +-
 .../jquerymobile/templates/record/save.phtml  |   4 +-
 .../templates/search/advanced.phtml           |   2 +-
 .../templates/search/header-navbar.phtml      |   4 +-
 .../templates/search/history-table.phtml      |   6 +-
 .../jquerymobile/templates/search/home.phtml  |  10 +-
 .../templates/search/list-authorfacets.phtml  |   2 +-
 .../templates/search/results.phtml            |   2 +-
 .../templates/search/searchbox.phtml          |   2 +-
 .../vufind/root/templates/error/index.phtml   |   4 +-
 .../search/opensearch-describe.phtml          |   4 +-
 135 files changed, 417 insertions(+), 434 deletions(-)

diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index 8f954f6a3fe..b3363509ff7 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -1,5 +1,7 @@
 <?php
-return array(
+namespace VuFind\Module\Configuration;
+
+$config = array(
     'router' => array(
         'routes' => array(
             'default' => array(
@@ -16,100 +18,6 @@ return array(
                     ),
                 ),
             ),
-            'record' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/Record/[:id[/:action]]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'Record',
-                        'action'     => 'Home',
-                    ),
-                ),
-            ),
-            'missingrecord' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/MissingRecord/[:id[/:action]]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'MissingRecord',
-                        'action'     => 'Home',
-                    ),
-                ),
-            ),
-            'summonrecord' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/SummonRecord/[:id[/:action]]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'MissingRecord',
-                        'action'     => 'Home',
-                    ),
-                ),
-            ),
-            'worldcatrecord' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/WorldCatRecord/[:id[/:action]]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'WorldCatRecord',
-                        'action'     => 'Home',
-                    ),
-                ),
-            ),
-            'userList' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/MyResearch/MyList/[:id]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'MyResearch',
-                        'action'     => 'MyList',
-                    ),
-                ),
-            ),
-            'editList' => array(
-                'type'    => 'Zend\Mvc\Router\Http\Segment',
-                'options' => array(
-                    'route'    => '/MyResearch/EditList/[:id]',
-                    'constraints' => array(
-                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
-                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
-                    ),
-                    'defaults' => array(
-                        'controller' => 'MyResearch',
-                        'action'     => 'EditList',
-                    ),
-                ),
-            ),
-            'home' => array(
-                'type' => 'Zend\Mvc\Router\Http\Literal',
-                'options' => array(
-                    'route'    => '/',
-                    'defaults' => array(
-                        'controller' => 'index',
-                        'action'     => 'Home',
-                    ),
-                ),
-            ),
         ),
     ),
     'controller' => array(
@@ -127,3 +35,110 @@ return array(
         'template_path_stack'      => array(),
     ),
 );
+
+// Define record view routes -- route name => controller
+$recordRoutes = array(
+    'record' => 'Record',
+    'missingrecord' => 'MissingRecord',
+    'summonrecord' => 'SummonRecord',
+    'worldcatrecord' => 'WorldCatRecord'
+);
+
+// Define list-related routes -- route name => MyResearch action
+$listRoutes = array('userList' => 'MyList', 'editList' => 'EditList');
+
+// Define static routes -- Controller/Action strings
+$staticRoutes = array(
+    'Admin/Config', 'Admin/DeleteExpiredSearches', 'Admin/EnableAutoConfig',
+    'Admin/Maintenance', 'Admin/Statistics', 'AlphaBrowse/Home',
+    'AlphaBrowse/Results',
+    'Author/Home', 'Author/Search',
+    'Authority/Home', 'Authority/Record', 'Authority/Search',
+    'Browse/Author', 'Browse/Dewey', 'Browse/Era', 'Browse/Genre', 'Browse/Home',
+    'Browse/LCC', 'Browse/Region', 'Browse/Tag', 'Browse/Topic',
+    'Cart/Email', 'Cart/Export', 'Cart/Home', 'Cart/MyResearchBulk', 'Cart/Save',
+    'Cover/Unavailable', 'Help/Home',
+    'Install/Done', 'Install/FixBasicConfig', 'Install/FixCache',
+    'Install/FixDatabase', 'Install/FixDependencies', 'Install/FixILS',
+    'Install/FixSolr', 'Install/Home',
+    'MyResearch/Account', 'MyResearch/CheckedOut', 'MyResearch/Delete',
+    'MyResearch/DeleteList', 'MyResearch/Edit', 'MyResearch/Email',
+    'MyResearch/Export', 'MyResearch/Favorites', 'MyResearch/Holds',
+    'MyResearch/Home', 'MyResearch/Logout', 'MyResearch/Profile',
+    'MyResearch/SaveSearch',
+    'OAI/Server', 'Records/Home',
+    'Search/Advanced', 'Search/Email', 'Search/History', 'Search/Home',
+    'Search/NewItem', 'Search/OpenSearch', 'Search/Reserves', 'Search/Results',
+    'Search/Suggest',
+    'Summon/Advanced', 'Summon/Home', 'Summon/Search',
+    'Tag/Home',
+    'Upgrade/Home', 'Upgrade/FixAnonymousTags', 'Upgrade/FixMetadata',
+    'Upgrade/GetDBCredentials', 'Upgrade/GetSourceDir', 'Upgrade/Reset',
+    'WorldCat/Advanced', 'WorldCat/Home', 'WorldCat/Search'
+);
+
+// Build record routes
+foreach ($recordRoutes as $routeName => $controller) {
+    $config['router']['routes'][$routeName] = array(
+        'type'    => 'Zend\Mvc\Router\Http\Segment',
+        'options' => array(
+            'route'    => '/' . $controller . '/[:id[/:action]]',
+            'constraints' => array(
+                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
+                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
+            ),
+            'defaults' => array(
+                'controller' => $controller,
+                'action'     => 'Home',
+            )
+        )
+    );
+}
+
+// Build list routes
+foreach ($listRoutes as $routeName => $action) {
+    $config['router']['routes'][$routeName] = array(
+        'type'    => 'Zend\Mvc\Router\Http\Segment',
+        'options' => array(
+            'route'    => '/MyResearch/' . $action . '/[:id]',
+            'constraints' => array(
+                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
+                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
+            ),
+            'defaults' => array(
+                'controller' => 'MyResearch',
+                'action'     => $action,
+            )
+        )
+    );
+}
+
+// Build static routes
+foreach ($staticRoutes as $route) {
+    list($controller, $action) = explode('/', $route);
+    $routeName = str_replace('/', '-', strtolower($route));
+    $config['router']['routes'][$routeName] = array(
+        'type' => 'Zend\Mvc\Router\Http\Literal',
+        'options' => array(
+            'route'    => '/' . $route,
+            'defaults' => array(
+                'controller' => $controller,
+                'action'     => $action,
+            )
+        )
+    );
+}
+
+// Add the home route last
+$config['router']['routes']['home'] = array(
+    'type' => 'Zend\Mvc\Router\Http\Literal',
+    'options' => array(
+        'route'    => '/',
+        'defaults' => array(
+            'controller' => 'index',
+            'action'     => 'Home',
+        )
+    )
+);
+
+return $config;
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Base/Options.php b/module/VuFind/src/VuFind/Search/Base/Options.php
index a8456aa243e..dee373eb4e9 100644
--- a/module/VuFind/src/VuFind/Search/Base/Options.php
+++ b/module/VuFind/src/VuFind/Search/Base/Options.php
@@ -337,19 +337,30 @@ abstract class Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     abstract public function getSearchAction();
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name for the search home action.
+     *
+     * @return string
+     */
+    public function getSearchHomeAction()
+    {
+        // Assume the home action is the same as the search action, only with
+        // a "-home" suffix in place of the search action.
+        $basicSearch = $this->getSearchAction();
+        return substr($basicSearch, 0, strpos($basicSearch, '-')) . '-home';
+    }
+
+    /**
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Options.php b/module/VuFind/src/VuFind/Search/Favorites/Options.php
index 6dd725d48ac..cd166fa7261 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Options.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Options.php
@@ -54,13 +54,12 @@ class VF_Search_Favorites_Options extends VF_Search_Base_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'MyResearch', 'action' => 'Favorites');
+        return 'myresearch-favorites';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/MixedList/Options.php b/module/VuFind/src/VuFind/Search/MixedList/Options.php
index fe9291a56e6..22e88d5c023 100644
--- a/module/VuFind/src/VuFind/Search/MixedList/Options.php
+++ b/module/VuFind/src/VuFind/Search/MixedList/Options.php
@@ -38,13 +38,12 @@
 class VF_Search_MixedList_Options extends VF_Search_Base_Options
 {
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Records', 'action' => 'Home');
+        return 'records-home';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Solr/Options.php b/module/VuFind/src/VuFind/Search/Solr/Options.php
index 7538ec50ec6..9bedbe4c2ca 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Options.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Options.php
@@ -293,26 +293,25 @@ class Options extends BaseOptions
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
+
     public function getSearchAction()
     {
-        return array('controller' => 'Search', 'action' => 'Results');
+        return 'search-results';
     }
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
-        return array('controller' => 'Search', 'action' => 'Advanced');
+        return 'search-advanced';
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Search/SolrAuth/Options.php b/module/VuFind/src/VuFind/Search/SolrAuth/Options.php
index 12656659a1a..0d334b58c05 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuth/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuth/Options.php
@@ -50,22 +50,20 @@ class VF_Search_SolrAuth_Options extends VF_Search_Solr_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Authority', 'action' => 'Search');
+        return 'authority-search';
     }
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php b/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
index 3813a822f87..1fd539b9159 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthor/Options.php
@@ -49,13 +49,12 @@ class VF_Search_SolrAuthor_Options extends VF_Search_Solr_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Author', 'action' => 'Home');
+        return 'author-home';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
index b1eb87883e5..4279dd3aa14 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Options.php
@@ -58,13 +58,12 @@ class VF_Search_SolrAuthorFacets_Options extends VF_Search_Solr_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Author', 'action' => 'Search');
+        return 'author-search';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/SolrReserves/Options.php b/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
index b13bc66edd2..70aa4421cdd 100644
--- a/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
+++ b/module/VuFind/src/VuFind/Search/SolrReserves/Options.php
@@ -52,22 +52,20 @@ class VF_Search_SolrReserves_Options extends VF_Search_Solr_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Search', 'action' => 'Reserves');
+        return 'search-reserves';
     }
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
diff --git a/module/VuFind/src/VuFind/Search/Summon/Options.php b/module/VuFind/src/VuFind/Search/Summon/Options.php
index b2bc186c46e..2e1358c972f 100644
--- a/module/VuFind/src/VuFind/Search/Summon/Options.php
+++ b/module/VuFind/src/VuFind/Search/Summon/Options.php
@@ -117,26 +117,24 @@ class VF_Search_Summon_Options extends VF_Search_Base_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Summon', 'action' => 'Search');
+        return 'summon-search';
     }
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
-        return array('controller' => 'Summon', 'action' => 'Advanced');
+        return 'summon-advanced';
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Search/Tags/Options.php b/module/VuFind/src/VuFind/Search/Tags/Options.php
index 3c616090756..cd4b2ad9423 100644
--- a/module/VuFind/src/VuFind/Search/Tags/Options.php
+++ b/module/VuFind/src/VuFind/Search/Tags/Options.php
@@ -54,13 +54,12 @@ class VF_Search_Tags_Options extends VF_Search_Base_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'Tag', 'action' => 'Home');
+        return 'tag-home';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/WorldCat/Options.php b/module/VuFind/src/VuFind/Search/WorldCat/Options.php
index 508b8bdb400..2c9fb7f4fdf 100644
--- a/module/VuFind/src/VuFind/Search/WorldCat/Options.php
+++ b/module/VuFind/src/VuFind/Search/WorldCat/Options.php
@@ -82,25 +82,23 @@ class VF_Search_WorldCat_Options extends VF_Search_Base_Options
     }
 
     /**
-     * Return an array describing the action used for rendering search results
-     * (same format as expected by the URL view helper).
+     * Return the route name for the search results action.
      *
-     * @return array
+     * @return string
      */
     public function getSearchAction()
     {
-        return array('controller' => 'WorldCat', 'action' => 'Search');
+        return 'worldcat-search';
     }
 
     /**
-     * Return an array describing the action used for performing advanced searches
-     * (same format as expected by the URL view helper).  Return false if the feature
-     * is not supported.
+     * Return the route name of the action used for performing advanced searches.
+     * Returns false if the feature is not supported.
      *
-     * @return array|bool
+     * @return string|bool
      */
     public function getAdvancedSearchAction()
     {
-        return array('controller' => 'WorldCat', 'action' => 'Advanced');
+        return 'worldcat-advanced';
     }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php b/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php
index 6fd25612dae..a4d2ba43cb4 100644
--- a/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php
+++ b/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php
@@ -60,14 +60,12 @@ class VuFind_Theme_Root_Helper_RecordLink extends Zend_View_Helper_Abstract
     {
         switch ($link['type']) {
         case 'bib':
-            $url = $this->view->url(array('id' => $link['value']), 'record');
+            $url = $this->view->url('record', array('id' => $link['value']));
             break;
         case 'oclc':
-            $url = $this->view->url(
-                array('controller' => 'Search', 'action' => 'Results'), 'default'
-            );
-            $url .= '?lookfor=' . urlencode($link['value']) .
-                '&type=oclc_num&jumpto=1';
+            $url = $this->view->url('search-results');
+                . '?lookfor=' . urlencode($link['value'])
+                . '&type=oclc_num&jumpto=1';
             break;
         default:
             throw new Exception('Unexpected link type: ' . $link['type']);
@@ -90,7 +88,7 @@ class VuFind_Theme_Root_Helper_RecordLink extends Zend_View_Helper_Abstract
         if (!empty($action)) {
             $params['action'] = $action;
         }
-        return $this->view->url($params, $driver->getRecordRoute(), true);
+        return $this->view->url($driver->getRecordRoute(), $params);
     }
 
     /**
diff --git a/themes/vufind/blueprint/templates/Recommend/AuthorFacets.phtml b/themes/vufind/blueprint/templates/Recommend/AuthorFacets.phtml
index 08e3e22d153..30a49b408a2 100644
--- a/themes/vufind/blueprint/templates/Recommend/AuthorFacets.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/AuthorFacets.phtml
@@ -6,11 +6,11 @@
       <div class="span-5">
       <? foreach($similarAuthors['list'] as $i => $author): ?>
         <? if ($i == 5): ?>
-        <a href="<?=$this->url(array('action' => 'Search', 'controller' => 'Author'), 'default', true) . '?lookfor=' . urlencode($this->recommend->getSearchTerm()) ?>"><strong><?=$this->transEsc("see all") ?> <?=(isset($similarAuthors['count']) && $similarAuthors['count']) ? $similarAuthors['count'] : ''?> &raquo;</strong></a>
+        <a href="<?=$this->url('author-search') . '?lookfor=' . urlencode($this->recommend->getSearchTerm()) ?>"><strong><?=$this->transEsc("see all") ?> <?=(isset($similarAuthors['count']) && $similarAuthors['count']) ? $similarAuthors['count'] : ''?> &raquo;</strong></a>
       </div>
       <div class="span-5 last">
         <? endif; ?>
-        <a style="display:inline-block;text-indent:-10px;padding-left:10px;" href="<?=$this->url(array('controller' => 'Author'), 'default', true) . '?author=' . urlencode($author['value'])?>"><?=$author['value'] ?><? /* count disabled -- uncomment to add: echo ' - ' . $author['count']; */ ?></a>
+        <a style="display:inline-block;text-indent:-10px;padding-left:10px;" href="<?=$this->url('author-home') . '?author=' . urlencode($author['value'])?>"><?=$author['value'] ?><? /* count disabled -- uncomment to add: echo ' - ' . $author['count']; */ ?></a>
         <? if ($i+1<count($similarAuthors['list'])): ?>
           <br/>
         <? endif; ?>
diff --git a/themes/vufind/blueprint/templates/Recommend/AuthorInfo.phtml b/themes/vufind/blueprint/templates/Recommend/AuthorInfo.phtml
index 5ffddbf2d6d..dfdfc512a9a 100644
--- a/themes/vufind/blueprint/templates/Recommend/AuthorInfo.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/AuthorInfo.phtml
@@ -7,7 +7,7 @@
     <img src="<?=$this->info['image'] ?>" alt="<?=$this->escape($this->info['altimage']) ?>" width="150px" class="alignleft recordcover"/>
   <? endif; ?>
 
-  <?=$this->truncate(preg_replace('/___baseurl___/', $this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true), $this->info['description']), 4500, "...") ?>
+  <?=$this->truncate(preg_replace('/___baseurl___/', $this->url('search-results'), $this->info['description']), 4500, "...") ?>
 
   <div class="providerLink"><a class="wikipedia" href="http://<?=$this->info['wiki_lang'] ?>.wikipedia.org/wiki/<?=$this->escape($this->info['name']/*url*/) ?>" target="new"><?=$this->translate('wiki_link') ?></a></div>
 
diff --git a/themes/vufind/blueprint/templates/Recommend/AuthorityRecommend.phtml b/themes/vufind/blueprint/templates/Recommend/AuthorityRecommend.phtml
index 0dc9c507984..1892fa6c778 100644
--- a/themes/vufind/blueprint/templates/Recommend/AuthorityRecommend.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/AuthorityRecommend.phtml
@@ -5,7 +5,7 @@
       <? for ($i = 0; $i < count($data); $i++): ?>
         <?
             // Generate a new search URL that replaces the user's current term with the authority term:
-            $url = $this->url($this->results->getSearchAction(), 'default', true)
+            $url = $this->url($this->results->getSearchAction())
                 . $this->results->getUrl()->replaceTerm($this->results->getDisplayQuery(), $data[$i]['heading']);
         ?>
         <a href="<?=$url?>"><?=$this->escape($data[$i]['heading'])?></a><? if ($i != count($data) - 1): ?>, <? endif; ?>
diff --git a/themes/vufind/blueprint/templates/Recommend/CatalogResults.phtml b/themes/vufind/blueprint/templates/Recommend/CatalogResults.phtml
index c39883696e3..97f14163d70 100644
--- a/themes/vufind/blueprint/templates/Recommend/CatalogResults.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/CatalogResults.phtml
@@ -35,6 +35,6 @@
     </li>
     <? endforeach; ?>
   </ul>
-  <p><a href="<?=$this->url($searchObject->getSearchAction(), 'default', true) . $searchObject->getUrl()->setLimit($searchObject->getDefaultLimit())?>"><?=$this->transEsc('More catalog results')?>...</a></p>
+  <p><a href="<?=$this->url($searchObject->getSearchAction()) . $searchObject->getUrl()->setLimit($searchObject->getDefaultLimit())?>"><?=$this->transEsc('More catalog results')?>...</a></p>
 </div>
 <? endif ?>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/Recommend/ExpandFacets.phtml b/themes/vufind/blueprint/templates/Recommend/ExpandFacets.phtml
index a52320cd960..4bd05a3834e 100644
--- a/themes/vufind/blueprint/templates/Recommend/ExpandFacets.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/ExpandFacets.phtml
@@ -9,7 +9,7 @@
     <h4><?=$this->translate($cluster['label']) ?></h4>
     <ul class="bulleted">
   <? foreach ($cluster['list'] as $thisFacet): ?>
-    <li><a href="<?=$this->url(array('controller'=>'Search','action'=>'Results'),'default',true) . $blankResults->getUrl()->addFacet($title, $thisFacet['value'])?>"><?=$this->escape($thisFacet['displayText'])?></a></li>
+    <li><a href="<?=$this->url('search-results') . $blankResults->getUrl()->addFacet($title, $thisFacet['value'])?>"><?=$this->escape($thisFacet['displayText'])?></a></li>
   <? endforeach; ?>
     </ul>
  <? endforeach; ?>
diff --git a/themes/vufind/blueprint/templates/Recommend/FavoriteFacets.phtml b/themes/vufind/blueprint/templates/Recommend/FavoriteFacets.phtml
index 6e11925b6f0..c14debfbc31 100644
--- a/themes/vufind/blueprint/templates/Recommend/FavoriteFacets.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/FavoriteFacets.phtml
@@ -10,7 +10,7 @@
             <? if ($current['isApplied']): ?>
               <strong><?=$this->escape($current['displayText'])?></strong>
             <? else: ?>
-              <a href="<?=$this->url(array('id' => $current['value']), 'userList')?>"><?=$this->escape($current['displayText'])?></a>
+              <a href="<?=$this->url('userList', array('id' => $current['value']))?>"><?=$this->escape($current['displayText'])?></a>
             <? endif; ?>
             (<?=$this->escape($current['count'])?>)
           </li>
diff --git a/themes/vufind/blueprint/templates/Recommend/SideFacets.phtml b/themes/vufind/blueprint/templates/Recommend/SideFacets.phtml
index 9030e9f1903..f1db4020ef4 100644
--- a/themes/vufind/blueprint/templates/Recommend/SideFacets.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/SideFacets.phtml
@@ -32,7 +32,7 @@
     <? foreach ($sideFacetSet as $title => $cluster): ?>
       <? if (isset($dateFacets[$title])): ?>
         <? /* Load the publication date slider UI widget */ $this->headScript()->appendFile('pubdate_slider.js'); ?>
-        <form action="<?=$this->url()?>" name="<?=$this->escape($title)?>Filter" id="<?=$this->escape($title)?>Filter">
+        <form action="" name="<?=$this->escape($title)?>Filter" id="<?=$this->escape($title)?>Filter">
           <?=$this->results->getUrl()->asHiddenFields(array('filter' => "/^{$title}:.*/"))?>
           <input type="hidden" name="daterange[]" value="<?=$this->escape($title)?>"/>
           <fieldset class="publishDateLimit" id="<?=$this->escape($title)?>">
diff --git a/themes/vufind/blueprint/templates/Recommend/SummonResults.phtml b/themes/vufind/blueprint/templates/Recommend/SummonResults.phtml
index 51cb76b6d51..11d4cdd9cf5 100644
--- a/themes/vufind/blueprint/templates/Recommend/SummonResults.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/SummonResults.phtml
@@ -34,6 +34,6 @@
     </li>
     <? endforeach; ?>
   </ul>
-  <p><a href="<?=$this->url($searchObject->getSearchAction(), 'default', true) . $searchObject->getUrl()->setLimit($searchObject->getDefaultLimit())?>"><?=$this->transEsc('More Summon results')?>...</a></p>
+  <p><a href="<?=$this->url($searchObject->getSearchAction()) . $searchObject->getUrl()->setLimit($searchObject->getDefaultLimit())?>"><?=$this->transEsc('More Summon results')?>...</a></p>
 </div>
 <? endif ?>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/Recommend/WorldCatIdentities.phtml b/themes/vufind/blueprint/templates/Recommend/WorldCatIdentities.phtml
index 35124b5db7d..cff4a76c99d 100644
--- a/themes/vufind/blueprint/templates/Recommend/WorldCatIdentities.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/WorldCatIdentities.phtml
@@ -8,7 +8,7 @@
           </dl>
           <dl class="offscreen" id="narrowGroupHidden_WCIdents">
         <? endif; ?>
-        <dd>&bull; <a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?lookfor=%22<?=urlencode($author)?>%22&amp;type=Author"><?=$this->escape($author)?></a>
+        <dd>&bull; <a href="<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($author)?>%22&amp;type=Author"><?=$this->escape($author)?></a>
         <? if (count($subjects) > 0): ?>
           <dl>
           <dd><?=$this->transEsc('Related Subjects')?>:</dd>
@@ -18,7 +18,7 @@
               </dl>
               <dl class="offscreen" id="narrowGroupHidden_WCIdents<?=$i?>">
             <? endif; ?>
-            <dd>&bull; <a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?lookfor=%22<?=urlencode($subj)?>%22&amp;type=Subject"><?=$this->escape($subj)?></a></dd>
+            <dd>&bull; <a href="<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($subj)?>%22&amp;type=Subject"><?=$this->escape($subj)?></a></dd>
           <? endforeach; ?>
           <? if ($j > 2): ?><dd><a href="#" onclick="lessFacets('WCIdents<?=$i?>'); return false;"><?=$this->transEsc('less')?> ...</a></dd><? endif; ?>
           </dl>
diff --git a/themes/vufind/blueprint/templates/Recommend/WorldCatTerms.phtml b/themes/vufind/blueprint/templates/Recommend/WorldCatTerms.phtml
index 392a5dddba6..061219c507f 100644
--- a/themes/vufind/blueprint/templates/Recommend/WorldCatTerms.phtml
+++ b/themes/vufind/blueprint/templates/Recommend/WorldCatTerms.phtml
@@ -11,7 +11,7 @@
               </dl>
               <dl class="offscreen" id="narrowGroupHidden_WCTerms<?=$this->escape($type)?>">
             <? endif; ?>
-            <dd>&bull; <a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?lookfor=%22<?=urlencode($subj)?>%22&amp;type=Subject"><?=$this->escape($subj)?></a></dd>
+            <dd>&bull; <a href="<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($subj)?>%22&amp;type=Subject"><?=$this->escape($subj)?></a></dd>
           <? endforeach; ?>
           <? if ($j > 3): ?><dd><a href="#" onclick="lessFacets('WCTerms<?=$this->escape($type)?>'); return false;"><?=$this->transEsc('less')?> ...</a></dd><? endif; ?>
         </dl>
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrAuth/result-list.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrAuth/result-list.phtml
index 51efdc5ab5c..604890fabdb 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrAuth/result-list.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrAuth/result-list.phtml
@@ -8,14 +8,14 @@
 ?>
 <div class="listentry span-15">
   <div class="resultItemLine1">
-    <a href="<?=$this->url(array('controller' => 'Authority', 'action' => 'Record'), 'default', true)?>?id=<?=urlencode($this->driver->getUniqueId())?>" class="title"><?=$this->escape($heading)?></a>
+    <a href="<?=$this->url('authority-record')?>?id=<?=urlencode($this->driver->getUniqueId())?>" class="title"><?=$this->escape($heading)?></a>
   </div>
 
   <div class="resultItemLine2">
     <? if (!empty($seeAlso)): ?>
       <?=$this->transEsc("See also")?>:<br/>
       <? foreach ($seeAlso as $current): ?>
-        <a href="<?=$this->url(array('controller' => 'Authority', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($current)?>%22&amp;type=MainHeading"><?=$this->escape($current)?></a><br/>
+        <a href="<?=$this->url('authority-search')?>?lookfor=%22<?=urlencode($current)?>%22&amp;type=MainHeading"><?=$this->escape($current)?></a><br/>
       <? endforeach; ?>
     <? endif; ?>
   </div>
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/core.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/core.phtml
index a150b0f4836..e9d7608e7d7 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/core.phtml
@@ -196,7 +196,7 @@
         </span>
         <div id="tagList">
           <? if (count($tagList) > 0): ?>
-            <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url(array('controller' => 'Tag', 'action' => 'Home'), 'default', true)?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a> (<?=$this->escape($tag->cnt)?>)<? endforeach; ?>
+            <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a> (<?=$this->escape($tag->cnt)?>)<? endforeach; ?>
           <? else: ?>
             <?=$this->transEsc('No Tags')?>, <?=$this->transEsc('Be the first to tag this record')?>!
           <? endif; ?>
@@ -215,7 +215,7 @@
       <img alt="<?=$this->transEsc('Cover Image')?>" class="recordcover" src="<?=$this->escape($mediumThumb);?>"/>
     <? if ($largeThumb): ?></a><? endif; ?>
   <? else: ?>
-    <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default')?>" class="recordcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
+    <img src="<?=$this->url('cover-unavailable')?>" class="recordcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
   <? endif; ?>
 
   <? /* Display the lists that this record is saved to */ ?>
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-author.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-author.phtml
index edd9a48f6b4..1ef515fe458 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-author.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Author'), 'default', true)?>?author=<?=urlencode($this->lookfor)?>
\ No newline at end of file
+<?=$this->url('author-home')?>?author=<?=urlencode($this->lookfor)?>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-journaltitle.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
index 8c4c1db7281..5987653afd9 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=JournalTitle
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=JournalTitle
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-series.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-series.phtml
index 038f3bb12a4..bf7507d0a50 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-series.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Series
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Series
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-subject.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-subject.phtml
index 260f6a167a6..07a34f729d9 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-subject.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-title.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-title.phtml
index 1876b775c90..eca8c06502d 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-title.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
index be4c7d14dc3..e8deeda18be 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -15,7 +15,7 @@
     <? if ($listThumb = $this->driver->getThumbnail()): ?>
       <img src="<?=$this->escape($listThumb)?>" class="summcover" alt="<?=$this->transEsc('Cover Image')?>"/>
     <? else: ?>
-      <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default', true)?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
+      <img src="<?=$this->url('cover-unavailable')?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
     <? endif; ?>
   </div>
   <div class="span-10">
@@ -38,7 +38,7 @@
     ?>
     <? if (count($listTags) > 0): ?>
       <strong><?=$this->transEsc('Your Tags')?>:</strong>
-      <? $i = 0; foreach ($listTags as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url(array('controller' => 'Tag', 'action' => 'Home'), 'default', true)?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a><? endforeach; ?>
+      <? $i = 0; foreach ($listTags as $tag): ?><?=($i++ == 0)?'':', '?><a href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a><? endforeach; ?>
       <br/>
     <? endif; ?>
     <? $listNotes = $this->driver->getListNotes($list_id, $user_id); ?>
@@ -53,7 +53,7 @@
     <? if (count($this->lists) > 0): ?>
         <strong><?=$this->transEsc('Saved in')?>:</strong>
         <? $i=0;foreach($this->lists as $current): ?>
-            <a href="<?=$this->url(array('id' => $current->id), 'userList', true)?>"><?=$current->title?></a><? if($i++ < count($this->lists)-1): ?>,<? endif; ?>
+            <a href="<?=$this->url('userList', array('id' => $current->id))?>"><?=$current->title?></a><? if($i++ < count($this->lists)-1): ?>,<? endif; ?>
         <? endforeach; ?>
         <br/>
     <? endif; ?>
@@ -65,11 +65,11 @@
      // and a user is logged in (which means we are viewing all of the user's favorites)
      if ((isset($list) && $list->editAllowed()) || (!isset($list) && $this->user)): ?>
     <div class="floatright">
-      <a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Edit'), 'default', true)?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&amp;list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a>
+      <a href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&amp;source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&amp;list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a>
       <? /* Use a different delete URL if we're removing from a specific list or the overall favorites: */ 
         $deleteUrl = is_null($list_id)
-            ? $this->url(array('controller' => 'MyResearch', 'action' => 'Favorites'), 'default', true)
-            : $this->url(array('id' => $list_id), 'userList');
+            ? $this->url('myresearch-favorites')
+            : $this->url('userList', array('id' => $list_id));
         $deleteUrl .= '?delete=' . urlencode($id) . '&amp;source=' . urlencode($source);
       ?>
       <a href="<?=$deleteUrl?>" title="<?=$this->transEsc('confirm_delete_brief')?>" class="delete tool source<?=$this->escape($source)?>"><?=$this->transEsc('Delete')?></a>
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
index eea58de85ab..fb48ca62a39 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
@@ -7,7 +7,7 @@
         <? elseif ($summThumb = $this->driver->getThumbnail()): ?>
           <img src="<?=$this->escape($summThumb)?>" class="gridImage" alt="<?=$this->transEsc('Cover Image')?>"/>
         <? else: ?>
-          <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default', true)?>" class="gridImage" alt="<?=$this->transEsc('No Cover Image')?>"/>
+          <img src="<?=$this->url('cover-unavailable')?>" class="gridImage" alt="<?=$this->transEsc('No Cover Image')?>"/>
         <? endif; ?>
       </a>
     </span>
diff --git a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
index 6f50993ac0e..d00ea27eaec 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -4,7 +4,7 @@
   <? if ($summThumb = $this->driver->getThumbnail()): ?>
     <img src="<?=$this->escape($summThumb)?>" class="summcover" alt="<?=$this->transEsc('Cover Image')?>"/>
   <? else: ?>
-    <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default', true)?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
+    <img src="<?=$this->url('cover-unavailable')?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
   <? endif; ?>
   </div>
   <div class="span-9">
diff --git a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-author.phtml b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-author.phtml
index 7b76c5e3c8b..5aebd76f472 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-author.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Author
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Author
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-journaltitle.phtml b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-journaltitle.phtml
index 53571ba8222..5536935b4f4 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-journaltitle.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-journaltitle.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationTitle
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationTitle
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-series.phtml b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-series.phtml
index 5b794f66b24..26a9524f15a 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-series.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationSeriesTitle
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationSeriesTitle
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-subject.phtml b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-subject.phtml
index a3afda46edd..cf66f99c101 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-subject.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-title.phtml b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-title.phtml
index 96b9e4aa0bd..57cdc24f2d6 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/Summon/link-title.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/Summon/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-author.phtml b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-author.phtml
index 0e7b4193fad..b4790f29557 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-author.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=<?=urlencode($this->lookfor)?>&amp;type=srw.au%3Asrw.pn%3Asrw.cn
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=<?=urlencode($this->lookfor)?>&amp;type=srw.au%3Asrw.pn%3Asrw.cn
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-series.phtml b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-series.phtml
index 8095d4954d2..d95ad084838 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-series.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.se
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.se
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-subject.phtml b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-subject.phtml
index c3212621d10..6b6bb5c9235 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-subject.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.su
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.su
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-title.phtml b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-title.phtml
index 705c080396f..03f8d524558 100644
--- a/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-title.phtml
+++ b/themes/vufind/blueprint/templates/RecordDriver/WorldCat/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.ti%3Asrw.se
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.ti%3Asrw.se
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/admin/config.phtml b/themes/vufind/blueprint/templates/admin/config.phtml
index 0bdb3778435..42711fb705c 100644
--- a/themes/vufind/blueprint/templates/admin/config.phtml
+++ b/themes/vufind/blueprint/templates/admin/config.phtml
@@ -13,9 +13,9 @@
   <p>Some basic settings can also be adjusted through the auto-configuration tool.</p>
   <? if (!$this->showInstallLink): ?>
     <p><?=$this->transEsc('Auto configuration is currently disabled') ?>.</p>
-    <p><a href="<?=$this->url(array('controller' => 'Admin', 'action' => 'EnableAutoConfig'), 'default', true)?>"><?=$this->transEsc('Enable Auto Config')?></a></p>
+    <p><a href="<?=$this->url('admin-enableautoconfig')?>"><?=$this->transEsc('Enable Auto Config')?></a></p>
   <? else: ?>
-    <p><a href="<?=$this->url(array('controller' => 'Install'), 'default', true)?>"><?=$this->transEsc('auto_configure_title')?></a></p>
+    <p><a href="<?=$this->url('install-home')?>"><?=$this->transEsc('auto_configure_title')?></a></p>
   <? endif; ?>
 </div>
 
diff --git a/themes/vufind/blueprint/templates/admin/maintenance.phtml b/themes/vufind/blueprint/templates/admin/maintenance.phtml
index e0ad1d8a158..2f37fcd5219 100644
--- a/themes/vufind/blueprint/templates/admin/maintenance.phtml
+++ b/themes/vufind/blueprint/templates/admin/maintenance.phtml
@@ -11,7 +11,7 @@
 
   <h2>Utilities</h2>
   <?=$this->flashmessages()?>
-  <form method="get" action="<?=$this->url(array('controller' => 'Admin', 'action' => 'DeleteExpiredSearches'), 'default', true)?>">
+  <form method="get" action="<?=$this->url('admin-deleteexpiredsearches')?>">
     <label for="del_daysOld" style="font-weight: normal;">Delete unsaved user search histories older than</label>
     <input id="del_daysOld" type="text" name="daysOld" size="5" value="2"/> days.
     <input type="submit" name="submit" value="<?=$this->transEsc('Submit')?>"/>
diff --git a/themes/vufind/blueprint/templates/admin/menu.phtml b/themes/vufind/blueprint/templates/admin/menu.phtml
index 4e6a496aa58..36dbc816f0f 100644
--- a/themes/vufind/blueprint/templates/admin/menu.phtml
+++ b/themes/vufind/blueprint/templates/admin/menu.phtml
@@ -1,6 +1,6 @@
 <ul id="list1">
-  <li<?=ucwords($this->action) == "Home" ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'Admin', 'action' => 'Home'), 'default', true)?>"><?=$this->transEsc('Home')?></a></li>
-  <li<?=ucwords($this->action) == "Statistics" ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'Admin', 'action' => 'Statistics'), 'default', true)?>"><?=$this->transEsc('Statistics')?></a></li>
-  <li<?=ucwords($this->action) == "Config" ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'Admin', 'action' => 'Config'), 'default', true)?>"><?=$this->transEsc('Configuration')?></a>
-  <li<?=ucwords($this->action) == "Maintenance" ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'Admin', 'action' => 'Maintenance'), 'default', true)?>"><?=$this->transEsc('System Maintenance')?></a></li>
+  <li<?=ucwords($this->action) == "Home" ? ' class="active"' : ''?>><a href="<?=$this->url('admin-home')?>"><?=$this->transEsc('Home')?></a></li>
+  <li<?=ucwords($this->action) == "Statistics" ? ' class="active"' : ''?>><a href="<?=$this->url('admin-statistics')?>"><?=$this->transEsc('Statistics')?></a></li>
+  <li<?=ucwords($this->action) == "Config" ? ' class="active"' : ''?>><a href="<?=$this->url('admin-config')?>"><?=$this->transEsc('Configuration')?></a>
+  <li<?=ucwords($this->action) == "Maintenance" ? ' class="active"' : ''?>><a href="<?=$this->url('admin-maintenance')?>"><?=$this->transEsc('System Maintenance')?></a></li>
 </ul>
diff --git a/themes/vufind/blueprint/templates/ajax/result-google-map-info.phtml b/themes/vufind/blueprint/templates/ajax/result-google-map-info.phtml
index cda7213f476..bd210a341f1 100644
--- a/themes/vufind/blueprint/templates/ajax/result-google-map-info.phtml
+++ b/themes/vufind/blueprint/templates/ajax/result-google-map-info.phtml
@@ -11,7 +11,7 @@
 
         <div class="mapInfoResultText">
         <a href="<?=$this->recordLink()->getUrl($record)?>"><?=$record->getTitle() ?></a><br/>
-        <?=$this->translate('by') ?> <a href="<?=$this->url(array('controller' => 'Author', 'action' => 'Home'), 'default', true)?>?author=<?=urlencode($record->getPrimaryAuthor())?>"><?=$this->escape($record->getPrimaryAuthor())?></a>
+        <?=$this->translate('by') ?> <a href="<?=$this->url('author-home')?>?author=<?=urlencode($record->getPrimaryAuthor())?>"><?=$this->escape($record->getPrimaryAuthor())?></a>
         </div>
 
       </div>
@@ -21,7 +21,7 @@
   </div>
   <? if ($this->recordCount > 5): ?>
     <div class="mapSeeAllDiv">
-      <a href="<?=$this->url(array('controller'=>'Search', 'action'=>'Results'), 'default', true) ?><?=$this->results->getUrl()->getParams() ?>"><?=$this->translate('see all') ?> <?=$this->escape($this->recordCount) ?>...</a>
+      <a href="<?=$this->url('search-results') ?><?=$this->results->getUrl()->getParams() ?>"><?=$this->translate('see all') ?> <?=$this->escape($this->recordCount) ?>...</a>
     </div>
   <? endif; ?>
 </div>
diff --git a/themes/vufind/blueprint/templates/ajax/status-full.phtml b/themes/vufind/blueprint/templates/ajax/status-full.phtml
index 8b7dadbdc33..53da56da61d 100644
--- a/themes/vufind/blueprint/templates/ajax/status-full.phtml
+++ b/themes/vufind/blueprint/templates/ajax/status-full.phtml
@@ -24,5 +24,5 @@
 </tbody>
 </table>
 <? if (count($this->statusItems) > 5): ?>
-  <a class="summHoldings" href="<?=$this->url(array('id' => $this->statusItems[0]['id']), 'record', true)?>"><?=count($this->statusItems) - 5?> <?=$this->transEsc('more')?> ...</a>
+  <a class="summHoldings" href="<?=$this->url('record', array('id' => $this->statusItems[0]['id']))?>"><?=count($this->statusItems) - 5?> <?=$this->transEsc('more')?> ...</a>
 <? endif; ?>
diff --git a/themes/vufind/blueprint/templates/alphabrowse/home.phtml b/themes/vufind/blueprint/templates/alphabrowse/home.phtml
index 55f770eedd5..fde8933e199 100644
--- a/themes/vufind/blueprint/templates/alphabrowse/home.phtml
+++ b/themes/vufind/blueprint/templates/alphabrowse/home.phtml
@@ -1,19 +1,17 @@
 <?
   $this->headTitle($this->translate('Browse the Collection Alphabetically'));
-  $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'AlphaBrowse', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Browse Alphabetically') . '</a>';
+  $this->layout()->breadcrumbs = '<a href="' . $this->url('alphabrowse-home') . '">' . $this->transEsc('Browse Alphabetically') . '</a>';
 ?>
 
 <? /* LOAD THE LINK INFORMATION INTO $pageLinks, similar to smarty's {capture} */ ?>
 <? ob_start(); ?>
   <div class="alphaBrowsePageLinks">
     <? if (isset($this->prevpage)): ?>
-      <div class="alphaBrowsePrevLink"><a href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->prevpage)?>">&laquo; <?=$this->transEsc('Prev')?></a></div>
+      <div class="alphaBrowsePrevLink"><a href="<?=$this->url('alphabrowse-home')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->prevpage)?>">&laquo; <?=$this->transEsc('Prev')?></a></div>
     <? endif; ?>
 
     <? if (isset($this->nextpage)): ?>
-      <div class="alphaBrowseNextLink"><a href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->nextpage)?>"><?=$this->transEsc('Next')?> &raquo;</a></div>
+      <div class="alphaBrowseNextLink"><a href="<?=$this->url('alphabrowse-home')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->nextpage)?>"><?=$this->transEsc('Next')?> &raquo;</a></div>
     <? endif; ?>
     <div class="clear"></div>
   </div>
@@ -22,7 +20,7 @@
 
 <div class="<?=$this->layoutClass('mainbody')?>">
   <div class="resulthead">
-    <form method="get" action="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>" name="alphaBrowseForm" id="alphaBrowseForm">
+    <form method="get" action="<?=$this->url('alphabrowse-home')?>" name="alphaBrowseForm" id="alphaBrowseForm">
       <label for="alphaBrowseForm_source"><?=$this->transEsc('Browse Alphabetically') ?></label>
       <select id="alphaBrowseForm_source" name="source">
         <? foreach ($this->alphaBrowseTypes as $key => $item): ?>
@@ -49,9 +47,9 @@
               doing searches for headings, but headings give shorter
               queries and don't look as strange. */?>
             <? if ($item['count'] < 5): ?>
-              <?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?type=ids&amp;lookfor=<? foreach ($item['ids'] as $id): ?><?=$id ?>+<? endforeach; ?>
+              <?=$this->url('search-results')?>?type=ids&amp;lookfor=<? foreach ($item['ids'] as $id): ?><?=$id ?>+<? endforeach; ?>
             <? else: ?>
-              <?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?type=<?=urlencode(ucwords($this->source)) ?>Browse&amp;lookfor=<?=urlencode($item['heading'])?>
+              <?=$this->url('search-results')?>?type=<?=urlencode(ucwords($this->source)) ?>Browse&amp;lookfor=<?=urlencode($item['heading'])?>
             <? endif; ?>
           <? $searchLink = ob_get_contents(); ?>
           <? ob_end_clean(); ?>
@@ -68,7 +66,7 @@
           <div class="title"><?=$this->transEsc('Use instead') ?>:</div>
           <ul>
             <? foreach ($item['useInstead'] as $heading): ?>
-            <li><a href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>/Results?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($heading)?>"><?=$this->escape($heading)?></a></li>
+            <li><a href="<?=$this->url('alphabrowse-results')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($heading)?>"><?=$this->escape($heading)?></a></li>
             <? endforeach; ?>
           </ul>
           </div>
@@ -79,7 +77,7 @@
           <div class="title"><?=$this->transEsc('See also') ?>:</div>
           <ul>
             <? foreach ($item['seeAlso'] as $heading): ?>
-            <li><a href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>/Results?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($heading)?>"><?=$this->escape($heading)?></a></li>
+            <li><a href="<?=$this->url('alphabrowse-results')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($heading)?>"><?=$this->escape($heading)?></a></li>
             <? endforeach; ?>
           </ul>
           </div>
diff --git a/themes/vufind/blueprint/templates/author/home.phtml b/themes/vufind/blueprint/templates/author/home.phtml
index 2402e4425d0..dbb7091b327 100644
--- a/themes/vufind/blueprint/templates/author/home.phtml
+++ b/themes/vufind/blueprint/templates/author/home.phtml
@@ -5,7 +5,7 @@
     // Set up breadcrumbs:
     $this->layout()->breadcrumbs = '<em>' . $this->transEsc('Author') . '</em>';
 ?>
-<form method="get" action="<?=$this->url(array('controller' => 'Author', 'action' => 'Search'), 'default', true)?>">
+<form method="get" action="<?=$this->url('author-search')?>">
   <label for="author_lookfor"><?=$this->transEsc('Author Results for')?>:</label>
   <input type="text" id="author_lookfor" name="lookfor" />
   <input type="submit" value="<?=$this->transEsc('Find')?>" />
diff --git a/themes/vufind/blueprint/templates/browse/home.phtml b/themes/vufind/blueprint/templates/browse/home.phtml
index 22d58be528b..137e1e83ce5 100644
--- a/themes/vufind/blueprint/templates/browse/home.phtml
+++ b/themes/vufind/blueprint/templates/browse/home.phtml
@@ -1,13 +1,9 @@
 <?
     $this->headTitle($this->translate('Browse the Catalog'));
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'Browse', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Browse') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('browse-home') . '">' . $this->transEsc('Browse') . '</a>';
 
-    $BROWSE_BASE = $this->url(array('controller' => 'Browse', 'action' => $this->currentAction), 'default', true);
-    $SEARCH_BASE = ($this->currentAction == 'Tag')
-        ? $this->url(array('controller' => 'Tag', 'action' => 'Home'), 'default', true)
-        : $this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true);
+    $BROWSE_BASE = $this->url('browse-' . strtolower($this->currentAction));
+    $SEARCH_BASE = $this->url($this->currentAction == 'Tag' ? 'tag-home' : 'search-results');
 ?>
 
 <? if (!isset($this->currentAction)): ?>
diff --git a/themes/vufind/blueprint/templates/browse/top_list.phtml b/themes/vufind/blueprint/templates/browse/top_list.phtml
index 6ba8e1471e0..fb93d382834 100644
--- a/themes/vufind/blueprint/templates/browse/top_list.phtml
+++ b/themes/vufind/blueprint/templates/browse/top_list.phtml
@@ -1,7 +1,7 @@
 <ul class="browse" id="list1">
 <? foreach ($this->browseOptions as $item=>$currentOption): ?>
   <li<? if($currentOption['action'] == $this->currentAction): ?> class="active"<? endif; ?>>
-    <a href="<?=$this->url(array('controller' => 'Browse', 'action' => $currentOption['action']), 'default', true); ?>"><?=$this->transEsc($currentOption['description']) ?></a>
+    <a href="<?=$this->url('browse-' . strtolower($currentOption['action'])); ?>"><?=$this->transEsc($currentOption['description']) ?></a>
   </li>
 <? endforeach; ?>
 </ul>
diff --git a/themes/vufind/blueprint/templates/cart/cart.phtml b/themes/vufind/blueprint/templates/cart/cart.phtml
index 0947ea12740..d0740a2ca37 100644
--- a/themes/vufind/blueprint/templates/cart/cart.phtml
+++ b/themes/vufind/blueprint/templates/cart/cart.phtml
@@ -10,7 +10,7 @@
     $this->cart = VF_Cart::getInstance();
 ?>
 <?=$this->flashmessages()?>
-<form action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Home'), 'default', true)?>" method="post"  name="cartForm">
+<form action="<?=$this->url('cart-home')?>" method="post"  name="cartForm">
   <? if (!$this->cart->isEmpty()): ?>
     <div class="bulkActionButtons">
       <input type="checkbox" class="selectAllCheckboxes floatleft" name="selectAll" id="cartCheckboxSelectAll"/> <label for="cartCheckboxSelectAll" class="floatleft"><?=$this->transEsc('select_page')?></label>
diff --git a/themes/vufind/blueprint/templates/cart/email.phtml b/themes/vufind/blueprint/templates/cart/email.phtml
index 18b7c887d99..556155fc419 100644
--- a/themes/vufind/blueprint/templates/cart/email.phtml
+++ b/themes/vufind/blueprint/templates/cart/email.phtml
@@ -7,7 +7,7 @@
         '<em>' . $this->transEsc('email_selected_favorites') . '</em>';
 ?>
 <?=$this->flashmessages()?>
-<form action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Email'), 'default', true)?>" method="post"  name="bulkEmail">
+<form action="<?=$this->url('cart-email')?>" method="post"  name="bulkEmail">
     <? foreach ($this->records as $current): ?>
       <strong><?=$this->transEsc('Title')?>:</strong> <?=$this->escape($current->getBreadcrumb())?><br />
       <input type="hidden" name="ids[]" value="<?=$this->escape($current->getResourceSource() . '|' . $current->getUniqueId())?>" />
diff --git a/themes/vufind/blueprint/templates/cart/export.phtml b/themes/vufind/blueprint/templates/cart/export.phtml
index 85eb4820e24..969816609d3 100644
--- a/themes/vufind/blueprint/templates/cart/export.phtml
+++ b/themes/vufind/blueprint/templates/cart/export.phtml
@@ -11,7 +11,7 @@
 <?=$this->flashmessages()?>
 
 <? if (!empty($this->exportOptions)): ?>
-  <form method="post" action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Export'), 'default', true)?>" name="exportForm" title="<?=$this->transEsc('Export Items')?>">
+  <form method="post" action="<?=$this->url('cart-export')?>" name="exportForm" title="<?=$this->transEsc('Export Items')?>">
     <? foreach ($this->records as $current): ?>
       <strong><?=$this->transEsc('Title')?>:</strong> <?=$this->escape($current->getBreadcrumb())?><br />
       <input type="hidden" name="ids[]" value="<?=$this->escape($current->getResourceSource() . '|' . $current->getUniqueId())?>" />
diff --git a/themes/vufind/blueprint/templates/cart/save.phtml b/themes/vufind/blueprint/templates/cart/save.phtml
index e9a48448847..1287060a9de 100644
--- a/themes/vufind/blueprint/templates/cart/save.phtml
+++ b/themes/vufind/blueprint/templates/cart/save.phtml
@@ -10,7 +10,7 @@
 
 <?=$this->flashmessages()?>
 
-<form method="post" action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Save'), 'default', true)?>" name="bulkSave">
+<form method="post" action="<?=$this->url('cart-save')?>" name="bulkSave">
   <? $idParams = array(); ?>
   <? foreach ($this->records as $current): ?>
     <? $idParams[] = urlencode('ids[]') . '=' . urlencode($current->getResourceSource() . '|' . $current->getUniqueId()) ?>
@@ -29,7 +29,7 @@
     <? endif; ?>
   </select>
 
-  <a href="<?=$this->url(array('id' => 'NEW'), 'editList', true) . '?' . implode('&', $idParams) ?>" class="listEdit" id="listEdit" title="<?=$this->transEsc('Create a List') ?>"><?=$this->transEsc('or create a new list');?></a>
+  <a href="<?=$this->url('editList', array('id' => 'NEW')) . '?' . implode('&', $idParams) ?>" class="listEdit" id="listEdit" title="<?=$this->transEsc('Create a List') ?>"><?=$this->transEsc('or create a new list');?></a>
 
   <label class="displayBlock" for="add_mytags"><?=$this->transEsc('Add Tags') ?></label>
   <input class="mainFocus" id="add_mytags" type="text" name="mytags" value="" size="50"/>
diff --git a/themes/vufind/blueprint/templates/error/index.phtml b/themes/vufind/blueprint/templates/error/index.phtml
index df89e483dd5..8efce0886a4 100644
--- a/themes/vufind/blueprint/templates/error/index.phtml
+++ b/themes/vufind/blueprint/templates/error/index.phtml
@@ -14,9 +14,9 @@
 </div>
 
 <? if ($this->showInstallLink): ?>
-  <h3><a href="<?=$this->url(array('controller' => 'Install'), 'default', true)?>"><?=$this->transEsc('auto_configure_title', array(), 'Auto Configure')?></a></h3>
+  <h3><a href="<?=$this->url('install-home')?>"><?=$this->transEsc('auto_configure_title', array(), 'Auto Configure')?></a></h3>
   <?=$this->transEsc('auto_configure_description', array(), 'If this is a new installation, you may be able to fix the error using VuFind\'s Auto Configure tool.')?>
-  <h3><a href="<?=$this->url(array('controller' => 'Upgrade'), 'default', true)?>"><?=$this->transEsc('Upgrade VuFind')?></a></h3>
+  <h3><a href="<?=$this->url('upgrade-home')?>"><?=$this->transEsc('Upgrade VuFind')?></a></h3>
   <?=$this->transEsc('upgrade_description', array(), 'If you are upgrading a previous VuFind version, you can load your old settings with this tool.')?>
 <? endif; ?>
 
diff --git a/themes/vufind/blueprint/templates/footer.phtml b/themes/vufind/blueprint/templates/footer.phtml
index 8216416bdc9..cac6c1aa40c 100644
--- a/themes/vufind/blueprint/templates/footer.phtml
+++ b/themes/vufind/blueprint/templates/footer.phtml
@@ -1,20 +1,20 @@
 <div class="span-5"><p><strong><?=$this->transEsc('Search Options')?></strong></p>
   <ul>
-    <li><a href="<?=$this->url(array('controller' => 'Search', 'action' => 'History'), 'default', true)?>"><?=$this->transEsc('Search History')?></a></li>
-    <li><a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Advanced'), 'default', true)?>"><?=$this->transEsc('Advanced Search')?></a></li>
+    <li><a href="<?=$this->url('search-history')?>"><?=$this->transEsc('Search History')?></a></li>
+    <li><a href="<?=$this->url('search-advanced')?>"><?=$this->transEsc('Advanced Search')?></a></li>
   </ul>
 </div>
 <div class="span-5"><p><strong><?=$this->transEsc('Find More')?></strong></p>
   <ul>
-    <li><a href="<?=$this->url(array('controller' => 'Browse'), 'default', true)?>"><?=$this->transEsc('Browse the Catalog')?></a></li>
-    <li><a href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>"><?=$this->transEsc('Browse Alphabetically')?></a></li>
-    <li><a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Reserves'), 'default', true)?>"><?=$this->transEsc('Course Reserves')?></a></li>
-    <li><a href="<?=$this->url(array('controller' => 'Search', 'action' => 'NewItem'), 'default', true)?>"><?=$this->transEsc('New Items')?></a></li>
+    <li><a href="<?=$this->url('browse-home')?>"><?=$this->transEsc('Browse the Catalog')?></a></li>
+    <li><a href="<?=$this->url('alphabrowse-home')?>"><?=$this->transEsc('Browse Alphabetically')?></a></li>
+    <li><a href="<?=$this->url('search-reserves')?>"><?=$this->transEsc('Course Reserves')?></a></li>
+    <li><a href="<?=$this->url('search-newitem')?>"><?=$this->transEsc('New Items')?></a></li>
   </ul>
 </div>
 <div class="span-5 last"><p><strong><?=$this->transEsc('Need Help?')?></strong></p>
   <ul>
-    <li><a href="<?=$this->url(array('controller' => 'Help'), 'default', true)?>?topic=search" class="searchHelp"><?=$this->transEsc('Search Tips')?></a></li>
+    <li><a href="<?=$this->url('help-home')?>?topic=search" class="searchHelp"><?=$this->transEsc('Search Tips')?></a></li>
     <li><a href="#"><?=$this->transEsc('Ask a Librarian')?></a></li>
     <li><a href="#"><?=$this->transEsc('FAQs')?></a></li>
   </ul>
diff --git a/themes/vufind/blueprint/templates/header.phtml b/themes/vufind/blueprint/templates/header.phtml
index d3f2023f60a..5290efe75a1 100644
--- a/themes/vufind/blueprint/templates/header.phtml
+++ b/themes/vufind/blueprint/templates/header.phtml
@@ -2,20 +2,20 @@
 <div id="headerRight">
   <? $cart = \VuFind\Cart::getInstance(); if ($cart->isActive()): ?>
     <div id="cartSummary" class="cartSummary">
-      <a id="cartItems" title="<?=$this->transEsc('View Book Bag')?>" class="bookbag" href="<?=$this->url(array('controller' => 'Cart', 'action' => 'Home'), 'default', true)?>"><strong><span><?=count($cart->getItems())?></span></strong> <?=$this->transEsc('items')?> <?=$cart->isFull() ? '(' .  $this->transEsc('bookbag_full') . ')' : ''?></a>
-      <a id="viewCart" title="<?=$this->transEsc('View Book Bag')?>" class="viewCart bookbag offscreen" href="<?=$this->url(array('controller' => 'Cart', 'action' => 'Home'), 'default', true)?>"><strong><span id="cartSize"><?=count($cart->getItems())?></span></strong> <?=$this->transEsc('items')?><span id="cartStatus"><?=$cart->isFull() ? $this->transEsc('bookbag_full') : '&nbsp;'?></span></a>
+      <a id="cartItems" title="<?=$this->transEsc('View Book Bag')?>" class="bookbag" href="<?=$this->url('cart-home')?>"><strong><span><?=count($cart->getItems())?></span></strong> <?=$this->transEsc('items')?> <?=$cart->isFull() ? '(' .  $this->transEsc('bookbag_full') . ')' : ''?></a>
+      <a id="viewCart" title="<?=$this->transEsc('View Book Bag')?>" class="viewCart bookbag offscreen" href="<?=$this->url('cart-home')?>"><strong><span id="cartSize"><?=count($cart->getItems())?></span></strong> <?=$this->transEsc('items')?><span id="cartStatus"><?=$cart->isFull() ? $this->transEsc('bookbag_full') : '&nbsp;'?></span></a>
     </div>
   <? endif; ?>
   <? if (is_object($this->account) && $this->account->loginEnabled()): // hide login/logout if unavailable ?>
     <div id="logoutOptions"<?=!$this->account->isLoggedIn() ? ' class="hide"' : ''?>>
-      <a class="account" href="<?=$this->url(array('controller' => 'MyResearch'), 'default', true)?>"><?=$this->transEsc("Your Account")?></a> |
-      <a class="logout" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Logout'), 'default', true)?>"><?=$this->transEsc("Log Out")?></a>
+      <a class="account" href="<?=$this->url('myresearch-home')?>"><?=$this->transEsc("Your Account")?></a> |
+      <a class="logout" href="<?=$this->url('myresearch-logout')?>"><?=$this->transEsc("Log Out")?></a>
     </div>
     <div id="loginOptions"<?=$this->account->isLoggedIn() ? ' class="hide"' : ''?>>
     <? if ($sessionInitiator = $this->account->getSessionInitiator()): ?>
       <a class="login" href="<?=$this->escape($sessionInitiator)?>"><?=$this->transEsc("Institutional Login")?></a>
     <? else: ?>
-      <a class="login" href="<?=$this->url(array('controller' => 'MyResearch'), 'default', true)?>"><?=$this->transEsc("Login")?></a>
+      <a class="login" href="<?=$this->url('myresearch-home')?>"><?=$this->transEsc("Login")?></a>
     <? endif; ?>
     </div>
   <? endif; ?>
diff --git a/themes/vufind/blueprint/templates/install/disabled.phtml b/themes/vufind/blueprint/templates/install/disabled.phtml
index 1e1e781cb97..fdca7913709 100644
--- a/themes/vufind/blueprint/templates/install/disabled.phtml
+++ b/themes/vufind/blueprint/templates/install/disabled.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/done.phtml b/themes/vufind/blueprint/templates/install/done.phtml
index ab9944f2f4b..dd220c1310b 100644
--- a/themes/vufind/blueprint/templates/install/done.phtml
+++ b/themes/vufind/blueprint/templates/install/done.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixbasicconfig.phtml b/themes/vufind/blueprint/templates/install/fixbasicconfig.phtml
index 6024ba03dea..0b3a2419493 100644
--- a/themes/vufind/blueprint/templates/install/fixbasicconfig.phtml
+++ b/themes/vufind/blueprint/templates/install/fixbasicconfig.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixcache.phtml b/themes/vufind/blueprint/templates/install/fixcache.phtml
index 72ae7c15b79..7c03f447e2b 100644
--- a/themes/vufind/blueprint/templates/install/fixcache.phtml
+++ b/themes/vufind/blueprint/templates/install/fixcache.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixdatabase.phtml b/themes/vufind/blueprint/templates/install/fixdatabase.phtml
index 5bec1777b32..c5a684e4f64 100644
--- a/themes/vufind/blueprint/templates/install/fixdatabase.phtml
+++ b/themes/vufind/blueprint/templates/install/fixdatabase.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixdependencies.phtml b/themes/vufind/blueprint/templates/install/fixdependencies.phtml
index 36b8d68bdb3..1fc58c93f81 100644
--- a/themes/vufind/blueprint/templates/install/fixdependencies.phtml
+++ b/themes/vufind/blueprint/templates/install/fixdependencies.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixils.phtml b/themes/vufind/blueprint/templates/install/fixils.phtml
index f83f4f66638..d0d8a0cf77f 100644
--- a/themes/vufind/blueprint/templates/install/fixils.phtml
+++ b/themes/vufind/blueprint/templates/install/fixils.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/fixsolr.phtml b/themes/vufind/blueprint/templates/install/fixsolr.phtml
index cac6cef700b..600c464223a 100644
--- a/themes/vufind/blueprint/templates/install/fixsolr.phtml
+++ b/themes/vufind/blueprint/templates/install/fixsolr.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('auto_configure_title'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' . $this->url(array('action' => 'Home')) .'">' . $this->transEsc('auto_configure_title') . '</a>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('install-home') .'">' . $this->transEsc('auto_configure_title') . '</a>';
 ?>
 <h1><?=$this->transEsc('auto_configure_title')?></h1>
 
diff --git a/themes/vufind/blueprint/templates/install/home.phtml b/themes/vufind/blueprint/templates/install/home.phtml
index 90f01cc208f..6d4829f0607 100644
--- a/themes/vufind/blueprint/templates/install/home.phtml
+++ b/themes/vufind/blueprint/templates/install/home.phtml
@@ -9,10 +9,10 @@
 <ul>
   <? $errors = 0; foreach ($this->checks as $check): ?>
     <? if (!$check['status']) $errors++; ?>
-    <li><?=$this->escape($check['title'])?>... <?=$check['status'] ? '<span style="color:green">' . $this->transEsc('test_ok') . '</span>' : '<span style="color:red">' . $this->transesc('test_fail') . '</span> <a href="' . $this->url(array('action' => $check['fix'])) . '">' . $this->transEsc('test_fix') . '</a>' ?></li>
+    <li><?=$this->escape($check['title'])?>... <?=$check['status'] ? '<span style="color:green">' . $this->transEsc('test_ok') . '</span>' : '<span style="color:red">' . $this->transesc('test_fail') . '</span> <a href="' . $this->url('install-' . strtolower($check['fix'])) . '">' . $this->transEsc('test_fix') . '</a>' ?></li>
   <? endforeach; ?>
 </ul>
 
 <? if ($errors == 0): ?>
-  <p>No problems were found.  You may wish to <a href="<?=$this->url(array('action' => 'Done'))?>">Disable Auto Configuration</a> at this time.</p>
+  <p>No problems were found.  You may wish to <a href="<?=$this->url('install-done')?>">Disable Auto Configuration</a> at this time.</p>
 <? endif; ?>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/layout/layout.phtml b/themes/vufind/blueprint/templates/layout/layout.phtml
index c9c28664620..102734aa913 100644
--- a/themes/vufind/blueprint/templates/layout/layout.phtml
+++ b/themes/vufind/blueprint/templates/layout/layout.phtml
@@ -9,9 +9,7 @@
         // Set up OpenSearch link:
         $this->headLink(
             array(
-                'href' => $this->url(
-                    'default', array('controller' => 'Search', 'action' => 'OpenSearch')
-                ) . '?method=describe',
+                'href' => $this->url('search-opensearch') . '?method=describe',
                 'type' => 'application/opensearchdescription+xml',
                 'title' => $this->transEsc('Library Catalog Search'),
                 'rel' => 'search'
diff --git a/themes/vufind/blueprint/templates/myresearch/account.phtml b/themes/vufind/blueprint/templates/myresearch/account.phtml
index 2c7086a841f..f817d1cee1e 100644
--- a/themes/vufind/blueprint/templates/myresearch/account.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/account.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('User Account'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Account') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Account') . '</em>';
 ?>
 <h2><?=$this->transEsc('User Account')?></h2>
 <?=$this->flashmessages()?>
diff --git a/themes/vufind/blueprint/templates/myresearch/cataloglogin.phtml b/themes/vufind/blueprint/templates/myresearch/cataloglogin.phtml
index d31c3f84b02..72574b04a12 100644
--- a/themes/vufind/blueprint/templates/myresearch/cataloglogin.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/cataloglogin.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('Login'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Login') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Login') . '</em>';
 
     // Convenience variable:
     $offlineMode = VF_Connection_Manager::connectToCatalog()->getOfflineMode();
diff --git a/themes/vufind/blueprint/templates/myresearch/checkedout.phtml b/themes/vufind/blueprint/templates/myresearch/checkedout.phtml
index 9eec86c8ad8..1797933a04f 100644
--- a/themes/vufind/blueprint/templates/myresearch/checkedout.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/checkedout.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('Checked Out Items'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Checked Out') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Checked Out') . '</em>';
 ?>
 <div class="<?=$this->layoutClass('mainbody')?>">
   <h3><?=$this->transEsc('Your Checked Out Items')?></h3>
@@ -41,7 +40,7 @@
             <? if ($summThumb = $resource->getThumbnail()): ?>
               <img src="<?=$this->escape($summThumb)?>" class="summcover" alt="<?=$this->transEsc('Cover Image')?>"/>
             <? else: ?>
-              <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default', true)?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
+              <img src="<?=$this->url('cover-unavailable')?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
             <? endif; ?>
           </div>
           <div class="span-10">
diff --git a/themes/vufind/blueprint/templates/myresearch/delete.phtml b/themes/vufind/blueprint/templates/myresearch/delete.phtml
index d9cb2a3804d..ab7c506f3cd 100644
--- a/themes/vufind/blueprint/templates/myresearch/delete.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/delete.phtml
@@ -1,4 +1,4 @@
-<form action="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Delete'), 'default', true)?>" method="post" name="bulkDelete">
+<form action="<?=$this->url('myresearch-delete')?>" method="post" name="bulkDelete">
   <div id="popupMessages"><?=$this->flashmessages()?></div>
   <div id="popupDetails">
     <? if (!$this->list): ?>
diff --git a/themes/vufind/blueprint/templates/myresearch/edit.phtml b/themes/vufind/blueprint/templates/myresearch/edit.phtml
index 0a010db371d..c8479da415b 100644
--- a/themes/vufind/blueprint/templates/myresearch/edit.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/edit.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('Edit') . ' : ' . $this->driver->getBreadcrumb());
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Edit') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Edit') . '</em>';
 
     // Load Javascript dependencies into header:
     $this->headScript()->appendFile("bulk_actions.js");
@@ -26,7 +25,7 @@
   <? else: ?>
     <? foreach ($this->savedData as $i=>$current): ?>
       <strong><?=$this->transEsc('List') ?>: <?=$this->escape($current['listTitle'])?></strong>
-      <a href="<?=$this->url(array('id' => $current['listId']), 'userList') ?>?delete=<?=urlencode($this->driver->getUniqueId())?>&amp;source=<?=urlencode($this->driver->getResourceSource())?>" id="<?=$this->escape($this->driver->getUniqueId())?>delete<?=$current['listId'] ?>" title="<?=$this->transEsc('confirm_delete')?>" class="holdCancel delete tool"></a>
+      <a href="<?=$this->url('userList', array('id' => $current['listId'])) ?>?delete=<?=urlencode($this->driver->getUniqueId())?>&amp;source=<?=urlencode($this->driver->getResourceSource())?>" id="<?=$this->escape($this->driver->getUniqueId())?>delete<?=$current['listId'] ?>" title="<?=$this->transEsc('confirm_delete')?>" class="holdCancel delete tool"></a>
       <input type="hidden" name="lists[]" value="<?=$current['listId'] ?>"/>
       <label class="displayBlock" for="edit_tags<?=$current['listId'] ?>"><?=$this->transEsc('Tags') ?>:</label>
       <input id="edit_tags<?=$current['listId'] ?>" type="text" name="tags<?=$current['listId'] ?>" value="<?=$this->escape($current['tags'])?>" size="50"/>
diff --git a/themes/vufind/blueprint/templates/myresearch/editlist.phtml b/themes/vufind/blueprint/templates/myresearch/editlist.phtml
index 58e8d064be5..8fc9290f6ae 100644
--- a/themes/vufind/blueprint/templates/myresearch/editlist.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/editlist.phtml
@@ -4,10 +4,9 @@
     $this->headTitle($this->translate($pageTitle));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc($pageTitle) . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc($pageTitle) . '</em>';
 ?>
 <h1><?=$this->transEsc($pageTitle); ?></h1>
 
diff --git a/themes/vufind/blueprint/templates/myresearch/email.phtml b/themes/vufind/blueprint/templates/myresearch/email.phtml
index d0d7fc0890c..ff376e14d35 100644
--- a/themes/vufind/blueprint/templates/myresearch/email.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/email.phtml
@@ -1,4 +1,4 @@
-<form action="<?=$this->url() ?>/MyResearch/Email" method="post" name="bulkEmail">
+<form action="<?=$this->url('myresearch-email')?>" method="post" name="bulkEmail">
   <? if ($errorMsg): ?><div class="error"><?=$this->translate($errorMsg) ?></div><? endif; ?>
   <? if ($infoMsg): ?><div class="info"><?=$this->translate($infoMsg) ?></div><? endif; ?>
 
diff --git a/themes/vufind/blueprint/templates/myresearch/export.phtml b/themes/vufind/blueprint/templates/myresearch/export.phtml
index 572da4ea945..6dbbd082a4d 100644
--- a/themes/vufind/blueprint/templates/myresearch/export.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/export.phtml
@@ -1,4 +1,4 @@
-<form action="<?=$this->url() ?>/MyResearch/Export" method="post" name="bulkExport">
+<form action="<?=$this->url('myresearch-export')?>" method="post" name="bulkExport">
   <? if ($errorMsg): ?><div class="error"><?=$this->translate($errorMsg) ?></div><? endif; ?>
   <? if ($infoMsg): ?><div class="info"><?=$this->translate($infoMsg) ?></div><? endif; ?>
 
diff --git a/themes/vufind/blueprint/templates/myresearch/fines.phtml b/themes/vufind/blueprint/templates/myresearch/fines.phtml
index 88e616d13c9..16cc819765a 100644
--- a/themes/vufind/blueprint/templates/myresearch/fines.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/fines.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('My Fines'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Fines') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Fines') . '</em>';
 ?>
 <div class="<?=$this->layoutClass('mainbody')?>">
   <? if (empty($this->fines)): ?>
@@ -30,7 +29,7 @@
           <? elseif (!isset($record['id'])): ?>
             <?=$this->escape(trim($record['title'], '/:'))?>
           <? else: ?>
-            <a href="<?=$this->url(array('id' => $record['id']), 'record', true)?>"><?=$this->escape(trim($record['title'], '/:'))?></a>
+            <a href="<?=$this->url('record', array('id' => $record['id']))?>"><?=$this->escape(trim($record['title'], '/:'))?></a>
           <? endif; ?>
         </td>
         <td><?=isset($record['checkout']) ? $this->escape($record['checkout']) : ''?></td>
diff --git a/themes/vufind/blueprint/templates/myresearch/holds.phtml b/themes/vufind/blueprint/templates/myresearch/holds.phtml
index e84c768849c..86e234177c1 100644
--- a/themes/vufind/blueprint/templates/myresearch/holds.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/holds.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('My Holds'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('My Holds') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('My Holds') . '</em>';
 ?>
 <div class="<?=$this->layoutClass('mainbody')?>">
   <h3><?=$this->translate('Your Holds and Recalls') ?></h3>
@@ -42,7 +41,7 @@
             <? if ($summThumb = $resource->getThumbnail()): ?>
               <img src="<?=$this->escape($summThumb)?>" class="summcover" alt="<?=$this->transEsc('Cover Image')?>"/>
             <? else: ?>
-              <img src="<?=$this->url(array('controller' => 'Cover', 'action' => 'Unavailable'), 'default', true)?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
+              <img src="<?=$this->url('cover-unavailable')?>" class="summcover" alt="<?=$this->transEsc('No Cover Image')?>"/>
             <? endif; ?>
           </div>
           <div class="span-10">
diff --git a/themes/vufind/blueprint/templates/myresearch/login.phtml b/themes/vufind/blueprint/templates/myresearch/login.phtml
index 86ef6740e20..c841ece95d3 100644
--- a/themes/vufind/blueprint/templates/myresearch/login.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/login.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('Login'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Login') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Login') . '</em>';
 
     // If we're in AJAX mode, load some extra Javascript inline:
     if ($this->layout()->getLayout() == 'lightbox') {
@@ -35,7 +34,7 @@
   <div class="error"><?=$this->transEsc('login_disabled')?></div>
 <? else: ?>
   <? if (!$this->account->getSessionInitiator()): // display default login form if no login URL provided ?>
-    <form method="post" action="<?=$this->url(array('controller' => 'MyResearch'), 'default', true)?>" name="loginForm" id="loginForm">
+    <form method="post" action="<?=$this->url('myresearch-home')?>" name="loginForm" id="loginForm">
       <?=$this->auth()->getLoginFields()?>
       <input class="push-2 button" type="submit" name="processLogin" value="<?=$this->transEsc('Login')?>"/>
       <div class="clear"></div>
@@ -46,7 +45,7 @@
       echo $this->inlineScript(Zend_View_Helper_HeadScript::SCRIPT, $initJs);
     ?>
     <? if ($this->account->supportsCreation()): ?>
-      <a class="new_account" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Account'), 'default')?>"><?=$this->transEsc('Create New Account')?></a>
+      <a class="new_account" href="<?=$this->url('myresearch-account')?>"><?=$this->transEsc('Create New Account')?></a>
     <? endif; ?>
   <? else: ?>
     <a href="<?=$this->escape($this->account->getSessionInitiator())?>"><?=$this->transEsc("Institutional Login")?></a>
diff --git a/themes/vufind/blueprint/templates/myresearch/menu.phtml b/themes/vufind/blueprint/templates/myresearch/menu.phtml
index e2f63936e97..eed786ccdf8 100644
--- a/themes/vufind/blueprint/templates/myresearch/menu.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/menu.phtml
@@ -1,11 +1,11 @@
 <div class="sidegroup">
   <h4 class="account"><?=$this->transEsc('Your Account')?></h4>
   <ul class="bulleted">
-    <li<?=$this->active == 'favorites' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Favorites'), 'default', true)?>"><?=$this->transEsc('Favorites')?></a></li>
-    <li<?=$this->active == 'checkedout' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'CheckedOut'), 'default', true)?>"><?=$this->transEsc('Checked Out Items')?></a></li>
-    <li<?=$this->active == 'holds' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Holds'), 'default', true)?>"><?=$this->transEsc('Holds and Recalls')?></a></li>
-    <li<?=$this->active == 'fines' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Fines'), 'default', true)?>"><?=$this->transEsc('Fines')?></a></li>
-    <li<?=$this->active == 'profile' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Profile'), 'default', true)?>"><?=$this->transEsc('Profile')?></a></li>
-    <li<?=$this->active == 'history' ? ' class="active"' : ''?>><a href="<?=$this->url(array('controller' => 'Search', 'action' => 'History'), 'default', true)?>?require_login"><?=$this->transEsc('history_saved_searches')?></a></li>
+    <li<?=$this->active == 'favorites' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-favorites')?>"><?=$this->transEsc('Favorites')?></a></li>
+    <li<?=$this->active == 'checkedout' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-checkedout')?>"><?=$this->transEsc('Checked Out Items')?></a></li>
+    <li<?=$this->active == 'holds' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-holds')?>"><?=$this->transEsc('Holds and Recalls')?></a></li>
+    <li<?=$this->active == 'fines' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-fines')?>"><?=$this->transEsc('Fines')?></a></li>
+    <li<?=$this->active == 'profile' ? ' class="active"' : ''?>><a href="<?=$this->url('myresearch-profile')?>"><?=$this->transEsc('Profile')?></a></li>
+    <li<?=$this->active == 'history' ? ' class="active"' : ''?>><a href="<?=$this->url('search-history')?>?require_login"><?=$this->transEsc('history_saved_searches')?></a></li>
   </ul>
 </div>
diff --git a/themes/vufind/blueprint/templates/myresearch/mylist.phtml b/themes/vufind/blueprint/templates/myresearch/mylist.phtml
index 03160f24309..0bbe06004ff 100644
--- a/themes/vufind/blueprint/templates/myresearch/mylist.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/mylist.phtml
@@ -7,10 +7,9 @@
 
     // Set up breadcrumbs:
     $currPage = isset($list) ? 'List' : 'Favorites';
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc($currPage) . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc($currPage) . '</em>';
 
     // Load Javascript dependencies into header:
     $this->headScript()->appendFile("bulk_actions.js");
@@ -22,8 +21,8 @@
   <? if (isset($list)): ?>
     <div class="floatright">
       <? if ($list->editAllowed()): ?>
-        <a href="<?=$this->url(array('id' => $list->id), 'editList', true) ?>" class="edit smallButton listEdit" title="<?=$this->transEsc("edit_list")?>"><?=$this->transEsc("edit_list")?></a>
-        <a href="<?=$this->url(array('action'=>'DeleteList', 'controller'=>'MyResearch'), 'default', true) ?>?listID=<?=urlencode($list->id)?>" class="delete deleteList smallButton" id="deleteList<?=$list->id ?>" title="<?=$this->transEsc("delete_list")?>"><?=$this->transEsc("delete_list")?></a>
+        <a href="<?=$this->url('editList', array('id' => $list->id)) ?>" class="edit smallButton listEdit" title="<?=$this->transEsc("edit_list")?>"><?=$this->transEsc("edit_list")?></a>
+        <a href="<?=$this->url('myresearch-deletelist') ?>?listID=<?=urlencode($list->id)?>" class="delete deleteList smallButton" id="deleteList<?=$list->id ?>" title="<?=$this->transEsc("delete_list")?>"><?=$this->transEsc("delete_list")?></a>
       <? endif; ?>
     </div>
     <h3 class="list"><?=$this->escape($list->title)?></h3>
@@ -44,7 +43,7 @@
       </div>
       <div class="clear"></div>
     </div>
-    <form method="post" name="bulkActionForm" action="<?=$this->url(array('controller' => 'Cart', 'action' => 'MyResearchBulk'), 'default', true)?>">
+    <form method="post" name="bulkActionForm" action="<?=$this->url('cart-myresearchbulk')?>">
       <? if (isset($list)): ?>
         <input type="hidden" name="listID" value="<?=$this->escape($list->id)?>" />
         <input type="hidden" name="listName" value="<?=$this->escape($list->title)?>" />
diff --git a/themes/vufind/blueprint/templates/myresearch/profile.phtml b/themes/vufind/blueprint/templates/myresearch/profile.phtml
index ce4e642270d..bf65ca0e95d 100644
--- a/themes/vufind/blueprint/templates/myresearch/profile.phtml
+++ b/themes/vufind/blueprint/templates/myresearch/profile.phtml
@@ -3,10 +3,9 @@
     $this->headTitle($this->translate('My Profile'));
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc('Profile') . '</em>';
+    $this->layout()->breadcrumbs = '<a href="' . $this->url('myresearch-home') . '">'
+        . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>'
+        . $this->transEsc('Profile') . '</em>';
 
     // Only display home library form if we have multiple pickup locations:
     $showHomeLibForm = (isset($this->pickup) && count($this->pickup) > 1);
diff --git a/themes/vufind/blueprint/templates/oai/home.phtml b/themes/vufind/blueprint/templates/oai/home.phtml
index 327b3b82c80..a6ff4a50910 100644
--- a/themes/vufind/blueprint/templates/oai/home.phtml
+++ b/themes/vufind/blueprint/templates/oai/home.phtml
@@ -1,7 +1,7 @@
 <?
     $this->headTitle($this->translate('OAI Server'));
     $this->layout()->breadcrumbs = $this->transEsc('OAI Server');
-    $baseUrl = $this->url(array('controller' => 'OAI', 'action' => 'Server'), 'default', true);
+    $baseUrl = $this->url('oai-server');
 ?>
 <div class="span-18">
   <h1><?=$this->transEsc('OAI Server')?></h1>
diff --git a/themes/vufind/blueprint/templates/record/save.phtml b/themes/vufind/blueprint/templates/record/save.phtml
index 18f98688e8d..56f69a05d8c 100644
--- a/themes/vufind/blueprint/templates/record/save.phtml
+++ b/themes/vufind/blueprint/templates/record/save.phtml
@@ -15,7 +15,7 @@
     <p><?=$this->transEsc('This item is already part of the following list/lists') ?>:</p>
     <ul>
     <? foreach ($this->containingLists as $list): ?>
-      <li><a href="<?=$this->url(array('id' => $list['id']), 'userList') ?>"><?=$this->escape($list['title'])?></a></li>
+      <li><a href="<?=$this->url('userList', array('id' => $list['id'])) ?>"><?=$this->escape($list['title'])?></a></li>
     <? endforeach; ?>
     </ul>
   <? endif; ?>
@@ -36,7 +36,7 @@
       <? endif; ?>
     </select>
   <? endif; ?>
-  <a href="<?=$this->url(array('id' => 'NEW'), 'editList', true) ?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordController=<?=urlencode($this->record($this->driver)->getController())?>" class="listEdit controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Create a List') ?>"><? if ($showLists) echo $this->transEsc('or create a new list'); else echo $this->transEsc('Create a List'); ?></a>
+  <a href="<?=$this->url('editList', array('id' => 'NEW'))?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordController=<?=urlencode($this->record($this->driver)->getController())?>" class="listEdit controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Create a List') ?>"><? if ($showLists) echo $this->transEsc('or create a new list'); else echo $this->transEsc('Create a List'); ?></a>
 
   <? if ($showLists): ?>
     <label class="displayBlock" for="add_mytags"><?=$this->transEsc('Add Tags') ?></label>
diff --git a/themes/vufind/blueprint/templates/record/view.phtml b/themes/vufind/blueprint/templates/record/view.phtml
index 8b36355790b..32797b0a7f4 100644
--- a/themes/vufind/blueprint/templates/record/view.phtml
+++ b/themes/vufind/blueprint/templates/record/view.phtml
@@ -52,7 +52,7 @@
     </ul>
     <? if ($cart->isActive()): ?>
       <div class="cartSummary">
-        <form method="post" name="addForm" action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Home'), 'default', true)?>">
+        <form method="post" name="addForm" action="<?=$this->url('cart-home')?>">
           <input id="cartId" type="hidden" name="ids[]" value="<?=$this->escape($cartId)?>" />
           <noscript>
             <? if ($cart->contains($cartId)): ?>
@@ -73,9 +73,9 @@
     <?=$this->flashmessages()?>
     <? if (isset($this->scrollData) && ($this->scrollData['previousRecord'] || $this->scrollData['nextRecord'])): ?>
       <div class="resultscroller">
-        <? if ($this->scrollData['previousRecord']): ?><a href="<?=$this->url(array('id' => $this->scrollData['previousRecord'], 'action' => 'Home'), $this->driver->getRecordRoute(), true)?>">&laquo; <?=$this->transEsc('Prev')?></a><? endif; ?>
+        <? if ($this->scrollData['previousRecord']): ?><a href="<?=$this->url($this->driver->getRecordRoute(), array('id' => $this->scrollData['previousRecord']))?>">&laquo; <?=$this->transEsc('Prev')?></a><? endif; ?>
         #<?=$this->escape($this->scrollData['currentPosition']) . ' ' . $this->transEsc('of') . ' ' . $this->escape($this->scrollData['resultTotal'])?>
-        <? if ($this->scrollData['nextRecord']): ?><a href="<?=$this->url(array('id' => $this->scrollData['nextRecord'], 'action' => 'Home'), $this->driver->getRecordRoute(), true)?>"><?=$this->transEsc('Next')?> &raquo;</a><? endif; ?>
+        <? if ($this->scrollData['nextRecord']): ?><a href="<?=$this->url($this->driver->getRecordRoute(), array('id' => $this->scrollData['nextRecord']))?>"><?=$this->transEsc('Next')?> &raquo;</a><? endif; ?>
       </div>
     <? endif; ?>
     <?=$this->record($this->driver)->getCoreMetadata()?>
diff --git a/themes/vufind/blueprint/templates/search/advanced/layout.phtml b/themes/vufind/blueprint/templates/search/advanced/layout.phtml
index c332fc6ba73..e636cd58f4c 100644
--- a/themes/vufind/blueprint/templates/search/advanced/layout.phtml
+++ b/themes/vufind/blueprint/templates/search/advanced/layout.phtml
@@ -24,7 +24,7 @@
     // Step 3: Build the page
     $this->headScript()->appendScript($this->partial('search/advanced/build_page.phtml', array('searchDetails' => $searchDetails)));
 ?>
-<form method="get" action="<?=$this->url($this->options->getSearchAction(), 'default', true)?>" id="advSearchForm" name="searchForm" class="search">
+<form method="get" action="<?=$this->url($this->options->getSearchAction())?>" id="advSearchForm" name="searchForm" class="search">
   <div class="<?=$this->layoutClass('mainbody')?>">
     <h3><?=$this->transEsc('Advanced Search')?></h3>
     <div class="advSearchContent">
@@ -140,8 +140,8 @@
     <? endif; ?>
     <div class="sidegroup">
       <h4><?=$this->transEsc("Search Tips")?></h4>
-      <a href="<?=$this->url(array('controller' => 'Help'), 'default')?>?topic=searchadv" class="advsearchHelp"><?=$this->transEsc("Help with Advanced Search")?></a><br />
-      <a href="<?=$this->url(array('controller' => 'Help'), 'default')?>?topic=search" class="searchHelp"><?=$this->transEsc("Help with Search Operators")?></a>
+      <a href="<?=$this->url('help-home')?>?topic=searchadv" class="advsearchHelp"><?=$this->transEsc("Help with Advanced Search")?></a><br />
+      <a href="<?=$this->url('help-home')?>?topic=search" class="searchHelp"><?=$this->transEsc("Help with Search Operators")?></a>
     </div>
   </div>
 
diff --git a/themes/vufind/blueprint/templates/search/history-table.phtml b/themes/vufind/blueprint/templates/search/history-table.phtml
index 6586c3128e3..ed92713d14f 100644
--- a/themes/vufind/blueprint/templates/search/history-table.phtml
+++ b/themes/vufind/blueprint/templates/search/history-table.phtml
@@ -10,7 +10,7 @@
     <tr class="<?=$iteration % 2 == 1 ? 'even' : 'odd'?>row">
       <td><?=$this->escape(date("g:ia, jS M y", $info->getStartTime()))?></td>
       <td>
-        <a href="<?=$this->url($info->getSearchAction(), 'default', true) . $info->getUrl()->getParams()?>"><?
+        <a href="<?=$this->url($info->getSearchAction()) . $info->getUrl()->getParams()?>"><?
           $desc = $info->getDisplayQuery();
           echo empty($desc) ? $this->transEsc("history_empty_search") : $this->escape($desc);
         ?></a>
@@ -25,9 +25,9 @@
       <td><?=$this->escape(number_format($info->getResultTotal()))?></td>
       <td>
         <? if ($this->showSaved): ?>
-          <a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?delete=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="delete"><?=$this->transEsc("history_delete_link")?></a>
+          <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="delete"><?=$this->transEsc("history_delete_link")?></a>
         <? else: ?>
-          <a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?save=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="add"><?=$this->transEsc("history_save_link")?></a>
+          <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="add"><?=$this->transEsc("history_save_link")?></a>
         <? endif; ?>
       </td>
     </tr>
diff --git a/themes/vufind/blueprint/templates/search/home.phtml b/themes/vufind/blueprint/templates/search/home.phtml
index 8afe6dc6659..37345646355 100644
--- a/themes/vufind/blueprint/templates/search/home.phtml
+++ b/themes/vufind/blueprint/templates/search/home.phtml
@@ -52,7 +52,7 @@
       <? else: ?>
         <? $i = 0; foreach ($sortedList as $url => $value): ?>
           <? if (++$i > 12): ?>
-            <li><a href="<?=$this->url($advSearch, 'default')?>"><strong><?=$this->transEsc("More options")?>...</strong></a></li>
+            <li><a href="<?=$this->url($advSearch)?>"><strong><?=$this->transEsc("More options")?>...</strong></a></li>
             <? break; ?>
           <? else: ?>
             <li><a href="<?=$url?>"><?=$this->escape($value)?></a></li>
diff --git a/themes/vufind/blueprint/templates/search/list-authorfacets.phtml b/themes/vufind/blueprint/templates/search/list-authorfacets.phtml
index e358ab938d6..d8d85e0f91c 100644
--- a/themes/vufind/blueprint/templates/search/list-authorfacets.phtml
+++ b/themes/vufind/blueprint/templates/search/list-authorfacets.phtml
@@ -5,7 +5,7 @@
     </tr>
     <? $i = 0; foreach ($this->results->getResults() as $record): ?>
     <tr<?=(++$i % 2 == 0) ? ' class="alt"' : ''?>>
-      <td><a href="<?=$this->url(array('controller' => 'Author', 'action' => 'Home'), 'default', true)?>?author=<?=urlencode($record['value'])?>"><?=$this->escape($record['value'])?></a></td>
+      <td><a href="<?=$this->url('author-home')?>?author=<?=urlencode($record['value'])?>"><?=$this->escape($record['value'])?></a></td>
       <td><?=$this->escape($record['count'])?></td>
     </tr>
     <? endforeach; ?>
diff --git a/themes/vufind/blueprint/templates/search/results.phtml b/themes/vufind/blueprint/templates/search/results.phtml
index edf80d33924..353c0132209 100644
--- a/themes/vufind/blueprint/templates/search/results.phtml
+++ b/themes/vufind/blueprint/templates/search/results.phtml
@@ -93,7 +93,7 @@
       <?=$this->recommend($current)?>
     <? endforeach; ?>
   <? else: ?>
-    <form method="post" name="bulkActionForm" action="<?=$this->url(array('controller' => 'Cart', 'action' => 'Home'), 'default', true)?>">
+    <form method="post" name="bulkActionForm" action="<?=$this->url('cart-home')?>">
       <?=$this->context($this)->renderInContext('search/bulk-action-buttons.phtml', array('idPrefix' => ''))?>
       <?=$this->render('search/list-' . $this->results->getView() . '.phtml')?>
       <?=$this->context($this)->renderInContext('search/bulk-action-buttons.phtml', array('idPrefix' => 'bottom_'))?>
@@ -103,12 +103,12 @@
     <div class="searchtools">
       <strong><?=$this->transEsc('Search Tools')?>:</strong>
       <a href="<?=$this->results->getUrl()->setViewParam('rss')?>" class="feed"><?=$this->transEsc('Get RSS Feed')?></a>
-      <a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Email'), 'default')?>" class="mailSearch mail" id="mailSearch<?=$this->escape($this->results->getSearchId())?>" title="<?=$this->transEsc('Email this Search')?>"><?=$this->transEsc('Email this Search')?></a>
+      <a href="<?=$this->url('search-email')?>" class="mailSearch mail" id="mailSearch<?=$this->escape($this->results->getSearchId())?>" title="<?=$this->transEsc('Email this Search')?>"><?=$this->transEsc('Email this Search')?></a>
       <? if (is_numeric($this->results->getSearchId())): ?>
         <? if ($this->results->isSavedSearch()): ?>
-          <a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?delete=<?=urlencode($this->results->getSearchId())?>" class="delete"><?=$this->transEsc('save_search_remove')?></a>
+          <a href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>" class="delete"><?=$this->transEsc('save_search_remove')?></a>
         <? else: ?>
-          <a href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?save=<?=urlencode($this->results->getSearchId())?>" class="add"><?=$this->transEsc('save_search')?></a>
+          <a href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>" class="add"><?=$this->transEsc('save_search')?></a>
         <? endif; ?>
       <? endif; ?>
     </div>
diff --git a/themes/vufind/blueprint/templates/search/searchbox.phtml b/themes/vufind/blueprint/templates/search/searchbox.phtml
index 53dcc360e0c..52ba4b604b4 100644
--- a/themes/vufind/blueprint/templates/search/searchbox.phtml
+++ b/themes/vufind/blueprint/templates/search/searchbox.phtml
@@ -7,20 +7,19 @@
     // Load search actions and settings (if any):
     $options = $this->searchOptions($this->searchClassId);
     $basicSearch = $options->getSearchAction();
-    $searchHome = $basicSearch;
-    $searchHome['action'] = 'Home';
+    $searchHome = $options->getSearchHomeAction();
     $advSearch = $options->getAdvancedSearchAction();
     $lastSort = $options->getLastSort();
     $lastLimit = $options->getLastLimit();
 ?>
 <div class="searchform">
   <? if ($this->searchType == 'advanced'): ?>
-    <a href="<?=$this->url($advSearch, 'default', true)?>?edit=<?=$this->escape($this->searchId)?>" class="small"><?=$this->transEsc("Edit this Advanced Search")?></a> |
-    <a href="<?=$this->url($advSearch, 'default', true)?>" class="small"><?=$this->transEsc("Start a new Advanced Search")?></a> |
-    <a href="<?=$this->url($searchHome, 'default', true)?>" class="small"><?=$this->transEsc("Start a new Basic Search")?></a>
+    <a href="<?=$this->url($advSearch)?>?edit=<?=$this->escape($this->searchId)?>" class="small"><?=$this->transEsc("Edit this Advanced Search")?></a> |
+    <a href="<?=$this->url($advSearch)?>" class="small"><?=$this->transEsc("Start a new Advanced Search")?></a> |
+    <a href="<?=$this->url($searchHome)?>" class="small"><?=$this->transEsc("Start a new Basic Search")?></a>
     <br/><?=$this->transEsc("Your search terms")?> : "<strong><?=$this->escape($this->lookfor)?></strong>"
   <? else: ?>
-    <form method="get" action="<?=$this->url($basicSearch, 'default', true)?>" name="searchForm" id="searchForm" class="search">
+    <form method="get" action="<?=$this->url($basicSearch)?>" name="searchForm" id="searchForm" class="search">
       <label for="searchForm_lookfor" class="offscreen"><?=$this->transEsc("Your search terms")?></label>
       <input id="searchForm_lookfor" type="text" name="lookfor" size="40" value="<?=$this->escape($this->lookfor)?>"<?=$options->autocompleteEnabled() ? ' class="autocomplete searcher:' . $this->escape($this->searchClassId) . ' typeSelector:searchForm_type"' : ''?>/>
       <label for="searchForm_type" class="offscreen"><?=$this->transEsc("Search Type")?></label>
@@ -31,7 +30,7 @@
       </select>
       <input type="submit" name="submit" value="<?=$this->transEsc("Find")?>"/>
       <? if ($advSearch): ?>
-        <a href="<?=$this->url($advSearch, 'default', true)?>" class="small"><?=$this->transEsc("Advanced")?></a>
+        <a href="<?=$this->url($advSearch)?>" class="small"><?=$this->transEsc("Advanced")?></a>
       <? endif; ?>
 
       <?
diff --git a/themes/vufind/blueprint/templates/upgrade/error.phtml b/themes/vufind/blueprint/templates/upgrade/error.phtml
index 4d07c587283..1cca7ed5e6e 100644
--- a/themes/vufind/blueprint/templates/upgrade/error.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/error.phtml
@@ -7,4 +7,4 @@
 ?>
 <h1><?=$this->transEsc('Upgrade VuFind')?></h1>
 <?=$this->flashmessages()?>
-<p><?=$this->transEsc('vufind_upgrade_fail') ?>.  You can try <a href="<?=$this->url(array('controller' => 'Upgrade', 'action' => 'Reset'), 'default', true)?>">starting over</a>.</p>
\ No newline at end of file
+<p><?=$this->transEsc('vufind_upgrade_fail') ?>.  You can try <a href="<?=$this->url('upgrade-reset')?>">starting over</a>.</p>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/upgrade/fixanonymoustags.phtml b/themes/vufind/blueprint/templates/upgrade/fixanonymoustags.phtml
index 87683e9bb4d..759c5b930da 100644
--- a/themes/vufind/blueprint/templates/upgrade/fixanonymoustags.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/fixanonymoustags.phtml
@@ -20,7 +20,7 @@ an administrator) to associate with old anonymous tags.</p>
 
 <br />
 
-<form method="POST" action="<?=$this->url(array('controller' => 'Upgrade', 'action' => 'FixAnonymousTags'), 'default', true)?>">
+<form method="POST" action="<?=$this->url('upgrade-fixanonymoustags')?>">
   <?=$this->transEsc('Username') ?>: <input type="text" name="username" /> <input type="submit" name="submit" value="<?=$this->transEsc('Submit') ?>" /><br /><br />
   <input type="submit" name="skip" value="<?=$this->transEsc('skip_step') ?>." onclick="return confirm('<?=$this->transEsc('skip_confirm') ?>');"/>
 </form>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/upgrade/fixmetadata.phtml b/themes/vufind/blueprint/templates/upgrade/fixmetadata.phtml
index 03bc19b756c..40ebeb0ac67 100644
--- a/themes/vufind/blueprint/templates/upgrade/fixmetadata.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/fixmetadata.phtml
@@ -13,7 +13,7 @@ but it will improve the user experience by allowing proper sorting of favorites
 
 <br />
 
-<form method="POST" action="<?=$this->url(array('controller' => 'Upgrade', 'action' => 'FixMetadata'), 'default', true)?>">
+<form method="POST" action="<?=$this->url('upgrade-fixmetadata')?>">
   <input type="submit" name="submit" value="<?=$this->transEsc('fix_metadata') ?>." /><br /><br />
   <input type="submit" name="skip" value="<?=$this->transEsc('skip_fix_metadata') ?>." onclick="return confirm('<?=$this->transEsc('skip_confirm') ?>');"/>
 </form>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/upgrade/getdbcredentials.phtml b/themes/vufind/blueprint/templates/upgrade/getdbcredentials.phtml
index 9a4b124e243..f49f355ef3f 100644
--- a/themes/vufind/blueprint/templates/upgrade/getdbcredentials.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/getdbcredentials.phtml
@@ -11,7 +11,7 @@
 <p>VuFind's database structure needs to be updated for the new version.  Please enter a database username and password
 with permission to alter and create tables.</p>
 
-<form method="POST" action="<?=$this->url(array('controller' => 'Upgrade', 'action' => 'GetDBCredentials'), 'default', true)?>">
+<form method="POST" action="<?=$this->url('upgrade-getdbcredentials')?>">
   <table>
     <tbody>
       <tr><td>MySQL Root User: </td><td><input type="text" name="dbrootuser" value="<?=$this->escape($this->dbrootuser)?>"/></td></tr>
diff --git a/themes/vufind/blueprint/templates/upgrade/getsourcedir.phtml b/themes/vufind/blueprint/templates/upgrade/getsourcedir.phtml
index 096608ad8ff..98d005299b9 100644
--- a/themes/vufind/blueprint/templates/upgrade/getsourcedir.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/getsourcedir.phtml
@@ -8,6 +8,6 @@
 <h1><?=$this->transEsc('Upgrade VuFind')?></h1>
 <?=$this->flashmessages()?>
 <p>Please enter the full path of the directory containing your previous version of VuFind (i.e. /usr/local/vufind):</p>
-<form method="post" action="<?=$this->url(array('controller' => 'Upgrade', 'action' => 'GetSourceDir'), 'default', true)?>">
+<form method="post" action="<?=$this->url('upgrade-getsourcedir')?>">
 <input type="text" name="sourcedir" /> <input type="submit" />
 </form>
\ No newline at end of file
diff --git a/themes/vufind/blueprint/templates/upgrade/home.phtml b/themes/vufind/blueprint/templates/upgrade/home.phtml
index e0db4491d62..bd73071d93b 100644
--- a/themes/vufind/blueprint/templates/upgrade/home.phtml
+++ b/themes/vufind/blueprint/templates/upgrade/home.phtml
@@ -15,7 +15,7 @@
   <li>If you have customized any of the YAML searchspecs files without using the *_local.yaml override mechanism, you will need to reapply those changes.</li>
   <li>If you have customized code or templates in your previous version, you will need to adapt those changes to the new architecture.</li>
   <li>You should reindex all of your content.</li>
-  <li>You may want to check for problems on the <a href="<?=$this->url(array('controller' => 'Install'), 'default', true)?>"><?=$this->transEsc('auto_configure_title')?></a> page.</li>
+  <li>You may want to check for problems on the <a href="<?=$this->url('install-home')?>"><?=$this->transEsc('auto_configure_title')?></a> page.</li>
 </ol>
 
 <p>For the latest notes on upgrading, see the <a href="http://www.vufind.org/wiki/migration_notes">online documentation</a>.</p>
diff --git a/themes/vufind/jquerymobile/templates/Recommend/FavoriteFacets.phtml b/themes/vufind/jquerymobile/templates/Recommend/FavoriteFacets.phtml
index cd56b087a8c..e4bfab5e686 100644
--- a/themes/vufind/jquerymobile/templates/Recommend/FavoriteFacets.phtml
+++ b/themes/vufind/jquerymobile/templates/Recommend/FavoriteFacets.phtml
@@ -8,7 +8,7 @@
           <? if ($current['isApplied']): ?>
             <?=$this->escape($current['displayText'])?>
           <? else: ?>
-            <a href="<?=$this->url(array('id' => $current['value']), 'userList')?>"><?=$this->escape($current['displayText'])?></a>
+            <a href="<?=$this->url('userList', array('id' => $current['value']))?>"><?=$this->escape($current['displayText'])?></a>
           <? endif; ?>
           <span class="ui-li-count"><?=$this->escape($current['count'])?></span>
         </li>
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrAuth/result-list.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrAuth/result-list.phtml
index ca4d9c7b2ab..ded67db5d01 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrAuth/result-list.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrAuth/result-list.phtml
@@ -4,7 +4,7 @@
         $heading = $this->translate('Heading unavailable.');
     }
 ?>
-<a rel="external" href="<?=$this->url(array('controller' => 'Authority', 'action' => 'Record'), 'default', true)?>?id=<?=urlencode($this->driver->getUniqueId())?>">
+<a rel="external" href="<?=$this->url('authority-record')?>?id=<?=urlencode($this->driver->getUniqueId())?>">
   <div class="result">
     <h3><?=$this->escape($heading)?></h3>
   </div>
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
index 31144bbb2e0..a109720fe73 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
@@ -166,7 +166,7 @@
         <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver, 'AddTag')?>" class="tool add tagRecord controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Add Tag')?>" id="tagRecord"><?=$this->transEsc('Add Tag')?></a>
       </span>
       <div id="tagList">
-        <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a rel="external" href="<?=$this->url(array('controller' => 'Tag', 'action' => 'Home'), 'default', true)?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a> (<?=$this->escape($tag->cnt)?>)<? endforeach; ?>
+        <? $i = 0; foreach ($tagList as $tag): ?><?=($i++ == 0)?'':', '?><a rel="external" href="<?=$this->url('tag-home')?>?lookfor=<?=urlencode($tag->tag)?>"><?=$this->escape($tag->tag)?></a> (<?=$this->escape($tag->cnt)?>)<? endforeach; ?>
       </div>
     </dd>
   <? endif; ?>
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-author.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-author.phtml
index edd9a48f6b4..1ef515fe458 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-author.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Author'), 'default', true)?>?author=<?=urlencode($this->lookfor)?>
\ No newline at end of file
+<?=$this->url('author-home')?>?author=<?=urlencode($this->lookfor)?>
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-journaltitle.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
index 8c4c1db7281..5987653afd9 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-journaltitle.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=JournalTitle
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=JournalTitle
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-series.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-series.phtml
index 038f3bb12a4..bf7507d0a50 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-series.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Series
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Series
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-subject.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-subject.phtml
index 260f6a167a6..07a34f729d9 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-subject.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-title.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-title.phtml
index 1876b775c90..eca8c06502d 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-title.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/SolrDefault/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
+<?=$this->url('search-results')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-author.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-author.phtml
index 7b76c5e3c8b..5aebd76f472 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-author.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Author
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Author
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-journaltitle.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-journaltitle.phtml
index 53571ba8222..5536935b4f4 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-journaltitle.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-journaltitle.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationTitle
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationTitle
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-series.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-series.phtml
index 5b794f66b24..26a9524f15a 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-series.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationSeriesTitle
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=PublicationSeriesTitle
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-subject.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-subject.phtml
index a3afda46edd..cf66f99c101 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-subject.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Subject
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-title.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-title.phtml
index 96b9e4aa0bd..57cdc24f2d6 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-title.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/Summon/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'Summon', 'action' => 'Search'), 'default')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
+<?=$this->url('summon-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=Title
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-author.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-author.phtml
index 0e7b4193fad..b4790f29557 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-author.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-author.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=<?=urlencode($this->lookfor)?>&amp;type=srw.au%3Asrw.pn%3Asrw.cn
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=<?=urlencode($this->lookfor)?>&amp;type=srw.au%3Asrw.pn%3Asrw.cn
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-series.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-series.phtml
index 8095d4954d2..d95ad084838 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-series.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-series.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.se
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.se
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-subject.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-subject.phtml
index c3212621d10..6b6bb5c9235 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-subject.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-subject.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.su
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.su
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-title.phtml b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-title.phtml
index 705c080396f..03f8d524558 100644
--- a/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-title.phtml
+++ b/themes/vufind/jquerymobile/templates/RecordDriver/WorldCat/link-title.phtml
@@ -1 +1 @@
-<?=$this->url(array('controller' => 'WorldCat', 'action' => 'Search'), 'default', true)?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.ti%3Asrw.se
\ No newline at end of file
+<?=$this->url('worldcat-search')?>?lookfor=%22<?=urlencode($this->lookfor)?>%22&amp;type=srw.ti%3Asrw.se
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/alphabrowse/home.phtml b/themes/vufind/jquerymobile/templates/alphabrowse/home.phtml
index 3b3e8abd401..fae366e827d 100644
--- a/themes/vufind/jquerymobile/templates/alphabrowse/home.phtml
+++ b/themes/vufind/jquerymobile/templates/alphabrowse/home.phtml
@@ -6,7 +6,7 @@
   <? if (!$this->result): ?>
     <?=$this->mobileMenu()->header() ?>
     <div class="resulthead">
-      <form method="get" action="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>" name="alphaBrowseForm" id="alphaBrowseForm" data-ajax="false">
+      <form method="get" action="<?=$this->url('alphabrowse-home')?>" name="alphaBrowseForm" id="alphaBrowseForm" data-ajax="false">
         <div class="ui-body ui-body-d">
           <label for="alphaBrowseForm_source"><?=$this->transEsc('Browse Alphabetically') ?></label>
           <select id="alphaBrowseForm_source" name="source">
@@ -23,7 +23,7 @@
   <? else: ?>
     <?=$this->mobileMenu()->header(array(
       'extraButtons' => array('<a rel="external" href="'
-        . $this->url(array('controller' => 'AlphaBrowse', 'action' => 'Home'), 'default', true)
+        . $this->url('alphabrowse-home')
         . '" data-icon="home" class="ui-btn-left">'
         . $this->transEsc("Browse Home")
         . '</a>'
@@ -32,12 +32,12 @@
       <div class="ui-grid-a">
         <div class="ui-block-a">
           <? if (isset($this->prevpage)): ?>
-            <a data-role="button" data-mini="true" data-icon="arrow-l" href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->prevpage)?>">Prev</a>
+            <a data-role="button" data-mini="true" data-icon="arrow-l" href="<?=$this->url('alphabrowse-home')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->prevpage)?>">Prev</a>
           <? endif; ?>
         </div>
         <div class="ui-block-b">
           <? if (isset($this->nextpage)): ?>
-            <a data-role="button" data-mini="true" data-icon="arrow-r" data-iconpos="right" href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->nextpage)?>">Next</a>
+            <a data-role="button" data-mini="true" data-icon="arrow-r" data-iconpos="right" href="<?=$this->url('alphabrowse-home')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode($this->from)?>&amp;page=<?=urlencode($this->nextpage)?>">Next</a>
           <? endif; ?>
         </div>
       </div>
@@ -51,12 +51,12 @@
           <? if ($item['count'] > 0 || count($item['useInstead']) > 0): ?>
           <? ob_start(); ?>
             <? if (count($item['useInstead']) > 0): ?>
-              <?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>/Results?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode(implode($item['useInstead']))?>
+              <?=$this->url('alphabrowse-results')?>?source=<?=urlencode($this->source)?>&amp;from=<?=urlencode(implode($item['useInstead']))?>
             <? else: ?>
               <? if ($item['count'] < 5): ?>
-                <?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?type=ids&amp;lookfor=<? foreach ($item['ids'] as $id): ?><?=$id ?>+<? endforeach; ?>
+                <?=$this->url('search-results')?>?type=ids&amp;lookfor=<? foreach ($item['ids'] as $id): ?><?=$id ?>+<? endforeach; ?>
               <? else: ?>
-                <?=$this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true)?>?type=<?=urlencode(ucwords($this->source)) ?>Browse&amp;lookfor=<?=urlencode($item['heading'])?>
+                <?=$this->url('search-results')?>?type=<?=urlencode(ucwords($this->source)) ?>Browse&amp;lookfor=<?=urlencode($item['heading'])?>
               <? endif; ?>
             <? endif; ?>
             <? $searchLink = ob_get_contents(); ?>
diff --git a/themes/vufind/jquerymobile/templates/author/home.phtml b/themes/vufind/jquerymobile/templates/author/home.phtml
index c0dc2b935c4..8cda4f3e606 100644
--- a/themes/vufind/jquerymobile/templates/author/home.phtml
+++ b/themes/vufind/jquerymobile/templates/author/home.phtml
@@ -5,7 +5,7 @@
 <div data-role="page">
   <?=$this->mobileMenu()->header()?>
   <div data-role="content">
-    <form method="get" action="<?=$this->url(array('controller' => 'Author', 'action' => 'Search'), 'default', true)?>" data-ajax="false">
+    <form method="get" action="<?=$this->url('author-search')?>" data-ajax="false">
       <div data-role="fieldcontain">
         <label class="offscreen" for="author_lookfor"><?=$this->transEsc('Author Results for')?>:</label>
         <input type="search" id="author_lookfor" name="lookfor" />
diff --git a/themes/vufind/jquerymobile/templates/browse/home.phtml b/themes/vufind/jquerymobile/templates/browse/home.phtml
index a6d00687838..a9243bbe6be 100644
--- a/themes/vufind/jquerymobile/templates/browse/home.phtml
+++ b/themes/vufind/jquerymobile/templates/browse/home.phtml
@@ -1,14 +1,12 @@
 <?
   $this->headTitle($this->translate('Browse the Catalog'));
 
-  $BROWSE_BASE = $this->url(array('controller' => 'Browse', 'action' => $this->currentAction), 'default', true);
-  $SEARCH_BASE = ($this->currentAction == 'Tag')
-    ? $this->url(array('controller' => 'Tag', 'action' => 'Home'), 'default', true)
-    : $this->url(array('controller' => 'Search', 'action' => 'Results'), 'default', true);
+  $BROWSE_BASE = $this->url('browse-' . strtolower($this->currentAction));
+  $SEARCH_BASE = $this->url($this->currentAction == 'Tag' ? 'tag-home' : 'search-results');
 
-  $BACK_LINK = $this->url(array('controller' => 'Browse', 'action' => 'Home'), 'default', true);
+  $BACK_LINK = $this->url('browse-home');
   if (isset($this->findby) || ($this->currentAction == 'LCC' && isset($this->query))) {
-    $BACK_LINK = $this->url(array('controller' => 'Browse', 'action' => $this->currentAction), 'default', true);
+    $BACK_LINK = $BROWSE_BASE;
   }
   if (isset($this->query) && $this->currentAction != 'LCC') {
     $BACK_LINK .= '?findby='.urlencode($this->findby).'&amp;query_field='.$this->browse()->getSolrField($this->findby, $this->currentAction);
@@ -17,12 +15,12 @@
 
 <div data-role="header" class="ui-bar-b">
 <? if (!isset($this->currentAction)): ?>
-  <a data-ajax="false" href="<?=$this->url(array('controller' => 'Index'), 'default', true) ?>" data-icon="home"><?=$this->transEsc('Search Home') ?></a>
+  <a data-ajax="false" href="<?=$this->url('home') ?>" data-icon="home"><?=$this->transEsc('Search Home') ?></a>
   <h1><?=$this->transEsc('Choose a Category to Begin Browsing') ?></h1>
 <? else: ?>
   <a data-ajax="false" href="<?=$BACK_LINK ?>" data-icon="arrow-l"><?=$this->transEsc('navigate_back')?></a>
   <h1>Browsing By <?=$this->currentAction ?></h1>
-  <a data-ajax="false" href="<?=$this->url(array('controller' => 'Browse', 'action' => 'Home'), 'default', true) ?>" data-icon="home"><?=$this->transEsc('Browse Home') ?></a>
+  <a data-ajax="false" href="<?=$this->url('browse-home') ?>" data-icon="home"><?=$this->transEsc('Browse Home') ?></a>
 <? endif; ?>
 </div>
 
@@ -63,7 +61,7 @@
     <? else: ?>
     <? foreach ($this->browseOptions as $item=>$currentOption): ?>
       <li>
-        <a data-ajax="false" href="<?=$this->url(array('controller' => 'Browse', 'action' => $currentOption['action']), 'default', true); ?>"><?=$this->transEsc($currentOption['description']) ?></a>
+        <a data-ajax="false" href="<?=$this->url('browse-' . strtolower($currentOption['action'])); ?>"><?=$this->transEsc($currentOption['description']) ?></a>
       </li>
     <? endforeach; ?>
     <? endif; ?>
diff --git a/themes/vufind/jquerymobile/templates/default-footer-navbar.phtml b/themes/vufind/jquerymobile/templates/default-footer-navbar.phtml
index f4f871ecf62..25bb38ba2b8 100644
--- a/themes/vufind/jquerymobile/templates/default-footer-navbar.phtml
+++ b/themes/vufind/jquerymobile/templates/default-footer-navbar.phtml
@@ -2,10 +2,10 @@
   <ul>
     <li><a data-rel="dialog" href="#Language-dialog" data-transition="pop"><?=$this->transEsc('Language')?></a></li>
     <? if (is_object($this->account) && $this->account->loginEnabled()): // hide login/logout if unavailable ?>
-      <li><a rel="external" href="<?=$this->url(array('controller' => 'MyResearch'), 'default', true)?>"><?=$this->transEsc('Account')?></a></li>
+      <li><a rel="external" href="<?=$this->url('myresearch-home')?>"><?=$this->transEsc('Account')?></a></li>
     <? endif; ?>
     <? if ($this->account->isLoggedIn()): ?>
-      <li><a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Logout'), 'default', true)?>"><?=$this->transEsc("Log Out")?></a></li>
+      <li><a rel="external" href="<?=$this->url('myresearch-logout')?>"><?=$this->transEsc("Log Out")?></a></li>
     <? endif; ?>
   </ul>
 </div>
diff --git a/themes/vufind/jquerymobile/templates/header.phtml b/themes/vufind/jquerymobile/templates/header.phtml
index 97a24978b35..820b6f70d2c 100644
--- a/themes/vufind/jquerymobile/templates/header.phtml
+++ b/themes/vufind/jquerymobile/templates/header.phtml
@@ -12,7 +12,7 @@
       }
   ?>
   <? if ($this->searchLink): ?>
-    <a rel="external" href="<?=$this->url($this->searchLink, 'default', true)?>" data-icon="search"  class="ui-btn-right">
+    <a rel="external" href="<?=$this->url($this->searchLink)?>" data-icon="search"  class="ui-btn-right">
       <?=$this->transEsc('Search')?>
     </a>
   <? endif; ?>
diff --git a/themes/vufind/jquerymobile/templates/myresearch/editlist.phtml b/themes/vufind/jquerymobile/templates/myresearch/editlist.phtml
index 6c75490e99e..a7877d5032b 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/editlist.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/editlist.phtml
@@ -2,12 +2,6 @@
     // Set up page title:
     $pageTitle = empty($this->list->id) ? 'Create a List' : "edit_list";
     $this->headTitle($this->translate($pageTitle));
-
-    // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<a href="' .
-        $this->url(array('controller' => 'MyResearch', 'action' => 'Home'), 'default', true) .
-        '">' . $this->transEsc('Your Account') . '</a>' . '<span>&gt;</span><em>' .
-        $this->transEsc($pageTitle) . '</em>';
 ?>
 <div data-role="page" id="MyResearch-editlist">
   <?=$this->mobileMenu()->header()?>
@@ -34,7 +28,7 @@
             </div>
             <? if (!empty($this->list->id)): ?>
               <div class="ui-block-b">
-                <a data-role="button" data-theme="c" data-mini="true" href="<?=$this->url(array('action'=>'DeleteList', 'controller'=>'MyResearch'), 'default', true) ?>?listID=<?=urlencode($this->list->id)?>" id="deleteList<?=$this->list->id ?>" title="<?=$this->transEsc("delete_list")?>"><?=$this->transEsc("delete_list")?></a>
+                <a data-role="button" data-theme="c" data-mini="true" href="<?=$this->url('myresearch-deletelist') ?>?listID=<?=urlencode($this->list->id)?>" id="deleteList<?=$this->list->id ?>" title="<?=$this->transEsc("delete_list")?>"><?=$this->transEsc("delete_list")?></a>
               </div>
             <? endif; ?>
         </fieldset>
diff --git a/themes/vufind/jquerymobile/templates/myresearch/fines.phtml b/themes/vufind/jquerymobile/templates/myresearch/fines.phtml
index 7a05ee0a29f..76101edff4c 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/fines.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/fines.phtml
@@ -13,7 +13,7 @@
         <? foreach ($this->fines as $record): ?>
           <li>
             <? if ($showLink = (!empty($record['title']) && isset($record['id']))): ?>
-              <a rel="external" href="<?=$this->url(array('id' => $record['id']), 'record', true)?>">
+              <a rel="external" href="<?=$this->url('record', array('id' => $record['id']))?>">
             <? endif; ?>
             <div class="result">
               <h3>
diff --git a/themes/vufind/jquerymobile/templates/myresearch/footer-navbar.phtml b/themes/vufind/jquerymobile/templates/myresearch/footer-navbar.phtml
index 28eabed4faf..0e1b7a80f19 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/footer-navbar.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/footer-navbar.phtml
@@ -1,9 +1,9 @@
 <? if ($this->account->isLoggedIn()): ?>
   <div data-role="navbar">
     <ul>
-      <li><a rel="external" <?=$this->action=="mylist" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Favorites'), 'default', true)?>"><?=$this->transEsc('Favorites')?></a></li>
-      <li><a rel="external" <?=$this->action=="history" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url(array('controller' => 'Search', 'action' => 'History'), 'default', true)?>?require_login"><?=$this->transEsc('History')?></a></li>
-      <li><a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Logout'), 'default', true)?>"><?=$this->transEsc("Log Out")?></a></li>
+      <li><a rel="external" <?=$this->action=="mylist" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('myresearch-favorites')?>"><?=$this->transEsc('Favorites')?></a></li>
+      <li><a rel="external" <?=$this->action=="history" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('search-history')?>?require_login"><?=$this->transEsc('History')?></a></li>
+      <li><a rel="external" href="<?=$this->url('myresearch-logout')?>"><?=$this->transEsc("Log Out")?></a></li>
     </ul>
   </div>
 <? else: ?>
diff --git a/themes/vufind/jquerymobile/templates/myresearch/header-navbar.phtml b/themes/vufind/jquerymobile/templates/myresearch/header-navbar.phtml
index 6566824b508..63edad2a5e7 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/header-navbar.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/header-navbar.phtml
@@ -1,9 +1,9 @@
 <? if (VF_Account_Manager::getInstance()->isLoggedIn()): ?>
   <div data-role="navbar">
     <ul>
-      <li><a rel="external" <?=$this->action=="checkedout" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'CheckedOut'), 'default', true)?>"><?=$this->transEsc('Checked Out')?></a></li>
-      <li><a rel="external" <?=$this->action=="holds" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Holds'), 'default', true)?>"><?=$this->transEsc('Holds')?></a></li>
-      <li><a rel="external" <?=$this->action=="fines" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Fines'), 'default', true)?>"><?=$this->transEsc('Fines')?></a></li>
+      <li><a rel="external" <?=$this->action=="checkedout" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('myresearch-checkedout')?>"><?=$this->transEsc('Checked Out')?></a></li>
+      <li><a rel="external" <?=$this->action=="holds" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('myresearch-holds')?>"><?=$this->transEsc('Holds')?></a></li>
+      <li><a rel="external" <?=$this->action=="fines" ? ' class="ui-btn-active"' : ''?> href="<?=$this->url('myresearch-fines')?>"><?=$this->transEsc('Fines')?></a></li>
     </ul>
   </div>
 <? endif; ?>
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/myresearch/login.phtml b/themes/vufind/jquerymobile/templates/myresearch/login.phtml
index 39a4c3c23d7..b4be6532380 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/login.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/login.phtml
@@ -25,7 +25,7 @@
       <h3><?=$this->transEsc('Login')?></h3>
       <?=$this->flashmessages()?>
       <? if (!$this->account->getSessionInitiator()): // display default login form if no login URL provided ?>
-        <form method="post" action="<?=$this->url(array('controller' => 'MyResearch'), 'default', true)?>" name="loginForm" data-ajax="false">
+        <form method="post" action="<?=$this->url('myresearch-home')?>" name="loginForm" data-ajax="false">
           <div data-role="fieldcontain">
             <?=$this->auth()->getLoginFields()?>
           </div>
@@ -34,7 +34,7 @@
           </div>
         </form>
         <? if ($this->account->supportsCreation()): ?>
-          <a rel="external" data-role="button" class="new_account" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'Account'), 'default')?>"><?=$this->transEsc('Create New Account')?></a>
+          <a rel="external" data-role="button" class="new_account" href="<?=$this->url('myresearch-account')?>"><?=$this->transEsc('Create New Account')?></a>
         <? endif; ?>
       <? else: ?>
         <a rel="external" data-role="button" href="<?=$this->escape($this->account->getSessionInitiator())?>"><?=$this->transEsc("Institutional Login")?></a>
diff --git a/themes/vufind/jquerymobile/templates/myresearch/mylist.phtml b/themes/vufind/jquerymobile/templates/myresearch/mylist.phtml
index 93280ccf75f..ec832366320 100644
--- a/themes/vufind/jquerymobile/templates/myresearch/mylist.phtml
+++ b/themes/vufind/jquerymobile/templates/myresearch/mylist.phtml
@@ -8,7 +8,7 @@
     // Set up extra button for header:
     $extraButton = isset($list)
         ? '<a rel="external" href="'
-            . $this->url(array('controller' => 'MyResearch', 'action' => 'EditList'), 'default', true)
+            . $this->url('myresearch-editlist')
             . '/'
             . $list->id
             . '" data-icon="gear" class="ui-btn-left">'
diff --git a/themes/vufind/jquerymobile/templates/record/save.phtml b/themes/vufind/jquerymobile/templates/record/save.phtml
index f5d82a2bd0f..716b9afad91 100644
--- a/themes/vufind/jquerymobile/templates/record/save.phtml
+++ b/themes/vufind/jquerymobile/templates/record/save.phtml
@@ -14,7 +14,7 @@
         <ul data-role="listview" data-dividertheme="e" data-inset="true">
           <li data-role="list-divider"><?=$this->transEsc('This item is already part of the following list/lists') ?>:</li>
           <? foreach ($this->containingLists as $list): ?>
-            <li><a rel="external" href="<?=$this->url(array('id' => $list['id']), 'userList') ?>"><?=$this->escape($list['title'])?></a></li>
+            <li><a rel="external" href="<?=$this->url('userList', array('id' => $list['id'])) ?>"><?=$this->escape($list['title'])?></a></li>
           <? endforeach; ?>
         </ul>
       <? endif; ?>
@@ -37,7 +37,7 @@
           </select>
         <? endif; ?>
 
-        <a rel="external" data-role="button" data-rel="dialog" href="<?=$this->url(array('id' => 'NEW'), 'editList', true) ?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordController=<?=urlencode($this->record($this->driver)->getController())?>" class="listEdit controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Create a List') ?>"><? if ($showLists) echo $this->transEsc('or create a new list'); else echo $this->transEsc('Create a List'); ?></a>
+        <a rel="external" data-role="button" data-rel="dialog" href="<?=$this->url('editList', array('id' => 'NEW')) ?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordController=<?=urlencode($this->record($this->driver)->getController())?>" class="listEdit controller<?=$this->record($this->driver)->getController()?>" title="<?=$this->transEsc('Create a List') ?>"><? if ($showLists) echo $this->transEsc('or create a new list'); else echo $this->transEsc('Create a List'); ?></a>
 
         <? if ($showLists): ?>
           <label class="displayBlock" for="add_mytags"><?=$this->transEsc('Add Tags') ?></label>
diff --git a/themes/vufind/jquerymobile/templates/search/advanced.phtml b/themes/vufind/jquerymobile/templates/search/advanced.phtml
index ce048ae6eb6..12064905068 100644
--- a/themes/vufind/jquerymobile/templates/search/advanced.phtml
+++ b/themes/vufind/jquerymobile/templates/search/advanced.phtml
@@ -27,7 +27,7 @@
       </div>
     <? endif; ?>
     <!-- SEARCH BOXES -->
-    <form method="get" action="<?=$this->url($basicSearch, 'default', true)?>" data-ajax="false">
+    <form method="get" action="<?=$this->url($basicSearch)?>" data-ajax="false">
       <fieldset class="ui-grid-a">
       <? for ($i = 0; $i < 3; $i++): ?>
         <div class="ui-block-a">
diff --git a/themes/vufind/jquerymobile/templates/search/header-navbar.phtml b/themes/vufind/jquerymobile/templates/search/header-navbar.phtml
index 20d00202c2a..4a181480510 100644
--- a/themes/vufind/jquerymobile/templates/search/header-navbar.phtml
+++ b/themes/vufind/jquerymobile/templates/search/header-navbar.phtml
@@ -7,9 +7,9 @@
       <li>
         <? if (isset($this->results) && is_numeric($this->results->getSearchId())): ?>
           <? if ($this->results->isSavedSearch()): ?>
-            <a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?delete=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search_remove')?></a>
+            <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search_remove')?></a>
           <? else: ?>
-            <a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?save=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search')?></a>
+            <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($this->results->getSearchId())?>"><?=$this->transEsc('save_search')?></a>
           <? endif; ?>
         <? endif; ?>
       </li>
diff --git a/themes/vufind/jquerymobile/templates/search/history-table.phtml b/themes/vufind/jquerymobile/templates/search/history-table.phtml
index f2a83ec4931..0354bef5034 100644
--- a/themes/vufind/jquerymobile/templates/search/history-table.phtml
+++ b/themes/vufind/jquerymobile/templates/search/history-table.phtml
@@ -1,6 +1,6 @@
 <? foreach (($this->showSaved ? array_reverse($this->saved) : array_reverse($this->unsaved)) as $iteration => $info): ?>
   <li>
-    <a rel="external" href="<?=$this->url($info->getSearchAction(), 'default', true) . $info->getUrl()->getParams()?>">
+    <a rel="external" href="<?=$this->url($info->getSearchAction()) . $info->getUrl()->getParams()?>">
     <div class="result">
     <h3><?
       $desc = $info->getDisplayQuery();
@@ -16,9 +16,9 @@
     </div>
     </a>
     <? if ($this->showSaved): ?>
-      <a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?delete=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="delete"><?=$this->transEsc("history_delete_link")?></a>
+      <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?delete=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="delete"><?=$this->transEsc("history_delete_link")?></a>
     <? else: ?>
-      <a rel="external" href="<?=$this->url(array('controller' => 'MyResearch', 'action' => 'SaveSearch'), 'default')?>?save=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="add"><?=$this->transEsc("history_save_link")?></a>
+      <a rel="external" href="<?=$this->url('myresearch-savesearch')?>?save=<?=urlencode($info->getSearchId())?>&amp;mode=history" class="add"><?=$this->transEsc("history_save_link")?></a>
     <? endif; ?>
   </li>
 <? endforeach; ?>
\ No newline at end of file
diff --git a/themes/vufind/jquerymobile/templates/search/home.phtml b/themes/vufind/jquerymobile/templates/search/home.phtml
index 46a26c505d0..d09ddac60aa 100644
--- a/themes/vufind/jquerymobile/templates/search/home.phtml
+++ b/themes/vufind/jquerymobile/templates/search/home.phtml
@@ -20,11 +20,11 @@
     <? else: ?>
       <ul data-role="listview" data-inset="true" data-dividertheme="b">
         <li data-role="list-divider"><?=$this->transEsc('Find More')?></li>
-        <li><a data-ajax="false" href="<?=$this->url(array('controller' => 'Search', 'action' => 'advanced'), 'default', true)?>"><?=$this->transEsc('Advanced Search')?></a></li>
-        <li><a data-ajax="false" href="<?=$this->url(array('controller' => 'Browse'), 'default', true)?>"><?=$this->transEsc('Browse the Catalog')?></a></li>
-        <li><a data-ajax="false" href="<?=$this->url(array('controller' => 'AlphaBrowse'), 'default', true)?>"><?=$this->transEsc('Browse Alphabetically')?></a></li>
-        <li><a data-ajax="false" href="<?=$this->url(array('controller' => 'Search', 'action' => 'Reserves'), 'default', true)?>"><?=$this->transEsc('Course Reserves')?></a></li>
-        <li><a data-ajax="false" href="<?=$this->url(array('controller' => 'Search', 'action' => 'NewItem'), 'default', true)?>"><?=$this->transEsc('New Items')?></a></li>
+        <li><a data-ajax="false" href="<?=$this->url('search-advanced')?>"><?=$this->transEsc('Advanced Search')?></a></li>
+        <li><a data-ajax="false" href="<?=$this->url('browse-home')?>"><?=$this->transEsc('Browse the Catalog')?></a></li>
+        <li><a data-ajax="false" href="<?=$this->url('alphabrowse-home')?>"><?=$this->transEsc('Browse Alphabetically')?></a></li>
+        <li><a data-ajax="false" href="<?=$this->url('search-reserves')?>"><?=$this->transEsc('Course Reserves')?></a></li>
+        <li><a data-ajax="false" href="<?=$this->url('search-newitem')?>"><?=$this->transEsc('New Items')?></a></li>
       </ul>
     <? endif; ?>
   </div>
diff --git a/themes/vufind/jquerymobile/templates/search/list-authorfacets.phtml b/themes/vufind/jquerymobile/templates/search/list-authorfacets.phtml
index 32ceba55135..325a8a87d15 100644
--- a/themes/vufind/jquerymobile/templates/search/list-authorfacets.phtml
+++ b/themes/vufind/jquerymobile/templates/search/list-authorfacets.phtml
@@ -1,7 +1,7 @@
 <ul class="results" data-role="listview" data-split-icon="plus" data-split-theme="c">
   <? foreach ($this->results->getResults() as $record): ?>
     <li>
-      <a rel="external" href="<?=$this->url(array('controller' => 'Author', 'action' => 'Home'), 'default', true)?>?author=<?=urlencode($record['value'])?>">
+      <a rel="external" href="<?=$this->url('author-home')?>?author=<?=urlencode($record['value'])?>">
         <div class="result">
           <h3><?=$this->escape($record['value'])?></h3>
           
diff --git a/themes/vufind/jquerymobile/templates/search/results.phtml b/themes/vufind/jquerymobile/templates/search/results.phtml
index d65b4f089c4..f0b07c85881 100644
--- a/themes/vufind/jquerymobile/templates/search/results.phtml
+++ b/themes/vufind/jquerymobile/templates/search/results.phtml
@@ -51,7 +51,7 @@
       <?=$this->render('search/list-' . $this->results->getView() . '.phtml')?>
       <?=$this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', array('results' => $this->results))?>
       <div data-role="controlgroup">
-        <a href="<?=$this->url(array('controller' => 'Search', 'action' => 'Email'), 'default')?>" data-role="button" rel="external"><?=$this->transEsc("Email this Search")?></a>
+        <a href="<?=$this->url('search-email')?>" data-role="button" rel="external"><?=$this->transEsc("Email this Search")?></a>
       </div>
     <? endif; ?>
   </div>
diff --git a/themes/vufind/jquerymobile/templates/search/searchbox.phtml b/themes/vufind/jquerymobile/templates/search/searchbox.phtml
index 9c9fa20402d..1031d9e8978 100644
--- a/themes/vufind/jquerymobile/templates/search/searchbox.phtml
+++ b/themes/vufind/jquerymobile/templates/search/searchbox.phtml
@@ -13,7 +13,7 @@
   $lastSort = $options->getLastSort();
   $lastLimit = $options->getLastLimit();
 ?>
-<form method="get" action="<?=$this->url($basicSearch, 'default', true)?>" data-ajax="false">
+<form method="get" action="<?=$this->url($basicSearch)?>" data-ajax="false">
   <label class="offscreen" for="searchForm_lookfor">
     <?=$this->transEsc("Search")?>
   </label>
diff --git a/themes/vufind/root/templates/error/index.phtml b/themes/vufind/root/templates/error/index.phtml
index 67428a78dd6..b1160987c37 100644
--- a/themes/vufind/root/templates/error/index.phtml
+++ b/themes/vufind/root/templates/error/index.phtml
@@ -2,9 +2,9 @@
 <h2><?=$this->transEsc($this->message)?></h2>
 
 <? if ($this->showInstallLink): ?>
-  <h3><a href="<?=$this->url(array('controller' => 'Install'), 'default', true)?>"><?=$this->transEsc('auto_configure_title', array(), 'Auto Configure')?></a></h3>
+  <h3><a href="<?=$this->url('install-home')?>"><?=$this->transEsc('auto_configure_title', array(), 'Auto Configure')?></a></h3>
   <?=$this->transEsc('auto_configure_description', array(), 'If this is a new installation, you may be able to fix the error using VuFind\'s Auto Configure tool.')?>
-  <h3><a href="<?=$this->url(array('controller' => 'Upgrade'), 'default', true)?>"><?=$this->transEsc('Upgrade VuFind')?></a></h3>
+  <h3><a href="<?=$this->url('upgrade-home')?>"><?=$this->transEsc('Upgrade VuFind')?></a></h3>
   <?=$this->transEsc('upgrade_description', array(), 'If you are upgrading a previous VuFind version, you can load your old settings with this tool.')?>
 <? endif; ?>
 
diff --git a/themes/vufind/root/templates/search/opensearch-describe.phtml b/themes/vufind/root/templates/search/opensearch-describe.phtml
index 87c894ee155..2681b6d93a4 100644
--- a/themes/vufind/root/templates/search/opensearch-describe.phtml
+++ b/themes/vufind/root/templates/search/opensearch-describe.phtml
@@ -1,5 +1,5 @@
-<? $searchBase = $this->fullUrl($this->url(array('controller'=>'Search','action'=>'Results'), 'default', true)); ?>
-<? $suggestions = $this->fullUrl($this->url(array('controller'=>'Search','action'=>'Suggest'), 'default', true)); ?>
+<? $searchBase = $this->fullUrl($this->url('search-results')); ?>
+<? $suggestions = $this->fullUrl($this->url('search-suggest')); ?>
 <?='<'?>?xml version="1.0"?<?='>'?>
 <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
   <ShortName><?=$this->escape($this->site->title)?></ShortName>
-- 
GitLab