diff --git a/config/vufind/Demo.ini b/config/vufind/Demo.ini
index e3f4727c3a7e5f347383a1dd8c3eba4a0da6c8be..cf0ff761fc8c655d4b1528285049f5206b59ecf3 100644
--- a/config/vufind/Demo.ini
+++ b/config/vufind/Demo.ini
@@ -9,3 +9,11 @@ storageRetrievalRequests = true
 
 ; Whether to support ILL requests
 ILLRequests = true
+
+; Configuration for retrieving sample records
+[Records]
+; Search backend to pull records from
+source = Solr
+
+; Query to use for record retrieval
+query = "*:*"
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php
index 2eafcbea7a8015c258fd0f1275de6464bf1c8466..19dc3f8390d7c87e76abcde4ac4452dc7433f1ac 100644
--- a/module/VuFind/src/VuFind/Controller/MyResearchController.php
+++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php
@@ -824,8 +824,9 @@ class MyResearchController extends AbstractBase
     protected function getDriverForILSRecord($current)
     {
         $id = isset($current['id']) ? $current['id'] : null;
+        $source = isset($current['source']) ? $current['source'] : 'VuFind';
         $record = $this->getServiceLocator()->get('VuFind\RecordLoader')
-            ->load($id, 'VuFind', true);
+            ->load($id, $source, true);
         $record->setExtraDetail('ils_details', $current);
         return $record;
     }
@@ -1089,9 +1090,10 @@ class MyResearchController extends AbstractBase
                 if (!isset($row['id']) || empty($row['id'])) {
                     throw new \Exception();
                 }
