diff --git a/module/VuFind/src/VuFind/Autocomplete/Solr.php b/module/VuFind/src/VuFind/Autocomplete/Solr.php
index f7a7285e0c66b2adbf02fccfb798e58c493ad263..8464fc4ed4ce3e0410d867f332611cf7d23be620 100644
--- a/module/VuFind/src/VuFind/Autocomplete/Solr.php
+++ b/module/VuFind/src/VuFind/Autocomplete/Solr.php
@@ -126,12 +126,12 @@ class Solr implements AutocompleteInterface
     public function getSuggestions($query)
     {
         try {
-            $this->searchObject->setBasicSearch(
+            $this->searchObject->getParams()->setBasicSearch(
                 $this->mungeQuery($query), $this->handler
             );
-            $this->searchObject->setSort($this->sortField);
+            $this->searchObject->getParams()->setSort($this->sortField);
             foreach ($this->filters as $current) {
-                $this->searchObject->addFilter($current);
+                $this->searchObject->getParams()->addFilter($current);
             }
 
             // Perform the search:
diff --git a/module/VuFind/src/VuFind/Controller/AbstractSearch.php b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
index 2f90c58165805bb885080ed1a2e9ad3f2bf4e3ee..04e85712991bfb578fed3d6f1f0f7dbf6d0d3c67 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractSearch.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractSearch.php
@@ -225,7 +225,7 @@ class AbstractSearch extends AbstractBase
         }
 
         // Special case: If we're in RSS view, we need to render differently:
-        if ($view->results->getView() == 'rss') {
+        if ($view->results->getParams()->getView() == 'rss') {
             $response = $this->getResponse();
             $response->getHeaders()->addHeaderLine('Content-type', 'text/xml');
             $feed = $this->getViewRenderer()->plugin('resultfeed');
@@ -317,14 +317,14 @@ class AbstractSearch extends AbstractBase
         $savedSearch = $minSO->deminify();
 
         // Fail if this is not the right type of search:
-        if ($savedSearch->getSearchType() != 'advanced') {
+        if ($savedSearch->getParams()->getSearchType() != 'advanced') {
             $this->flashMessenger()->setNamespace('error')
                 ->addMessage('advSearchError_notAdvanced');
             return false;
         }
 
         // Activate facets so we get appropriate descriptions in the filter list:
-        $savedSearch->activateAllFacets('Advanced');
+        $savedSearch->getParams()->activateAllFacets('Advanced');
 
         // Make the object available to the view:
         return $savedSearch;
diff --git a/module/VuFind/src/VuFind/Controller/AjaxController.php b/module/VuFind/src/VuFind/Controller/AjaxController.php
index fe9a13d331685d707532611fbf9e1929effb9053..2e0008ea1a061465f43693b108220128410ee96b 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxController.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxController.php
@@ -734,7 +734,7 @@ class AjaxController extends AbstractBase
         $params = new \VuFind\Search\Solr\Params();
         $params->initFromRequest($this->getRequest()->getQuery());
         $results = new \VuFind\Search\Solr\Results($params);
-        $filters = $results->getFilters();
+        $filters = $params->getFilters();
         $dateFacets = $this->params()->fromQuery('facetFields');
         $dateFacets = empty($dateFacets) ? array() : explode(':', $dateFacets);
         $fields = $this->processDateFacets($filters, $dateFacets, $results);
@@ -779,7 +779,7 @@ class AjaxController extends AbstractBase
             }
             $result[$current] = array($from, $to);
             $result[$current]['label']
-                = $results->getFacetLabel($current);
+                = $results->getParams()->getFacetLabel($current);
         }
         return $result;
     }
diff --git a/module/VuFind/src/VuFind/Controller/SearchController.php b/module/VuFind/src/VuFind/Controller/SearchController.php
index 38897ea7352d8cdff838f8eac4d52cda5d4234d1..68d98b11ab063195846a04bf29bf79adf52ee000 100644
--- a/module/VuFind/src/VuFind/Controller/SearchController.php
+++ b/module/VuFind/src/VuFind/Controller/SearchController.php
@@ -140,14 +140,16 @@ class SearchController extends AbstractSearch
         // Find the selected value by analyzing facets -- if we find match, remove
         // the offending facet to avoid inappropriate items appearing in the
         // "applied filters" sidebar!
-        if ($savedSearch && $savedSearch->hasFilter('illustrated:Illustrated')) {
+        if ($savedSearch
+            && $savedSearch->getParams()->hasFilter('illustrated:Illustrated')
+        ) {
             $illYes['selected'] = true;
-            $savedSearch->removeFilter('illustrated:Illustrated');
+            $savedSearch->getParams()->removeFilter('illustrated:Illustrated');
         } else if ($savedSearch
-            && $savedSearch->hasFilter('illustrated:"Not Illustrated"')
+            && $savedSearch->getParams()->hasFilter('illustrated:"Not Illustrated"')
         ) {
             $illNo['selected'] = true;
-            $savedSearch->removeFilter('illustrated:"Not Illustrated"');
+            $savedSearch->getParams()->removeFilter('illustrated:"Not Illustrated"');
         } else {
             $illAny['selected'] = true;
         }
@@ -168,13 +170,14 @@ class SearchController extends AbstractSearch
 
         // Check to see if there is an existing range in the search object:
         if ($savedSearch) {
-            $filters = $savedSearch->getFilters();
+            $filters = $savedSearch->getParams()->getFilters();
             if (isset($filters['publishDate'])) {
                 foreach ($filters['publishDate'] as $current) {
                     if ($range = SolrUtils::parseRange($current)) {
                         $from = $range['from'] == '*' ? '' : $range['from'];
                         $to = $range['to'] == '*' ? '' : $range['to'];
-                        $savedSearch->removeFilter('publishDate:' . $current);
+                        $savedSearch->getParams()
+                            ->removeFilter('publishDate:' . $current);
                         break;
                     }
                 }
@@ -204,13 +207,15 @@ class SearchController extends AbstractSearch
                 // If we haven't already found a selected facet and the current
                 // facet has been applied to the search, we should store it as
                 // the selected facet for the current control.
-                if ($searchObject && $searchObject->hasFilter($fullFilter)) {
+                if ($searchObject
+                    && $searchObject->getParams()->hasFilter($fullFilter)
+                ) {
                     $facetList[$facet]['list'][$key]['selected'] = true;
                     // Remove the filter from the search object -- we don't want
                     // it to show up in the "applied filters" sidebar since it
                     // will already be accounted for by being selected in the
                     // filter select list!
-                    $searchObject->removeFilter($fullFilter);
+                    $searchObject->getParams()->removeFilter($fullFilter);
                 }
             }
         }
diff --git a/module/VuFind/src/VuFind/Controller/SummonController.php b/module/VuFind/src/VuFind/Controller/SummonController.php
index e50665647cec0476028ba248b5e8725fc67808cb..7799067ed87569f6598e6c20a6d8eb01101a6984 100644
--- a/module/VuFind/src/VuFind/Controller/SummonController.php
+++ b/module/VuFind/src/VuFind/Controller/SummonController.php
@@ -162,13 +162,15 @@ class SummonController extends AbstractSearch
                 // If we haven't already found a selected facet and the current
                 // facet has been applied to the search, we should store it as
                 // the selected facet for the current control.
-                if ($searchObject && $searchObject->hasFilter($fullFilter)) {
+                if ($searchObject
+                    && $searchObject->getParams()->hasFilter($fullFilter)
+                ) {
                     $facetList[$facet]['list'][$key]['selected'] = true;
                     // Remove the filter from the search object -- we don't want
                     // it to show up in the "applied filters" sidebar since it
                     // will already be accounted for by being selected in the
                     // filter select list!
-                    $searchObject->removeFilter($fullFilter);
+                    $searchObject->getParams()->removeFilter($fullFilter);
                 }
             }
         }
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorFacets.php b/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
index 05e0f8106207a59750e342f4656ff975301e5046..3233bce2b5676abb0079d3b03bdddc845c7ac4e8 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorFacets.php
@@ -105,7 +105,7 @@ class AuthorFacets implements RecommendInterface
      */
     public function getSearchTerm()
     {
-        $search = $this->results->getSearchTerms();
+        $search = $this->results->getParams()->getSearchTerms();
         if (isset($search[0]['lookfor'])) {
             return $search[0]['lookfor'];
         }
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorInfo.php b/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
index 8ec61c76d9c0609f5ede7f0dbcdbc7e656d969fa..bc54993900c1e6005fb160f05d6cd1e3809554e1 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorInfo.php
@@ -367,7 +367,7 @@ class AuthorInfo implements RecommendInterface
      */
     protected function getAuthor()
     {
-        $search = $this->searchObject->getSearchTerms();
+        $search = $this->searchObject->getParams()->getSearchTerms();
         if (isset($search[0]['lookfor'])) {
             $author = $search[0]['lookfor'];
             // remove quotes
diff --git a/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php b/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
index 27b4f2dc322d83eeb3dac3c8802aaf953f6c3606..ab8fdd2e94c214c5b7be25e92aad3320a43640fe 100644
--- a/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
+++ b/module/VuFind/src/VuFind/Recommend/AuthorityRecommend.php
@@ -108,7 +108,7 @@ class AuthorityRecommend implements RecommendInterface
     public function process($results)
     {
         // function will return blank on Advanced Search
-        if ($results->getSearchType()== 'advanced') {
+        if ($results->getParams()->getSearchType()== 'advanced') {
             return;
         }
 
diff --git a/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php b/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
index a186707982cda82f7f925e1b9913b6d8b3e35694..0fcf809af24ff82ba37d78989b5d999306282848 100644
--- a/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
+++ b/module/VuFind/src/VuFind/Recommend/PubDateVisAjax.php
@@ -114,7 +114,7 @@ class PubDateVisAjax implements RecommendInterface
     public function getVisFacets()
     {
         return $this->processDateFacets(
-            $this->searchObject->getFilters()
+            $this->searchObject->getParams()->getFilters()
         );
     }
 
@@ -180,7 +180,7 @@ class PubDateVisAjax implements RecommendInterface
             }
             $result[$current] = array($from, $to);
             $result[$current]['label']
-                = $this->searchObject->getFacetLabel($current);
+                = $this->searchObject->getParams()->getFacetLabel($current);
         }
         return $result;
     }
diff --git a/module/VuFind/src/VuFind/Recommend/SideFacets.php b/module/VuFind/src/VuFind/Recommend/SideFacets.php
index 47e987e4251de45de5af77821ab2b900cf9a8aba..1ed92c9afc807d4ca7b2c4d9915f848495e40fd2 100644
--- a/module/VuFind/src/VuFind/Recommend/SideFacets.php
+++ b/module/VuFind/src/VuFind/Recommend/SideFacets.php
@@ -142,7 +142,7 @@ class SideFacets implements RecommendInterface
      */
     public function getDateFacets()
     {
-        $filters = $this->results->getFilters();
+        $filters = $this->results->getParams()->getFilters();
         $result = array();
         foreach ($this->dateFacets as $current) {
             $from = $to = '';
diff --git a/module/VuFind/src/VuFind/Recommend/SummonDatabases.php b/module/VuFind/src/VuFind/Recommend/SummonDatabases.php
index a0f4b4f5916c941d586916301deb7b8a9f3f10ba..b5fabcfcc0638fedcad9df2e31e390c96df3bfb4 100644
--- a/module/VuFind/src/VuFind/Recommend/SummonDatabases.php
+++ b/module/VuFind/src/VuFind/Recommend/SummonDatabases.php
@@ -96,7 +96,7 @@ class SummonDatabases implements RecommendInterface
         // If we received a Summon search object, we'll use that.  If not, we need
         // to create a new Summon search object using the specified request 
         // parameter for search terms.
-        if ($results->getSearchClassId() != 'Summon') {
+        if ($results->getParams()->getSearchClassId() != 'Summon') {
             $params = new SummonParams();
             $params->setBasicSearch($this->lookfor);
             $results = new SummonResults($params);
diff --git a/module/VuFind/src/VuFind/Recommend/SwitchType.php b/module/VuFind/src/VuFind/Recommend/SwitchType.php
index c4003f541312b1233b9e62f4389e5b7df9f809cb..4753020aeb65f200654ad3d6c06bb5178dba9eeb 100644
--- a/module/VuFind/src/VuFind/Recommend/SwitchType.php
+++ b/module/VuFind/src/VuFind/Recommend/SwitchType.php
@@ -95,7 +95,7 @@ class SwitchType implements RecommendInterface
      */
     public function process($results)
     {
-        $handler = $results->getSearchHandler();
+        $handler = $results->getParams()->getSearchHandler();
 
         // If the handler is null, we can't figure out a single handler, so this
         // is probably an advanced search.  In that case, we shouldn't try to change
diff --git a/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php b/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
index 92585eab99994dc0f1e8d3da834f28ad6bb41076..7f80a48cc5f1f4e62c3d9aaca9b23dc472e73c1f 100644
--- a/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
+++ b/module/VuFind/src/VuFind/Recommend/WorldCatIdentities.php
@@ -100,7 +100,7 @@ class WorldCatIdentities implements RecommendInterface
     public function getIdentities()
     {
         // Extract the first search term from the search object:
-        $search = $this->searchObject->getSearchTerms();
+        $search = $this->searchObject->getParams()->getSearchTerms();
         $lookfor = isset($search[0]['lookfor']) ? $search[0]['lookfor'] : '';
 
         // Get terminology information:
diff --git a/module/VuFind/src/VuFind/Recommend/WorldCatTerms.php b/module/VuFind/src/VuFind/Recommend/WorldCatTerms.php
index 107ad4cc73fc109a1ec0c486d39dc7ab6f7ee767..9c8884d4a80a0a96ccec65c9808f2d6f42ce08e6 100644
--- a/module/VuFind/src/VuFind/Recommend/WorldCatTerms.php
+++ b/module/VuFind/src/VuFind/Recommend/WorldCatTerms.php
@@ -101,7 +101,7 @@ class WorldCatTerms implements RecommendInterface
     public function getTerms()
     {
         // Extract the first search term from the search object:
-        $search = $this->searchObject->getSearchTerms();
+        $search = $this->searchObject->getParams()->getSearchTerms();
         $lookfor = isset($search[0]['lookfor']) ? $search[0]['lookfor'] : '';
 
         // Get terminology information:
diff --git a/module/VuFind/src/VuFind/Search/Base/Results.php b/module/VuFind/src/VuFind/Search/Base/Results.php
index d050425a9ccdd42a22f2d59583e77382ffd74797..749a8131c98146440d563f55f7ca408a5900ca1f 100644
--- a/module/VuFind/src/VuFind/Search/Base/Results.php
+++ b/module/VuFind/src/VuFind/Search/Base/Results.php
@@ -216,24 +216,6 @@ abstract class Results
         return $retVal;
     }
 
-    /**
-     * Allow Results object to proxy methods of Params object.
-     *
-     * @param string $methodName Method to call
-     * @param array  $params     Method parameters
-     *
-     * @return mixed
-     */
-    public function __call($methodName, $params)
-    {
-        // Proxy undefined methods to the parameter object:
-        $method = array($this->getParams(), $methodName);
-        if (!is_callable($method)) {
-            throw new \Exception($methodName . ' cannot be called.');
-        }
-        return call_user_func_array($method, $params);
-    }
-
     /**
      * Get spelling suggestion information.
      *
@@ -280,7 +262,8 @@ abstract class Results
         if (!is_null($this->startRecordOverride)) {
             return $this->startRecordOverride;
         }
-        return (($this->getPage() - 1) * $this->getLimit()) + 1;
+        $params = $this->getParams();
+        return (($params->getPage() - 1) * $params->getLimit()) + 1;
     }
 
     /**
@@ -291,8 +274,8 @@ abstract class Results
     public function getEndRecord()
     {
         $total = $this->getResultTotal();
-        $limit = $this->getLimit();
-        $page = $this->getPage();
+        $limit = $this->getParams()->getLimit();
+        $page = $this->getParams()->getPage();
         if ($page * $limit > $total) {
             // The end of the current page runs past the last record, use total
             // results
@@ -427,8 +410,8 @@ abstract class Results
 
         // Build the standard paginator control:
         return Paginator::factory($total)
-            ->setCurrentPageNumber($this->getPage())
-            ->setItemCountPerPage($this->getLimit())
+            ->setCurrentPageNumber($this->getParams()->getPage())
+            ->setItemCountPerPage($this->getParams()->getLimit())
             ->setPageRange(11);
     }
 
@@ -513,4 +496,21 @@ abstract class Results
         $this->queryTime = $minified->s;
         $this->resultTotal = $minified->r;
     }
+
+    /**
+     * Get an array of recommendation objects for augmenting the results display.
+     *
+     * @param string $location Name of location to use as a filter (null to get
+     * associative array of all locations); legal non-null values: 'top', 'side'
+     *
+     * @return array
+     */
+    public function getRecommendations($location = 'top')
+    {
+        // Proxy the params object's getRecommendations call -- we need to set up
+        // the recommendations in the params object since they need to be
+        // query-aware, but from a caller's perspective, it makes more sense to
+        // pull them from the results object.
+        return $this->getParams()->getRecommendations($location);
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Search/Favorites/Results.php b/module/VuFind/src/VuFind/Search/Favorites/Results.php
index 3954b33c72f3a13e9514ac653e4bd57a8d37e44e..2fcd1ded93941f0c750a6e7d6b5bd8099504ec27 100644
--- a/module/VuFind/src/VuFind/Search/Favorites/Results.php
+++ b/module/VuFind/src/VuFind/Search/Favorites/Results.php
@@ -125,7 +125,7 @@ class Results extends BaseResults
     protected function performSearch()
     {
         $list = $this->getListObject();
-        $account = $this->getAuthManager();
+        $account = $this->getParams()->getAuthManager();
         $this->user = $account ? $account->isLoggedIn() : false;
 
         // Make sure the user and/or list objects make it possible to view
@@ -149,16 +149,16 @@ class Results extends BaseResults
         $userId = is_null($list) ? $this->user->id : $list->user_id;
         $listId = is_null($list) ? null : $list->id;
         $rawResults = $resource->getFavorites(
-            $userId, $listId, $this->getTagFilters(), $this->getSort()
+            $userId, $listId, $this->getTagFilters(), $this->getParams()->getSort()
         );
         $this->resultTotal = count($rawResults);
 
         // Apply offset and limit if necessary!
-        $limit = $this->getLimit();
+        $limit = $this->getParams()->getLimit();
         if ($this->resultTotal > $limit) {
             $rawResults = $resource->getFavorites(
-                $userId, $listId, $this->getTagFilters(), $this->getSort(),
-                $this->getStartRecord() - 1, $limit
+                $userId, $listId, $this->getTagFilters(),
+                $this->getParams()->getSort(), $this->getStartRecord() - 1, $limit
             );
         }
 
diff --git a/module/VuFind/src/VuFind/Search/Minified.php b/module/VuFind/src/VuFind/Search/Minified.php
index a05fc4e86f53df56ad6791b52e28781a62dc350c..54feccf4505d81f919525c6eb8e74f1c20187997 100644
--- a/module/VuFind/src/VuFind/Search/Minified.php
+++ b/module/VuFind/src/VuFind/Search/Minified.php
@@ -77,11 +77,11 @@ class Minified
         $this->i  = $searchObject->getStartTime();
         $this->s  = $searchObject->getQuerySpeed();
         $this->r  = $searchObject->getResultTotal();
-        $this->ty = $searchObject->getSearchType();
-        $this->cl = $searchObject->getSearchClassId();
+        $this->ty = $searchObject->getParams()->getSearchType();
+        $this->cl = $searchObject->getParams()->getSearchClassId();
 
         // Search terms, we'll shorten keys
-        $tempTerms = $searchObject->getSearchTerms();
+        $tempTerms = $searchObject->getParams()->getSearchTerms();
         foreach ($tempTerms as $term) {
             $newTerm = array();
             foreach ($term as $k => $v) {
@@ -122,7 +122,7 @@ class Minified
 
         // It would be nice to shorten filter fields too, but
         //      it would be a nightmare to maintain.
-        $this->f = $searchObject->getFilters();
+        $this->f = $searchObject->getParams()->getFilters();
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/Search/Solr/Params.php b/module/VuFind/src/VuFind/Search/Solr/Params.php
index 844e091a670c1d3ab0ecb5f424c4742344780fb3..abb096d84714c9833f9c4498990ced25cb8cf057 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Params.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Params.php
@@ -175,7 +175,7 @@ class Params extends BaseParams
      *
      * @return void
      */
-    public function initTagSearch()
+    protected function initTagSearch()
     {
         $table = new TagsTable();
         $tag = $table->getByText($this->getDisplayQuery());
diff --git a/module/VuFind/src/VuFind/Search/Solr/Results.php b/module/VuFind/src/VuFind/Search/Solr/Results.php
index ab4ad29e2edb370ce41cf218b29afffb9f69d582..e12128633eee5d91393477529d3ba163f8a12c37 100644
--- a/module/VuFind/src/VuFind/Search/Solr/Results.php
+++ b/module/VuFind/src/VuFind/Search/Solr/Results.php
@@ -91,19 +91,21 @@ class Results extends BaseResults
      */
     protected function performSearch()
     {
-        $solr = static::getSolrConnection($this->getSelectedShards());
+        $solr = static::getSolrConnection($this->getParams()->getSelectedShards());
 
         // Collect the search parameters:
-        $overrideQuery = $this->getOverrideQuery();
+        $overrideQuery = $this->getParams()->getOverrideQuery();
         $params = array(
             'query' => !empty($overrideQuery)
-                ? $overrideQuery : $solr->buildQuery($this->getSearchTerms()),
-            'handler' => $this->getSearchHandler(),
+                ? $overrideQuery
+                : $solr->buildQuery($this->getParams()->getSearchTerms()),
+            'handler' => $this->getParams()->getSearchHandler(),
             // Account for reserved VuFind word 'relevance' (which really means
             // "no sort parameter in Solr"):
-            'sort' => $this->getSort() == 'relevance' ? null : $this->getSort(),
+            'sort' => $this->getParams()->getSort() == 'relevance'
+                ? null : $this->getParams()->getSort(),
             'start' => $this->getStartRecord() - 1,
-            'limit' => $this->getLimit(),
+            'limit' => $this->getParams()->getLimit(),
             'facet' => $this->getParams()->getFacetSettings(),
             'filter' => $this->getParams()->getFilterSettings(),
             'spell' => $this->getParams()->getSpellingQuery(),
@@ -173,7 +175,7 @@ class Results extends BaseResults
             // Make sure the suggestion is for a valid search term.
             // Sometimes shingling will have bridged two search fields (in
             // an advanced search) or skipped over a stopword.
-            if (!$this->findSearchTerm($ourTerm)) {
+            if (!$this->getParams()->findSearchTerm($ourTerm)) {
                 $validTerm = false;
             }
 
@@ -221,7 +223,7 @@ class Results extends BaseResults
         }
 
         foreach ($termList as $term) {
-            if (!$this->findSearchTerm($term['word'])) {
+            if (!$this->getParams()->findSearchTerm($term['word'])) {
                 $newList[] = $term;
             }
         }
@@ -350,7 +352,7 @@ class Results extends BaseResults
             }
             //  Do we need to show the whole, modified query?
             if ($config->Spelling->phrase) {
-                $label = $this->getDisplayQueryWithReplacedTerm(
+                $label = $this->getParams()->getDisplayQueryWithReplacedTerm(
                     $targetTerm, $replacement
                 );
             } else {
@@ -511,7 +513,7 @@ class Results extends BaseResults
      */
     public function getSimilarRecords($id)
     {
-        $solr = static::getSolrConnection($this->getSelectedShards());
+        $solr = static::getSolrConnection($this->getParams()->getSelectedShards());
         $filters = $this->getOptions()->getHiddenFilters();
         $extras = empty($filters) ? array() : array('fq' => $filters);
         $rawResponse = $solr->getMoreLikeThis($id, $extras);
@@ -568,14 +570,14 @@ class Results extends BaseResults
         $clone = clone($this);
 
         // Manipulate facet settings temporarily:
-        $clone->resetFacetConfig();
-        $clone->setFacetLimit(-1);
+        $clone->getParams()->resetFacetConfig();
+        $clone->getParams()->setFacetLimit(-1);
         foreach ($facetfields as $facetName) {
-            $clone->addFacet($facetName);
+            $clone->getParams()->addFacet($facetName);
 
             // Clear existing filters for the selected field if necessary:
             if ($removeFilter) {
-                $clone->removeAllFilters($facetName);
+                $clone->getParams()->removeAllFilters($facetName);
             }
         }
 
diff --git a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Results.php b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Results.php
index 57c44513f807188cbcc13f4ea78d5fddcd43b058..2793e10efe46142ead6f9c37312fc205163a7267 100644
--- a/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Results.php
+++ b/module/VuFind/src/VuFind/Search/SolrAuthorFacets/Results.php
@@ -52,8 +52,8 @@ class Results extends SolrResults
 
         // Collect the search parameters:
         $params = array(
-            'query' => $solr->buildQuery($this->getSearchTerms()),
-            'handler' => $this->getSearchHandler(),
+            'query' => $solr->buildQuery($this->getParams()->getSearchTerms()),
+            'handler' => $this->getParams()->getSearchHandler(),
             'limit' => 0,
             'facet' => $this->getParams()->getFacetSettings(),
         );
@@ -64,11 +64,12 @@ class Results extends SolrResults
         // Get the facets from which we will build our results:
         $facets = $this->getFacetList(array('authorStr' => null));
         if (isset($facets['authorStr'])) {
+            $params = $this->getParams();
             $this->resultTotal
-                = (($this->getPage() - 1) * $this->getLimit())
+                = (($params->getPage() - 1) * $params->getLimit())
                 + count($facets['authorStr']['list']);
             $this->results = array_slice(
-                $facets['authorStr']['list'], 0, $this->getLimit()
+                $facets['authorStr']['list'], 0, $params->getLimit()
             );
         }
     }
diff --git a/module/VuFind/src/VuFind/Search/Summon/Results.php b/module/VuFind/src/VuFind/Search/Summon/Results.php
index 2883026873d97f775d7e809f7e1d5e788c165a1d..89b374bc621c61cfd6cb512d95134318792c4e28 100644
--- a/module/VuFind/src/VuFind/Search/Summon/Results.php
+++ b/module/VuFind/src/VuFind/Search/Summon/Results.php
@@ -81,7 +81,7 @@ class Results extends BaseResults
         // Perform the actual search
         $summon = self::getSummonConnection();
         $query = new SummonQuery(
-            $summon->buildQuery($this->getSearchTerms()),
+            $summon->buildQuery($this->getParams()->getSearchTerms()),
             array(
                 'sort' => $finalSort,
                 'pageNumber' => $this->getParams()->getPage(),
diff --git a/module/VuFind/src/VuFind/Search/Tags/Results.php b/module/VuFind/src/VuFind/Search/Tags/Results.php
index bbf1918514dee9b0253b8e04a9333cade33090df..9ec276ec1b4ea2345f69054e40c565ca740ee896 100644
--- a/module/VuFind/src/VuFind/Search/Tags/Results.php
+++ b/module/VuFind/src/VuFind/Search/Tags/Results.php
@@ -49,9 +49,9 @@ class Results extends BaseResults
     protected function performSearch()
     {
         $table = new TagsTable();
-        $tag = $table->getByText($this->getDisplayQuery());
+        $tag = $table->getByText($this->getParams()->getDisplayQuery());
         if (!empty($tag)) {
-            $rawResults = $tag->getResources(null, $this->getSort());
+            $rawResults = $tag->getResources(null, $this->getParams()->getSort());
         } else {
             $rawResults = array();
         }
@@ -60,10 +60,11 @@ class Results extends BaseResults
         $this->resultTotal = count($rawResults);
 
         // Apply offset and limit if necessary!
-        $limit = $this->getLimit();
+        $limit = $this->getParams()->getLimit();
         if ($this->resultTotal > $limit) {
             $rawResults = $tag->getResources(
-                null, $this->getSort(), $this->getStartRecord() - 1, $limit
+                null, $this->getParams()->getSort(), $this->getStartRecord() - 1,
+                $limit
             );
         }
 
diff --git a/module/VuFind/src/VuFind/Search/UrlHelper.php b/module/VuFind/src/VuFind/Search/UrlHelper.php
index f0742f809d7ca00dc7e3c4907494c8d9a07f436f..ba4b44e117a25bbc60cc7ff1c7134d7855ef55ff 100644
--- a/module/VuFind/src/VuFind/Search/UrlHelper.php
+++ b/module/VuFind/src/VuFind/Search/UrlHelper.php
@@ -87,8 +87,8 @@ class UrlHelper
         $params = $this->defaultParams;
 
         // Build all the URL parameters based on search object settings:
-        if ($this->results->getSearchType() == 'advanced') {
-            $terms = $this->results->getSearchTerms();
+        if ($this->results->getParams()->getSearchType() == 'advanced') {
+            $terms = $this->results->getParams()->getSearchTerms();
             if (isset($terms[0]['join'])) {
                 $params['join'] = $terms[0]['join'];
             }
@@ -108,35 +108,37 @@ class UrlHelper
                 }
             }
         } else {
-            $search = $this->results->getDisplayQuery();
+            $search = $this->results->getParams()->getDisplayQuery();
             if (!empty($search)) {
                 $params[$this->basicSearchParam] = $search;
             }
-            $type = $this->results->getSearchHandler();
+            $type = $this->results->getParams()->getSearchHandler();
             if (!empty($type)) {
                 $params['type'] = $type;
             }
         }
-        $sort = $this->results->getSort();
-        if (!is_null($sort) && $sort != $this->results->getDefaultSort()) {
+        $sort = $this->results->getParams()->getSort();
+        if (!is_null($sort)
+            && $sort != $this->results->getParams()->getDefaultSort()
+        ) {
             $params['sort'] = $sort;
         }
-        $limit = $this->results->getLimit();
+        $limit = $this->results->getParams()->getLimit();
         if (!is_null($limit)
             && $limit != $this->results->getOptions()->getDefaultLimit()
         ) {
             $params['limit'] = $limit;
         }
-        $view = $this->results->getView();
+        $view = $this->results->getParams()->getView();
         if (!is_null($view)
             && $view != $this->results->getOptions()->getDefaultView()
         ) {
             $params['view'] = $view;
         }
-        if ($this->results->getPage() != 1) {
-            $params['page'] = $this->results->getPage();
+        if ($this->results->getParams()->getPage() != 1) {
+            $params['page'] = $this->results->getParams()->getPage();
         }
-        $filters = $this->results->getFilters();
+        $filters = $this->results->getParams()->getFilters();
         if (!empty($filters)) {
             $params['filter'] = array();
             foreach ($filters as $field => $values) {
@@ -145,7 +147,7 @@ class UrlHelper
                 }
             }
         }
-        $shards = $this->results->getSelectedShards();
+        $shards = $this->results->getParams()->getSelectedShards();
         if (!empty($shards)) {
             sort($shards);
             $key = implode(':::', $shards);
@@ -171,7 +173,7 @@ class UrlHelper
     public function replaceTerm($from, $to)
     {
         $newResults = clone($this->results);
-        $newResults->replaceSearchTerm($from, $to);
+        $newResults->getParams()->replaceSearchTerm($from, $to);
         $myClass = get_class($this);
         $helper = new $myClass($newResults);
         return $helper->getParams();
@@ -244,7 +246,7 @@ class UrlHelper
         if (isset($params['filter']) && is_array($params['filter'])) {
             foreach ($params['filter'] as $current) {
                 list($currentField, $currentValue)
-                    = $this->results->parseFilter($current);
+                    = $this->results->getParams()->parseFilter($current);
                 if ($currentField != $field || $currentValue != $value) {
                     $newFilter[] = $current;
                 }
@@ -273,7 +275,7 @@ class UrlHelper
     public function removeFilter($filter, $escape = true)
     {
         // Treat this as a special case of removeFacet:
-        list($field, $value) = $this->results->parseFilter($filter);
+        list($field, $value) = $this->results->getParams()->parseFilter($filter);
         return $this->removeFacet($field, $value, $escape);
     }
 
@@ -302,7 +304,7 @@ class UrlHelper
     public function setSort($s, $escape = true)
     {
         return $this->updateQueryString(
-            'sort', $s, $this->results->getDefaultSort(), $escape
+            'sort', $s, $this->results->getParams()->getDefaultSort(), $escape
         );
     }
 
diff --git a/module/VuFind/src/VuFind/Search/WorldCat/Results.php b/module/VuFind/src/VuFind/Search/WorldCat/Results.php
index 37b1f2d6ec98fb7e60e47c84bd7e115ff2439521..930a663fbd96a97e79c321f60b8b841fe93e5b6a 100644
--- a/module/VuFind/src/VuFind/Search/WorldCat/Results.php
+++ b/module/VuFind/src/VuFind/Search/WorldCat/Results.php
@@ -71,14 +71,14 @@ class Results extends BaseResults
         // Collect the search parameters:
         $config = ConfigReader::getConfig();
         $wc = static::getWorldCatConnection();
-        $overrideQuery = $this->getOverrideQuery();
+        $overrideQuery = $this->getParams()->getOverrideQuery();
         $query = empty($overrideQuery)
-            ? $wc->buildQuery($this->getSearchTerms()) : $overrideQuery;
+            ? $wc->buildQuery($this->getParams()->getSearchTerms()) : $overrideQuery;
 
         // Perform the search:
         $this->rawResponse  = $wc->search(
-            $query, $config->WorldCat->OCLCCode, $this->getPage(), $this->getLimit(),
-            $this->getSort()
+            $query, $config->WorldCat->OCLCCode, $this->getParams()->getPage(),
+            $this->getParams()->getLimit(), $this->getParams()->getSort()
         );
 
         // How many results were there?
diff --git a/module/VuFind/src/VuFind/Statistics/Search.php b/module/VuFind/src/VuFind/Statistics/Search.php
index d6eefca84d8c1c6e280952b6b4fafa387a81afe8..9046265fc6d839db8ffb53cadff9274cd3bb6ca3 100644
--- a/module/VuFind/src/VuFind/Statistics/Search.php
+++ b/module/VuFind/src/VuFind/Statistics/Search.php
@@ -48,11 +48,10 @@ class Search extends AbstractBase
      */
     public function log($data, $request)
     {
-        $configs = $data->getFacetConfig();
         $stat = array(
-            'phrase'       => $data->getDisplayQuery(),
-            'searchSource' => $data->getSearchClassId(),
-            'type'         => $data->getSearchHandler(),
+            'phrase'       => $data->getParams()->getDisplayQuery(),
+            'searchSource' => $data->getParams()->getSearchClassId(),
+            'type'         => $data->getParams()->getSearchHandler(),
             'resultCount'  => $data->getResultTotal(),
             'noresults'    => $data->getResultTotal() == 0
         );
diff --git a/module/VuFind/src/VuFind/Theme/Root/Helper/ResultFeed.php b/module/VuFind/src/VuFind/Theme/Root/Helper/ResultFeed.php
index f7074f14d46dac676f69c08b830b29cb7781dfc2..881672dc64d90c13e42e7a2ac4445a25ce697bf5 100644
--- a/module/VuFind/src/VuFind/Theme/Root/Helper/ResultFeed.php
+++ b/module/VuFind/src/VuFind/Theme/Root/Helper/ResultFeed.php
@@ -109,11 +109,13 @@ class ResultFeed extends AbstractHelper
         $feed = new Feed();
         $translator = $this->getTranslator();
         $feed->setTitle(
-            $translator('Results for') . ' ' . $results->getDisplayQuery()
+            $translator('Results for') . ' '
+            . $results->getParams()->getDisplayQuery()
         );
         $feed->setLink($baseUrl . $results->getUrl()->setViewParam(null, false));
         $feed->setFeedLink(
-            $baseUrl . $results->getUrl()->getParams(false), $results->getView()
+            $baseUrl . $results->getUrl()->getParams(false),
+            $results->getParams()->getView()
         );
 
         $records = $results->getResults();
diff --git a/module/VuFind/src/VuFind/Theme/Root/Helper/SortFacetList.php b/module/VuFind/src/VuFind/Theme/Root/Helper/SortFacetList.php
index 18d8b00ee2107c1e5735854ae9d96a1acb0d40f9..cc1ab1de2ca59cf4003bf9ff10215ff9a0c2efe5 100644
--- a/module/VuFind/src/VuFind/Theme/Root/Helper/SortFacetList.php
+++ b/module/VuFind/src/VuFind/Theme/Root/Helper/SortFacetList.php
@@ -56,7 +56,7 @@ class SortFacetList extends AbstractHelper
     {
         $facets = array();
         // avoid limit on URL
-        $results->setLimit($results->getOptions()->getDefaultLimit());
+        $results->getParams()->setLimit($results->getOptions()->getDefaultLimit());
         $urlHelper = $this->getView()->plugin('url');
         foreach ($list as $value) {
             $url = $urlHelper($searchRoute)
diff --git a/themes/blueprint/templates/Recommend/AuthorityRecommend.phtml b/themes/blueprint/templates/Recommend/AuthorityRecommend.phtml
index 6697ae2ee40390b194014a0701bc08ec00b019e2..4b56a3ab4668ca00bc2967881cfeb5c25c20591c 100644
--- a/themes/blueprint/templates/Recommend/AuthorityRecommend.phtml
+++ b/themes/blueprint/templates/Recommend/AuthorityRecommend.phtml
@@ -6,7 +6,7 @@
         <?
             // Generate a new search URL that replaces the user's current term with the authority term:
             $url = $this->url($this->results->getOptions()->getSearchAction())
-                . $this->results->getUrl()->replaceTerm($this->results->getDisplayQuery(), $data[$i]['heading']);
+                . $this->results->getUrl()->replaceTerm($this->results->getParams()->getDisplayQuery(), $data[$i]['heading']);
         ?>
         <a href="<?=$url?>"><?=$this->escapeHtml($data[$i]['heading'])?></a><? if ($i != count($data) - 1): ?>, <? endif; ?>
       <? endfor; ?>
diff --git a/themes/blueprint/templates/Recommend/FavoriteFacets.phtml b/themes/blueprint/templates/Recommend/FavoriteFacets.phtml
index fe16419465fe2ad67325160d4d114744a2cebbc1..f2454e52e13666249df27137e2817e53a9e9e3a0 100644
--- a/themes/blueprint/templates/Recommend/FavoriteFacets.phtml
+++ b/themes/blueprint/templates/Recommend/FavoriteFacets.phtml
@@ -22,7 +22,7 @@
   <? if (isset($sideFacetSet['tags']) && !empty($sideFacetSet['tags']['list'])): ?>
     <div class="sidegroup">
       <h4 class="tag"><?=$this->transEsc($sideFacetSet['tags']['label'])?></h4>
-      <? $filterList = $this->results->getFilterList(true);
+      <? $filterList = $this->results->getParams()->getFilterList(true);
          $tagFilterList = isset($filterList[$sideFacetSet['tags']['label']]) ? $filterList[$sideFacetSet['tags']['label']] : null;
          if (!empty($tagFilterList)): ?>
         <strong><?=$this->transEsc('Remove Filters')?></strong>
diff --git a/themes/blueprint/templates/Recommend/SideFacets.phtml b/themes/blueprint/templates/Recommend/SideFacets.phtml
index 58f3bb660410db859053f483b2d5297af598e86c..68615198c0af96502331f42bafd81c8d2cde4759 100644
--- a/themes/blueprint/templates/Recommend/SideFacets.phtml
+++ b/themes/blueprint/templates/Recommend/SideFacets.phtml
@@ -1,6 +1,6 @@
 <div class="sidegroup">
   <? if ($this->results->getResultTotal() > 0): ?><h4><?=$this->transEsc('Narrow Search')?></h4><? endif; ?>
-  <? $checkboxFilters = $this->results->getCheckboxFacets(); if (count($checkboxFilters) > 0): ?>
+  <? $checkboxFilters = $this->results->getParams()->getCheckboxFacets(); if (count($checkboxFilters) > 0): ?>
     <? foreach ($checkboxFilters as $current): ?>
         <div class="checkboxFilter<?=($this->results->getResultTotal() < 1 && !$current['selected'] && !$current['alwaysVisible']) ? ' hide' : ''?>">
           <input type="checkbox" name="filter[]" value="<?=$this->escapeHtml($current['filter'])?>"
@@ -10,7 +10,7 @@
         </div>
     <? endforeach; ?>
   <? endif; ?>
-  <? $filterList = $this->results->getFilterList(true); if (!empty($filterList)): ?>
+  <? $filterList = $this->results->getParams()->getFilterList(true); if (!empty($filterList)): ?>
     <strong><?=$this->transEsc('Remove Filters')?></strong>
     <ul class="filters">
     <? foreach ($filterList as $field => $filters): ?>
diff --git a/themes/blueprint/templates/author/results.phtml b/themes/blueprint/templates/author/results.phtml
index 76f90ba9081fcdc838fc932e9103eb5898332b94..f3f1b4ce64b5ddd15fd84def74a9deafab279f39 100644
--- a/themes/blueprint/templates/author/results.phtml
+++ b/themes/blueprint/templates/author/results.phtml
@@ -11,5 +11,5 @@
     $this->layout()->searchbox = $this->render('search/searchbox.phtml');
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<em>' . $this->results->getDisplayQuery() . '</em>';
+    $this->layout()->breadcrumbs = '<em>' . $this->results->getParams()->getDisplayQuery() . '</em>';
 ?>
\ No newline at end of file
diff --git a/themes/blueprint/templates/author/search.phtml b/themes/blueprint/templates/author/search.phtml
index c01aedc492bb45847e6fc09c58bcca43ba2b8ae4..53883d4c7d5c6d83c79b6598950cf380aa3f57c1 100644
--- a/themes/blueprint/templates/author/search.phtml
+++ b/themes/blueprint/templates/author/search.phtml
@@ -19,5 +19,5 @@
     $this->layout()->searchbox = $this->render('search/searchbox.phtml');
 
     // Set up breadcrumbs:
-    $this->layout()->breadcrumbs = '<em>' . $this->translate('Author Results for') . ' ' . $this->results->getDisplayQuery() . '</em>';
+    $this->layout()->breadcrumbs = '<em>' . $this->translate('Author Results for') . ' ' . $this->results->getParams()->getDisplayQuery() . '</em>';
 ?>
\ No newline at end of file
diff --git a/themes/blueprint/templates/search/advanced/layout.phtml b/themes/blueprint/templates/search/advanced/layout.phtml
index 413e2aa33745c83ce8a56f23f6492b93aceb6931..e93548131066a5a61f15a09330d0fbd28fe5b11f 100644
--- a/themes/blueprint/templates/search/advanced/layout.phtml
+++ b/themes/blueprint/templates/search/advanced/layout.phtml
@@ -10,8 +10,8 @@
 
     // Set up saved search details:
     if (isset($this->saved) && is_object($this->saved)) {
-        $searchDetails = $this->saved->getSearchTerms();
-        $searchFilters = $this->saved->getFilterList();
+        $searchDetails = $this->saved->getParams()->getSearchTerms();
+        $searchFilters = $this->saved->getParams()->getFilterList();
     } else {
         $searchDetails = $searchFilters = false;
     }
diff --git a/themes/blueprint/templates/search/controls/limit.phtml b/themes/blueprint/templates/search/controls/limit.phtml
index 7a16a772fcdf959c59280e6a341738c7137a6e93..8a7418eba47664d6a6cf4eb03a5e8fa2577fd4a7 100644
--- a/themes/blueprint/templates/search/controls/limit.phtml
+++ b/themes/blueprint/templates/search/controls/limit.phtml
@@ -1,5 +1,5 @@
 <div class="limitSelect">
-  <? $limitList = $this->results->getLimitList(); if (count($limitList) > 1): ?>
+  <? $limitList = $this->results->getParams()->getLimitList(); if (count($limitList) > 1): ?>
     <form action="<?=$this->currentPath() . $this->results->getUrl()->setLimit(null)?>" method="post">
       <label for="limit"><?=$this->transEsc('Results per page')?></label>
       <select id="limit" name="limit" class="jumpMenu">
diff --git a/themes/blueprint/templates/search/controls/sort.phtml b/themes/blueprint/templates/search/controls/sort.phtml
index bee9ce176c8c84f6a94c4c5f6e1a51d77971dcdd..471969b10a0513ce6ffcd63afae68a06962ec80b 100644
--- a/themes/blueprint/templates/search/controls/sort.phtml
+++ b/themes/blueprint/templates/search/controls/sort.phtml
@@ -1,8 +1,8 @@
-<? $list = $this->results->getSortList(); if (!empty($list)): ?>
+<? $list = $this->results->getParams()->getSortList(); if (!empty($list)): ?>
   <form action="<?=$this->currentPath() . $this->results->getUrl()->setSort(null)?>" method="post">
     <label for="sort_options_1"><?=$this->transEsc('Sort')?></label>
     <select id="sort_options_1" name="sort" class="jumpMenu">
-      <? foreach ($this->results->getSortList() as $sortType => $sortData): ?>
+      <? foreach ($this->results->getParams()->getSortList() as $sortType => $sortData): ?>
         <option value="<?=$this->escapeHtml($sortType)?>"<?=$sortData['selected']?' selected="selected"':''?>><?=$this->transEsc($sortData['desc'])?></option>
       <? endforeach; ?>
     </select>
diff --git a/themes/blueprint/templates/search/controls/view.phtml b/themes/blueprint/templates/search/controls/view.phtml
index 29dc467d018f6c3518e305c0a344aae485840dd6..748df8496e4e33467503ac62b91f12601fa1c3c1 100644
--- a/themes/blueprint/templates/search/controls/view.phtml
+++ b/themes/blueprint/templates/search/controls/view.phtml
@@ -1,5 +1,5 @@
 <div class="viewButtons">
-<? $viewList = $this->results->getViewList(); if (count($viewList) > 1): ?>
+<? $viewList = $this->results->getParams()->getViewList(); if (count($viewList) > 1): ?>
   <? foreach ($viewList as $viewType => $viewData): ?>
     <? if (!$viewData['selected']): ?>
       <a href="<?=$this->results->getUrl()->setViewParam($viewType)?>" title="<?=$this->transEsc('Switch view to')?> <?=$this->transEsc($viewData['desc'])?>" >
diff --git a/themes/blueprint/templates/search/history-table.phtml b/themes/blueprint/templates/search/history-table.phtml
index 9bd65130976cc702518fec5e1878ff19ad90586b..fe1efc8463396cbfb68df375773c1062155cb6e9 100644
--- a/themes/blueprint/templates/search/history-table.phtml
+++ b/themes/blueprint/templates/search/history-table.phtml
@@ -11,12 +11,12 @@
       <td><?=$this->escapeHtml(date("g:ia, jS M y", $info->getStartTime()))?></td>
       <td>
         <a href="<?=$this->url($info->getOptions()->getSearchAction()) . $info->getUrl()->getParams()?>"><?
-          $desc = $info->getDisplayQuery();
+          $desc = $info->getParams()->getDisplayQuery();
           echo empty($desc) ? $this->transEsc("history_empty_search") : $this->escapeHtml($desc);
         ?></a>
       </td>
       <td>
-        <? $info->activateAllFacets(); foreach ($info->getFilterList() as $field => $filters): ?>
+        <? $info->getParams()->activateAllFacets(); foreach ($info->getParams()->getFilterList() as $field => $filters): ?>
           <? foreach ($filters as $filter): ?>
             <strong><?=$this->transEsc($field)?></strong>: <?=$this->escapeHtml($filter['displayText'])?><br/>
           <? endforeach; ?>
diff --git a/themes/blueprint/templates/search/reservessearch.phtml b/themes/blueprint/templates/search/reservessearch.phtml
index 864291f9448366998f8a065372bf3867f7f7bc5b..3d82dcca64f6cce3cebd67db871e14ce0a5a8743 100644
--- a/themes/blueprint/templates/search/reservessearch.phtml
+++ b/themes/blueprint/templates/search/reservessearch.phtml
@@ -6,7 +6,7 @@
     $this->layout()->breadcrumbs = '<em>' . $this->transEsc('Reserves') . '</em>';
 
     // Convenience variables:
-    $reservesLookfor = $this->results->getDisplayQuery();
+    $reservesLookfor = $this->results->getParams()->getDisplayQuery();
 ?>
 
 <div class="<?=$this->layoutClass('mainbody')?>">
diff --git a/themes/blueprint/templates/search/results.phtml b/themes/blueprint/templates/search/results.phtml
index 2a686805a964b758bcb5996efa93b055741db865..b1fb418397dcf345ed3ed33ab75d42e99dd4150e 100644
--- a/themes/blueprint/templates/search/results.phtml
+++ b/themes/blueprint/templates/search/results.phtml
@@ -1,6 +1,6 @@
 <?
     // Set up page title:
-    $lookfor = $this->results->getDisplayQuery();
+    $lookfor = $this->results->getParams()->getDisplayQuery();
     if (isset($this->overrideTitle)) {
         $this->headTitle($this->overrideTitle);
     } else {
@@ -12,13 +12,13 @@
         'search/searchbox.phtml',
         array(
             'lookfor' => $lookfor,
-            'searchIndex' => $this->results->getSearchHandler(),
-            'searchType' => $this->results->getSearchType(),
+            'searchIndex' => $this->results->getParams()->getSearchHandler(),
+            'searchType' => $this->results->getParams()->getSearchType(),
             'searchId' => $this->results->getSearchId(),
-            'searchClassId' => $this->results->getsearchClassId(),
-            'checkboxFilters' => $this->results->getCheckboxFacets(),
-            'filterList' => $this->results->getFilters(),
-            'selectedShards' => $this->results->getSelectedShards()
+            'searchClassId' => $this->results->getParams()->getsearchClassId(),
+            'checkboxFilters' => $this->results->getParams()->getCheckboxFacets(),
+            'filterList' => $this->results->getParams()->getFilters(),
+            'selectedShards' => $this->results->getParams()->getSelectedShards()
         )
     );
 
@@ -51,7 +51,7 @@
         <? endif; ?>
         <? if (isset($this->overrideSearchHeading)): ?>
           <?=$this->overrideSearchHeading?>
-        <? elseif ($this->results->getSearchType() == 'basic'): ?>
+        <? elseif ($this->results->getParams()->getSearchType() == 'basic'): ?>
           <?=$this->transEsc('for search')?>: <strong>'<?=$this->escapeHtml($lookfor)?>'</strong>,
         <? endif; ?>
         <? if ($qtime = $this->results->getQuerySpeed()): ?>
@@ -95,7 +95,7 @@
   <? else: ?>
     <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->render('search/list-' . $this->results->getParams()->getView() . '.phtml')?>
       <?=$this->context($this)->renderInContext('search/bulk-action-buttons.phtml', array('idPrefix' => 'bottom_'))?>
       <?=$this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', array('results' => $this->results))?>
     </form>
diff --git a/themes/jquerymobile/templates/Recommend/SideFacets.phtml b/themes/jquerymobile/templates/Recommend/SideFacets.phtml
index 495dc509925f364375cc6771f5129c71f1252b9e..cfbf2037e29a42241f18fcc098e77aa35314e7cb 100644
--- a/themes/jquerymobile/templates/Recommend/SideFacets.phtml
+++ b/themes/jquerymobile/templates/Recommend/SideFacets.phtml
@@ -1,4 +1,4 @@
-<? $filterList = $this->results->getFilterList(true); if (!empty($filterList)): ?>
+<? $filterList = $this->results->getParams()->getFilterList(true); if (!empty($filterList)): ?>
   <ul class="filters" data-role="listview" data-inset="true" data-dividertheme="e">
     <li data-role="list-divider"><?=$this->transEsc('adv_search_filters')?></li>
     <? $i = 0; foreach ($filterList as $field => $filters): ?>
diff --git a/themes/jquerymobile/templates/search/history-table.phtml b/themes/jquerymobile/templates/search/history-table.phtml
index 1a58c6db14a43dc426de65408c49a2745aa79392..f87013965ff774de34fe70f784bb641b39359839 100644
--- a/themes/jquerymobile/templates/search/history-table.phtml
+++ b/themes/jquerymobile/templates/search/history-table.phtml
@@ -3,12 +3,12 @@
     <a rel="external" href="<?=$this->url($info->getOptions()->getSearchAction()) . $info->getUrl()->getParams()?>">
     <div class="result">
     <h3><?
-      $desc = $info->getDisplayQuery();
+      $desc = $info->getParams()->getDisplayQuery();
       echo empty($desc) ? $this->transEsc("history_empty_search") : $this->escapeHtml($desc);
     ?></h3>
     <span class="ui-li-count"><?=$this->escapeHtml(number_format($info->getResultTotal()))?></span>
     <p><strong><?=$this->transEsc("history_time")?></strong>: <?=$this->escapeHtml(date("g:ia, jS M y", $info->getStartTime()))?></p>
-    <? $info->activateAllFacets(); foreach ($info->getFilterList() as $field => $filters): ?>
+    <? $info->getParams()->activateAllFacets(); foreach ($info->getParams()->getFilterList() as $field => $filters): ?>
       <? foreach ($filters as $filter): ?>
         <p><strong><?=$this->transEsc($field)?></strong>: <?=$this->escapeHtml($filter['displayText'])?></p>
       <? endforeach; ?>
diff --git a/themes/jquerymobile/templates/search/reservessearch.phtml b/themes/jquerymobile/templates/search/reservessearch.phtml
index d6852988beb7245f12a9710fa77d135891ac69db..07b619c201ac92d9e8358ec5fec9159476be7f1e 100644
--- a/themes/jquerymobile/templates/search/reservessearch.phtml
+++ b/themes/jquerymobile/templates/search/reservessearch.phtml
@@ -3,7 +3,7 @@
     $this->headTitle($this->translate('Reserves Search'));
 
     // Convenience variables:
-    $reservesLookfor = $this->results->getDisplayQuery();
+    $reservesLookfor = $this->results->getParams()->getDisplayQuery();
 ?>
 
 <div data-role="page">
diff --git a/themes/jquerymobile/templates/search/results.phtml b/themes/jquerymobile/templates/search/results.phtml
index deade07738b2e15391bc5784e55ceac3325ea040..7a5dc4511683dbc5c687d15068a68d0b6bbd5cc7 100644
--- a/themes/jquerymobile/templates/search/results.phtml
+++ b/themes/jquerymobile/templates/search/results.phtml
@@ -1,6 +1,6 @@
 <?
     // Set up page title:
-    $lookfor = $this->results->getDisplayQuery();
+    $lookfor = $this->results->getParams()->getDisplayQuery();
     if (isset($this->overrideTitle)) {
         $this->headTitle($this->overrideTitle);
     } else {
@@ -23,7 +23,7 @@
         <? endif; ?>
         <? if (isset($this->overrideSearchHeading)): ?>
           <?=$this->overrideSearchHeading?>
-        <? elseif ($this->results->getSearchType() == 'basic'): ?>
+        <? elseif ($this->results->getParams()->getSearchType() == 'basic'): ?>
           <?=$this->transEsc('for search')?>: <strong>'<?=$this->escapeHtml($lookfor)?>'</strong>
         <? endif; ?>
       </p>
@@ -48,7 +48,7 @@
         <?=$this->recommend($current)?>
       <? endforeach; ?>
     <? else: ?>
-      <?=$this->render('search/list-' . $this->results->getView() . '.phtml')?>
+      <?=$this->render('search/list-' . $this->results->getParams()->getView() . '.phtml')?>
       <?=$this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', array('results' => $this->results))?>
       <div data-role="controlgroup">
         <a href="<?=$this->url('search-email')?>" data-role="button" rel="external"><?=$this->transEsc("Email this Search")?></a>