-                $record = $this->getServiceLocator()->get('VuFind\RecordLoader')
-                    ->load($row['id']);
-                $row['title'] = $record->getShortTitle();
+                $source = isset($row['source']) ? $row['source'] : 'VuFind';
+                $row['driver'] = $this->getServiceLocator()->get('VuFind\RecordLoader')
+                    ->load($row['id'], $source);
+                $row['title'] = $row['driver']->getShortTitle();
             } catch (\Exception $e) {
                 if (!isset($row['title'])) {
                     $row['title'] = null;
diff --git a/module/VuFind/src/VuFind/ILS/Driver/Demo.php b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
index c9dddb70ae7a891d93c4c6842d48f00ad60beca1..c730b20cd5fb18daf526c1599c4c65bb72bb02ae 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/Demo.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/Demo.php
@@ -195,13 +195,27 @@ class Demo extends AbstractBase
      */
     protected function getRandomBibId()
     {
-        $result = $this->searchService->random('Solr', new Query(''), 1);
+        $source = $this->getRecordSource();
+        $query = isset($this->config['Records']['query'])
+            ? $this->config['Records']['query'] : '*:*';
+        $result = $this->searchService->random($source, new Query($query), 1);
         if (count($result) === 0) {
-            throw new \Exception('Problem retrieving random record.');
+            throw new \Exception('Problem retrieving random record from $source.');
         }
         return current($result->getRecords())->getUniqueId();
     }
 
+    /**
+     * Get the name of the search backend providing records.
+     *
+     * @return string
+     */
+    protected function getRecordSource()
+    {
+        return isset($this->config['Records']['source'])
+            ? $this->config['Records']['source'] : 'Solr';
+    }
+
     /**
      * Generates a random, fake holding array
      *
@@ -297,6 +311,7 @@ class Demo extends AbstractBase
             } else {
                 if ($this->idsInMyResearch) {
                     $currentItem['id'] = $this->getRandomBibId();
+                    $currentItem['source'] = $this->getRecordSource();
                 } else {
                     $currentItem['title'] = 'Demo Title ' . $i;
                 }
@@ -635,6 +650,7 @@ class Demo extends AbstractBase
                 if (rand() % 3 != 1) {
                     if ($this->idsInMyResearch) {
                         $fineList[$i]['id'] = $this->getRandomBibId();
+                        $fineList[$i]['source'] = $this->getRecordSource();
                     } else {
                         $fineList[$i]['title'] = 'Demo Title ' . $i;
                     }
@@ -782,6 +798,7 @@ class Demo extends AbstractBase
                     );
                     if ($this->idsInMyResearch) {
                         $transList[$i]['id'] = $this->getRandomBibId();
+                        $transList[$i]['source'] = $this->getRecordSource();
                     } else {
                         $transList[$i]['title'] = 'Demo Title ' . $i;
                     }
diff --git a/themes/blueprint/templates/myresearch/fines.phtml b/themes/blueprint/templates/myresearch/fines.phtml
index 292ca8450e5d6c9255c9718920453cf033ccd30a..42d50c89c10776774dd3f719bed4623c51ae6a0b 100644
--- a/themes/blueprint/templates/myresearch/fines.phtml
+++ b/themes/blueprint/templates/myresearch/fines.phtml
@@ -26,10 +26,10 @@
         <td>
           <? if (empty($record['title'])): ?>
             <?=$this->transEsc('not_applicable')?>
-          <? elseif (!isset($record['id'])): ?>
+          <? elseif (!is_object($record['driver'])): ?>
             <?=$this->escapeHtml(trim($record['title'], '/:'))?>
           <? else: ?>
-            <a href="<?=$this->url('record', array('id' => $record['id']))?>"><?=$this->escapeHtml(trim($record['title'], '/:'))?></a>
+            <a href="<?=$this->recordLink()->getUrl($record['driver'])?>"><?=$this->escapeHtml(trim($record['title'], '/:'))?></a>
           <? endif; ?>
         </td>
         <td><?=isset($record['checkout']) ? $this->escapeHtml($record['checkout']) : ''?></td>
diff --git a/themes/bootstrap3/templates/myresearch/fines.phtml b/themes/bootstrap3/templates/myresearch/fines.phtml
index abe05d2a4db7dbb83d02dd9cdc8e7402f62f0224..1499521e2a58be81453d15246bf0ef0a438639c5 100644
--- a/themes/bootstrap3/templates/myresearch/fines.phtml
+++ b/themes/bootstrap3/templates/myresearch/fines.phtml
@@ -25,10 +25,10 @@
         <td>
           <? if (empty($record['title'])): ?>
             <?=$this->transEsc('not_applicable')?>
-          <? elseif (!isset($record['id'])): ?>
+          <? elseif (!is_object($record['driver'])): ?>
             <?=$this->escapeHtml(trim($record['title'], '/:'))?>
           <? else: ?>
-            <a href="<?=$this->url('record', array('id' => $record['id']))?>"><?=$this->escapeHtml(trim($record['title'], '/:'))?></a>
+            <a href="<?=$this->recordLink()->getUrl($record['driver'])?>"><?=$this->escapeHtml(trim($record['title'], '/:'))?></a>
           <? endif; ?>
         </td>
         <td><?=isset($record['checkout']) ? $this->escapeHtml($record['checkout']) : ''?></td>
diff --git a/themes/jquerymobile/templates/myresearch/fines.phtml b/themes/jquerymobile/templates/myresearch/fines.phtml
index 6fbb84c518a22e9fa19429c6babad756dbe72d3b..fb4f7200a9f1e14b9c588d27fc07c1dc7ff04d89 100644
--- a/themes/jquerymobile/templates/myresearch/fines.phtml
+++ b/themes/jquerymobile/templates/myresearch/fines.phtml
@@ -12,8 +12,8 @@
       <ul class="results fines" data-role="listview">
         <? foreach ($this->fines as $record): ?>
           <li>
-            <? if ($showLink = (!empty($record['title']) && isset($record['id']))): ?>
-              <a rel="external" href="<?=$this->url('record', array('id' => $record['id']))?>">
+            <? if ($showLink = (!empty($record['title']) && is_object($record['driver']))): ?>
+              <a rel="external" href="<?=$this->recordLink()->getUrl($record['driver'])?>">
             <? endif; ?>
             <div class="result">
               <h3>