From 6ae799e172c90ffe166839e59b6df8e4a34dd834 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Wed, 6 Jan 2016 09:32:08 -0500
Subject: [PATCH] Eliminate 'VuFind' source in database. - Introduce
 DEFAULT_SEARCH_BACKEND constant. - Deprecate now-redundant
 getResourceSource() record driver method. - Implement upgrade functionality
 to adjust database. - Resolves VUFIND-1139.

---
 module/VuFind/config/module.config.php        |  5 ++-
 .../pgsql/3.0/002-modify-resource-columns.sql |  6 +++
 module/VuFind/sql/mysql.sql                   |  2 +-
 module/VuFind/sql/pgsql.sql                   |  2 +-
 module/VuFind/src/VuFind/Cart.php             |  4 +-
 .../src/VuFind/Controller/AbstractRecord.php  |  4 +-
 .../Controller/Plugin/ResultScroller.php      |  5 ++-
 .../VuFind/Controller/UpgradeController.php   | 34 +++++++++++++++
 module/VuFind/src/VuFind/Record/Router.php    |  2 +-
 .../src/VuFind/RecordDriver/AbstractBase.php  | 24 +++++------
 .../src/VuFind/RecordDriver/Missing.php       |  2 +-
 .../src/VuFind/Related/WorldCatSimilar.php    |  2 +-
 .../VuFind/src/VuFind/Statistics/Record.php   |  2 +-
 .../src/VuFind/View/Helper/Root/Record.php    |  4 +-
 .../VuFind/src/VuFindTest/Unit/TestCase.php   |  3 --
 module/VuFind/tests/bootstrap.php             |  2 +-
 .../src/VuFindTest/Mink/CartTest.php          |  2 +-
 .../unit-tests/src/VuFindTest/CartTest.php    | 42 +++++++++----------
 .../Controller/Plugin/ResultScrollerTest.php  | 12 +++---
 .../src/VuFindTest/Record/LoaderTest.php      | 24 +++++------
 .../src/VuFindTest/Record/RouterTest.php      |  6 +--
 .../Related/WorldCatSimilarTest.php           |  4 +-
 .../View/Helper/Root/RecordTest.php           |  4 +-
 public/index.php                              |  2 +-
 .../RecordDriver/EDS/result-list.phtml        |  2 +-
 .../RecordDriver/Pazpar2/result-list.phtml    |  4 +-
 .../RecordDriver/SolrDefault/core.phtml       |  7 +++-
 .../RecordDriver/SolrDefault/list-entry.phtml |  2 +-
 .../SolrDefault/result-list.phtml             |  5 ++-
 .../RecordDriver/SolrDefault/toolbar.phtml    |  2 +-
 .../templates/RecordTab/usercomments.phtml    |  2 +-
 themes/bootstrap3/templates/cart/email.phtml  |  2 +-
 themes/bootstrap3/templates/cart/export.phtml |  2 +-
 themes/bootstrap3/templates/cart/save.phtml   |  4 +-
 .../templates/collection/view.phtml           |  2 +-
 .../templates/myresearch/edit.phtml           |  2 +-
 .../bootstrap3/templates/record/addtag.phtml  |  2 +-
 .../bootstrap3/templates/record/email.phtml   |  2 +-
 themes/bootstrap3/templates/record/save.phtml |  4 +-
 themes/bootstrap3/templates/record/sms.phtml  |  2 +-
 themes/bootstrap3/templates/record/view.phtml |  4 +-
 .../RecordDriver/EDS/result-list.phtml        |  2 +-
 .../RecordDriver/Pazpar2/result-list.phtml    |  2 +-
 .../RecordDriver/SolrDefault/core.phtml       |  7 +++-
 .../RecordDriver/SolrDefault/list-entry.phtml |  4 +-
 .../SolrDefault/result-list.phtml             |  2 +-
 .../templates/RecordTab/usercomments.phtml    |  2 +-
 .../templates/record/addtag.phtml             |  2 +-
 .../jquerymobile/templates/record/email.phtml |  2 +-
 .../jquerymobile/templates/record/save.phtml  |  4 +-
 .../jquerymobile/templates/record/sms.phtml   |  2 +-
 .../AbstractBase/export-bibtex.phtml          |  2 +-
 52 files changed, 163 insertions(+), 117 deletions(-)
 create mode 100644 module/VuFind/sql/migrations/pgsql/3.0/002-modify-resource-columns.sql

diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php
index 9081341123c..c886db146b3 100644
--- a/module/VuFind/config/module.config.php
+++ b/module/VuFind/config/module.config.php
@@ -717,7 +717,10 @@ $recordRoutes = [
     'primorecord' => 'PrimoRecord',
     'solrauthrecord' => 'Authority',
     'summonrecord' => 'SummonRecord',
-    'worldcatrecord' => 'WorldcatRecord'
+    'worldcatrecord' => 'WorldcatRecord',
+
+    // For legacy (1.x/2.x) compatibility:
+    'vufindrecord' => 'Record',
 ];
 
 // Define dynamic routes -- controller => [route name => action]
diff --git a/module/VuFind/sql/migrations/pgsql/3.0/002-modify-resource-columns.sql b/module/VuFind/sql/migrations/pgsql/3.0/002-modify-resource-columns.sql
new file mode 100644
index 00000000000..e855534e71b
--- /dev/null
+++ b/module/VuFind/sql/migrations/pgsql/3.0/002-modify-resource-columns.sql
@@ -0,0 +1,6 @@
+-- 
+-- Modifications to table `resource`
+--
+
+ALTER TABLE "resource"
+  ALTER COLUMN source SET DEFAULT 'Solr';
diff --git a/module/VuFind/sql/mysql.sql b/module/VuFind/sql/mysql.sql
index cac64f0d310..cd70b26ab28 100644
--- a/module/VuFind/sql/mysql.sql
+++ b/module/VuFind/sql/mysql.sql
@@ -73,7 +73,7 @@ CREATE TABLE `resource` (
   `title` varchar(200) NOT NULL DEFAULT '',
   `author` varchar(200) DEFAULT NULL,
   `year` mediumint(6) DEFAULT NULL,
-  `source` varchar(50) NOT NULL DEFAULT 'VuFind',
+  `source` varchar(50) NOT NULL DEFAULT 'Solr',
   PRIMARY KEY (`id`),
   KEY `record_id` (`record_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/module/VuFind/sql/pgsql.sql b/module/VuFind/sql/pgsql.sql
index ed0f8ff92d8..7ec297c3fa6 100644
--- a/module/VuFind/sql/pgsql.sql
+++ b/module/VuFind/sql/pgsql.sql
@@ -28,7 +28,7 @@ record_id varchar(120) NOT NULL DEFAULT '',
 title varchar(200) NOT NULL DEFAULT '',
 author varchar(200) DEFAULT NULL,
 year int DEFAULT NULL,
-source varchar(50) NOT NULL DEFAULT 'VuFind',
+source varchar(50) NOT NULL DEFAULT 'Solr',
 PRIMARY KEY (id)
 );
 CREATE INDEX resource_record_id_idx ON resource (record_id);
diff --git a/module/VuFind/src/VuFind/Cart.php b/module/VuFind/src/VuFind/Cart.php
index b4234148de0..2f44474171d 100644
--- a/module/VuFind/src/VuFind/Cart.php
+++ b/module/VuFind/src/VuFind/Cart.php
@@ -244,9 +244,9 @@ class Cart
 
             if (!isset($cookies[self::CART_COOKIE_SOURCES])) {
                 // Backward compatibility with VuFind 1.x -- if no source cookie, all
-                // items come from the VuFind source:
+                // items come from the default source:
                 for ($i = 0; $i < count($items); $i++) {
-                    $items[$i] = 'VuFind|' . $items[$i];
+                    $items[$i] = DEFAULT_SEARCH_BACKEND . '|' . $items[$i];
                 }
             } else {
                 // Default case for VuFind 2.x carts -- decompress source data:
diff --git a/module/VuFind/src/VuFind/Controller/AbstractRecord.php b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
index 76db4a19067..834764f1c42 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractRecord.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
@@ -128,7 +128,7 @@ class AbstractRecord extends AbstractBase
         if (!empty($comment)) {
             $table = $this->getTable('Resource');
             $resource = $table->findResource(
-                $driver->getUniqueId(), $driver->getResourceSource(), true, $driver
+                $driver->getUniqueId(), $driver->getSourceIdentifier(), true, $driver
             );
             $resource->addComment($comment, $user);
             $this->flashMessenger()->addMessage('add_comment_success', 'success');
@@ -344,7 +344,7 @@ class AbstractRecord extends AbstractBase
         // Find out if the item is already part of any lists; save list info/IDs
         $listIds = [];
         $resources = $user->getSavedData(
-            $driver->getUniqueId(), null, $driver->getResourceSource()
+            $driver->getUniqueId(), null, $driver->getSourceIdentifier()
         );
         foreach ($resources as $userResource) {
             $listIds[] = $userResource->list_id;
diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
index c0cb13990fd..bb25ee57817 100644
--- a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
+++ b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php
@@ -322,7 +322,7 @@ class ResultScroller extends AbstractPlugin
                 = isset($this->data->total) ? $this->data->total : 0;
 
             // build a full ID string using the driver:
-            $id = $driver->getResourceSource() . '|' . $driver->getUniqueId();
+            $id = $driver->getSourceIdentifier() . '|' . $driver->getUniqueId();
 
             // find where this record is in the current result page
             $pos = is_array($this->data->currIds)
@@ -396,7 +396,8 @@ class ResultScroller extends AbstractPlugin
             if (!($record instanceof \VuFind\RecordDriver\AbstractBase)) {
                 return false;
             }
-            $retVal[] = $record->getResourceSource() . '|' . $record->getUniqueId();
+            $retVal[]
+                = $record->getSourceIdentifier() . '|' . $record->getUniqueId();
         }
         return $retVal;
     }
diff --git a/module/VuFind/src/VuFind/Controller/UpgradeController.php b/module/VuFind/src/VuFind/Controller/UpgradeController.php
index 73ac35a77a6..c296f0e578c 100644
--- a/module/VuFind/src/VuFind/Controller/UpgradeController.php
+++ b/module/VuFind/src/VuFind/Controller/UpgradeController.php
@@ -260,6 +260,37 @@ class UpgradeController extends AbstractBase
         }
     }
 
+    /**
+     * Support method for fixdatabaseAction() -- clean up legacy 'VuFind'
+     * source values in the database.
+     *
+     * @return void
+     */
+    protected function fixVuFindSourceInDatabase()
+    {
+        $resource = $this->getTable('resource');
+        $resourceWhere = ['source' => 'VuFind'];
+        $resourceRows = $resource->select($resourceWhere);
+        if (count($resourceRows) > 0) {
+            $resource->update(['source' => 'Solr'], $resourceWhere);
+            $this->session->warnings->append(
+                'Converted ' . count($resourceRows)
+                . ' legacy "VuFind" source value(s) in resource table'
+            );
+        }
+
+        $userStatsFields = $this->getTable('userstatsfields');
+        $usfWhere = ['field' => 'recordSource', 'value' => 'VuFind'];
+        $usfRows = $userStatsFields->select($usfWhere);
+        if (count($usfRows) > 0) {
+            $userStatsFields->update(['value' => 'Solr'], $usfWhere);
+            $this->session->warnings->append(
+                'Converted ' . count($usfRows)
+                . ' legacy "VuFind" source value(s) in user_stats_fields table'
+            );
+        }
+    }
+
     /**
      * Upgrade the database.
      *
@@ -375,6 +406,9 @@ class UpgradeController extends AbstractBase
             if (count($dupeTags) > 0 && !isset($this->cookie->skipDupeTags)) {
                 return $this->forwardTo('Upgrade', 'FixDuplicateTags');
             }
+
+            // Clean up the "VuFind" source, if necessary.
+            $this->fixVuFindSourceInDatabase();
         } catch (\Exception $e) {
             $this->flashMessenger()->addMessage(
                 'Database upgrade failed: ' . $e->getMessage(), 'error'
diff --git a/module/VuFind/src/VuFind/Record/Router.php b/module/VuFind/src/VuFind/Record/Router.php
index 1a382ba66b6..c6c6affdf28 100644
--- a/module/VuFind/src/VuFind/Record/Router.php
+++ b/module/VuFind/src/VuFind/Record/Router.php
@@ -130,7 +130,7 @@ class Router
     ) {
         // Extract source and ID from driver or string:
         if (is_object($driver)) {
-            $source = $driver->getResourceSource();
+            $source = $driver->getSourceIdentifier();
             $id = $driver->getUniqueId();
         } else {
             list($source, $id) = $this->extractSourceAndId($driver);
diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
index f495749d766..678dc035d6b 100644
--- a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
+++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php
@@ -147,7 +147,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     {
         $table = $this->getDbTable('Comments');
         return $table->getForResource(
-            $this->getUniqueId(), $this->getResourceSource()
+            $this->getUniqueId(), $this->getSourceIdentifier()
         );
     }
 
@@ -181,7 +181,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
         $tags = $this->getDbTable('Tags');
         return $tags->getForResource(
             $this->getUniqueId(),
-            $this->getResourceSource(),
+            $this->getSourceIdentifier(),
             0, $list_id, $user_id, $sort, $ownerId
         );
     }
@@ -198,7 +198,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     {
         $resources = $this->getDbTable('Resource');
         $resource = $resources->findResource(
-            $this->getUniqueId(), $this->getResourceSource()
+            $this->getUniqueId(), $this->getSourceIdentifier()
         );
         foreach ($tags as $tag) {
             $resource->addTag($tag, $user);
@@ -217,7 +217,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     {
         $resources = $this->getDbTable('Resource');
         $resource = $resources->findResource(
-            $this->getUniqueId(), $this->getResourceSource()
+            $this->getUniqueId(), $this->getSourceIdentifier()
         );
         foreach ($tags as $tag) {
             $resource->deleteTag($tag, $user);
@@ -263,7 +263,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
         // Get or create a resource object as needed:
         $resourceTable = $this->getDbTable('Resource');
         $resource = $resourceTable->findResource(
-            $this->getUniqueId(), $this->getResourceSource(), true, $this
+            $this->getUniqueId(), $this->getSourceIdentifier(), true, $this
         );
 
         // Add the information to the user's account:
@@ -287,7 +287,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     {
         $db = $this->getDbTable('UserResource');
         $data = $db->getSavedData(
-            $this->getUniqueId(), $this->getResourceSource(), $list_id, $user_id
+            $this->getUniqueId(), $this->getSourceIdentifier(), $list_id, $user_id
         );
         $notes = [];
         foreach ($data as $current) {
@@ -309,7 +309,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
     {
         $table = $this->getDbTable('UserList');
         return $table->getListsContainingResource(
-            $this->getUniqueId(), $this->getResourceSource(), $user_id
+            $this->getUniqueId(), $this->getSourceIdentifier(), $user_id
         );
     }
 
@@ -317,13 +317,12 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      * Get the source value used to identify resources of this type in the database.
      *
      * @return string
+     *
+     * @deprecated Obsolete as of VuFind 3.0; use getSourceIdentifier() instead.
      */
     public function getResourceSource()
     {
-        // Normally resource source is the same as source identifier, but for legacy
-        // reasons we need to call Solr 'VuFind' instead.  TODO: clean this up.
-        $id = $this->getSourceIdentifier();
-        return $id == 'Solr' ? 'VuFind' : $id;
+        return $this->getSourceIdentifier();
     }
 
     /**
@@ -335,8 +334,7 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface,
      */
     public function setSourceIdentifier($identifier)
     {
-        // Normalize "VuFind" identifier to "Solr" (see above).  TODO: clean this up.
-        $this->sourceIdentifier = $identifier == 'VuFind' ? 'Solr' : $identifier;
+        $this->sourceIdentifier = $identifier;
     }
 
     /**
diff --git a/module/VuFind/src/VuFind/RecordDriver/Missing.php b/module/VuFind/src/VuFind/RecordDriver/Missing.php
index 90bcf2ed3df..20758c20669 100644
--- a/module/VuFind/src/VuFind/RecordDriver/Missing.php
+++ b/module/VuFind/src/VuFind/RecordDriver/Missing.php
@@ -66,7 +66,7 @@ class Missing extends SolrDefault
         if ($id) {
             $table = $this->getDbTable('Resource');
             $resource = $table
-                ->findResource($id, $this->getResourceSource(), false);
+                ->findResource($id, $this->getSourceIdentifier(), false);
             if (!empty($resource) && !empty($resource->title)) {
                 return $resource->title;
             }
diff --git a/module/VuFind/src/VuFind/Related/WorldCatSimilar.php b/module/VuFind/src/VuFind/Related/WorldCatSimilar.php
index 21285542ce1..b0d56b0b051 100644
--- a/module/VuFind/src/VuFind/Related/WorldCatSimilar.php
+++ b/module/VuFind/src/VuFind/Related/WorldCatSimilar.php
@@ -83,7 +83,7 @@ class WorldCatSimilar extends Similar
         $query = '(' . implode(' or ', $parts) . ')';
 
         // Not current record ID if this is already a WorldCat record:
-        if ($driver->getResourceSource() == 'WorldCat') {
+        if ($driver->getSourceIdentifier() == 'WorldCat') {
             $id = $driver->getUniqueId();
             $query .= " not srw.no all \"$id\"";
         }
diff --git a/module/VuFind/src/VuFind/Statistics/Record.php b/module/VuFind/src/VuFind/Statistics/Record.php
index f4cfe198f86..19b06497ca6 100644
--- a/module/VuFind/src/VuFind/Statistics/Record.php
+++ b/module/VuFind/src/VuFind/Statistics/Record.php
@@ -51,7 +51,7 @@ class Record extends AbstractBase
         $this->save(
             [
                 'recordId'     => $data->getUniqueId(),
-                'recordSource' => $data->getResourceSource()
+                'recordSource' => $data->getSourceIdentifier()
             ],
             $request
         );
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Record.php b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
index e3a7dedb23f..cd5921acfd3 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Record.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
@@ -337,7 +337,7 @@ class Record extends AbstractHelper
     {
         // Figure out controller using naming convention based on resource
         // source:
-        $source = $this->driver->getResourceSource();
+        $source = $this->driver->getSourceIdentifier();
         if ($source == DEFAULT_SEARCH_BACKEND) {
             // Default source is special case -- it uses the basic record
             // controller.
@@ -412,7 +412,7 @@ class Record extends AbstractHelper
     public function getCheckbox($idPrefix = '')
     {
         static $checkboxCount = 0;
-        $id = $this->driver->getResourceSource() . '|'
+        $id = $this->driver->getSourceIdentifier() . '|'
             . $this->driver->getUniqueId();
         $context
             = ['id' => $id, 'count' => $checkboxCount++, 'prefix' => $idPrefix];
diff --git a/module/VuFind/src/VuFindTest/Unit/TestCase.php b/module/VuFind/src/VuFindTest/Unit/TestCase.php
index 70c3080d11d..63f1c6d5d67 100644
--- a/module/VuFind/src/VuFindTest/Unit/TestCase.php
+++ b/module/VuFind/src/VuFindTest/Unit/TestCase.php
@@ -146,7 +146,6 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase
                     [
                         'abstract_factories' =>
                             ['VuFind\Search\Options\PluginFactory'],
-                        'aliases' => ['VuFind' => 'Solr'],
                     ]
                 )
             );
@@ -159,7 +158,6 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase
                     [
                         'abstract_factories' =>
                             ['VuFind\Search\Params\PluginFactory'],
-                        'aliases' => ['VuFind' => 'Solr'],
                     ]
                 )
             );
@@ -172,7 +170,6 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase
                     [
                         'abstract_factories' =>
                             ['VuFind\Search\Results\PluginFactory'],
-                        'aliases' => ['VuFind' => 'Solr'],
                     ]
                 )
             );
diff --git a/module/VuFind/tests/bootstrap.php b/module/VuFind/tests/bootstrap.php
index b6cbebe2e44..63e3a34ebfa 100644
--- a/module/VuFind/tests/bootstrap.php
+++ b/module/VuFind/tests/bootstrap.php
@@ -22,7 +22,7 @@ defined('APPLICATION_ENV')
     );
 
 // Define default search backend identifier
-defined('DEFAULT_SEARCH_BACKEND') || define('DEFAULT_SEARCH_BACKEND', 'VuFind');
+defined('DEFAULT_SEARCH_BACKEND') || define('DEFAULT_SEARCH_BACKEND', 'Solr');
 
 // Define path to local override directory
 defined('LOCAL_OVERRIDE_DIR')
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
index 50d44faef23..e1eea8262a4 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/CartTest.php
@@ -397,7 +397,7 @@ class CartTest extends \VuFindTest\Unit\MinkTestCase
         $button->click();
         list(, $params) = explode('?', $session->getCurrentUrl());
         $this->assertEquals(
-            'print=true&id[]=VuFind|testsample1&id[]=VuFind|testsample2', $params
+            'print=true&id[]=Solr|testsample1&id[]=Solr|testsample2', $params
         );
     }
 
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/CartTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/CartTest.php
index af1d0fab369..15fd562b393 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/CartTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/CartTest.php
@@ -143,12 +143,12 @@ class CartTest extends \PHPUnit_Framework_TestCase
     {
         $cart = $this->getCart(2); // create a very small cart
         $this->assertFalse($cart->isFull());
-        $this->assertEquals(['success' => true], $cart->addItem('VuFind|a'));
+        $this->assertEquals(['success' => true], $cart->addItem('Solr|a'));
         $this->assertFalse($cart->isFull());
-        $this->assertEquals(['success' => true], $cart->addItem('VuFind|b'));
+        $this->assertEquals(['success' => true], $cart->addItem('Solr|b'));
         $this->assertTrue($cart->isFull());
         $this->assertEquals(
-            ['success' => false, 'notAdded' => 1], $cart->addItem('VuFind|c')
+            ['success' => false, 'notAdded' => 1], $cart->addItem('Solr|c')
         );
     }
 
@@ -187,9 +187,9 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('vufind_cart'), $this->equalTo('Aa'));
         $manager->expects($this->at(1))
             ->method('set')
-            ->with($this->equalTo('vufind_cart_src'), $this->equalTo('VuFind'));
+            ->with($this->equalTo('vufind_cart_src'), $this->equalTo('Solr'));
         $cart = $this->getCart(100, true, $manager);
-        $cart->addItem('VuFind|a');
+        $cart->addItem('Solr|a');
     }
 
     /**
@@ -200,9 +200,9 @@ class CartTest extends \PHPUnit_Framework_TestCase
     public function testContains()
     {
         $cart = $this->getCart();
-        $this->assertFalse($cart->contains('VuFind|a'));
-        $cart->addItem('VuFind|a');
-        $this->assertTrue($cart->contains('VuFind|a'));
+        $this->assertFalse($cart->contains('Solr|a'));
+        $cart->addItem('Solr|a');
+        $this->assertTrue($cart->contains('Solr|a'));
     }
 
     /**
@@ -213,7 +213,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
     public function testCartCanBeEmptied()
     {
         $cart = $this->getCart();
-        $cart->addItem('VuFind|a');
+        $cart->addItem('Solr|a');
         $this->assertFalse($cart->isEmpty());
         $cart->emptyCart();
         $this->assertTrue($cart->isEmpty());
@@ -227,11 +227,11 @@ class CartTest extends \PHPUnit_Framework_TestCase
     public function testRemoveItems()
     {
         $cart = $this->getCart();
-        $cart->addItems(['VuFind|a', 'VuFind|b', 'VuFind|c']);
-        $cart->removeItems(['VuFind|a', 'VuFind|b']);
-        $this->assertTrue($cart->contains('VuFind|c'));
-        $this->assertFalse($cart->contains('VuFind|a'));
-        $this->assertFalse($cart->contains('VuFind|b'));
+        $cart->addItems(['Solr|a', 'Solr|b', 'Solr|c']);
+        $cart->removeItems(['Solr|a', 'Solr|b']);
+        $this->assertTrue($cart->contains('Solr|c'));
+        $this->assertFalse($cart->contains('Solr|a'));
+        $this->assertFalse($cart->contains('Solr|b'));
     }
 
     /**
@@ -243,10 +243,10 @@ class CartTest extends \PHPUnit_Framework_TestCase
     {
         $this->loader->expects($this->once())
             ->method('loadBatch')
-            ->with($this->equalTo(['VuFind|a']))
+            ->with($this->equalTo(['Solr|a']))
             ->will($this->returnValue('success'));
         $cart = $this->getCart();
-        $cart->addItem('VuFind|a');
+        $cart->addItem('Solr|a');
         $this->assertEquals('success', $cart->getRecordDetails());
     }
 
@@ -259,9 +259,9 @@ class CartTest extends \PHPUnit_Framework_TestCase
     {
         $cart = $this->getCart(100, true, ['vufind_cart' => "a\tb\tc"]);
         $this->assertEquals(3, count($cart->getItems()));
-        $this->assertTrue($cart->contains('VuFind|a'));
-        $this->assertTrue($cart->contains('VuFind|b'));
-        $this->assertTrue($cart->contains('VuFind|c'));
+        $this->assertTrue($cart->contains('Solr|a'));
+        $this->assertTrue($cart->contains('Solr|b'));
+        $this->assertTrue($cart->contains('Solr|c'));
     }
 
     /**
@@ -273,11 +273,11 @@ class CartTest extends \PHPUnit_Framework_TestCase
     {
         $cookies = [
             'vufind_cart' => "Aa\tBb\tCc",
-            'vufind_cart_src' => "VuFind\tSummon\tWorldCat"
+            'vufind_cart_src' => "Solr\tSummon\tWorldCat"
         ];
         $cart = $this->getCart(100, true, $cookies);
         $this->assertEquals(3, count($cart->getItems()));
-        $this->assertTrue($cart->contains('VuFind|a'));
+        $this->assertTrue($cart->contains('Solr|a'));
         $this->assertTrue($cart->contains('Summon|b'));
         $this->assertTrue($cart->contains('WorldCat|c'));
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
index 1bd07ea2375..a6736b61184 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php
@@ -70,7 +70,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => 'VuFind|4', 'nextRecord' => 'VuFind|6',
+            'previousRecord' => 'Solr|4', 'nextRecord' => 'Solr|6',
             'currentPosition' => 5, 'resultTotal' => 10
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(5)));
@@ -87,7 +87,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => null, 'nextRecord' => 'VuFind|2',
+            'previousRecord' => null, 'nextRecord' => 'Solr|2',
             'currentPosition' => 1, 'resultTotal' => 10
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(1)));
@@ -104,7 +104,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => 'VuFind|9', 'nextRecord' => null,
+            'previousRecord' => 'Solr|9', 'nextRecord' => null,
             'currentPosition' => 10, 'resultTotal' => 10
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(10)));
@@ -121,7 +121,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => 'VuFind|16', 'nextRecord' => null,
+            'previousRecord' => 'Solr|16', 'nextRecord' => null,
             'currentPosition' => 17, 'resultTotal' => 17
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(17)));
@@ -138,7 +138,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => 'VuFind|10', 'nextRecord' => 'VuFind|12',
+            'previousRecord' => 'Solr|10', 'nextRecord' => 'Solr|12',
             'currentPosition' => 11, 'resultTotal' => 30
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(11)));
@@ -155,7 +155,7 @@ class ResultScrollerTest extends TestCase
         $plugin = $this->getMockResultScroller($results);
         $this->assertTrue($plugin->init($results));
         $expected = [
-            'previousRecord' => 'VuFind|19', 'nextRecord' => 'VuFind|21',
+            'previousRecord' => 'Solr|19', 'nextRecord' => 'Solr|21',
             'currentPosition' => 20, 'resultTotal' => 30
         ];
         $this->assertEquals($expected, $plugin->getScrollData($results->getMockRecordDriver(20)));
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/LoaderTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/LoaderTest.php
index 4038b4d82be..19b4f8216bb 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/LoaderTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/LoaderTest.php
@@ -52,14 +52,14 @@ class LoaderTest extends TestCase
      * @return void
      *
      * @expectedException        VuFind\Exception\RecordMissing
-     * @expectedExceptionMessage Record VuFind:test does not exist.
+     * @expectedExceptionMessage Record Solr:test does not exist.
      */
     public function testMissingRecord()
     {
         $collection = $this->getCollection([]);
         $service = $this->getMock('VuFindSearch\Service');
         $service->expects($this->once())->method('retrieve')
-            ->with($this->equalTo('VuFind'), $this->equalTo('test'))
+            ->with($this->equalTo('Solr'), $this->equalTo('test'))
             ->will($this->returnValue($collection));
         $loader = $this->getLoader($service);
         $loader->load('test');
@@ -75,7 +75,7 @@ class LoaderTest extends TestCase
         $collection = $this->getCollection([]);
         $service = $this->getMock('VuFindSearch\Service');
         $service->expects($this->once())->method('retrieve')
-            ->with($this->equalTo('VuFind'), $this->equalTo('test'))
+            ->with($this->equalTo('Solr'), $this->equalTo('test'))
             ->will($this->returnValue($collection));
         $missing = $this->getDriver('missing', 'Missing');
         $factory = $this->getMock('VuFind\RecordDriver\PluginManager');
@@ -83,7 +83,7 @@ class LoaderTest extends TestCase
             ->with($this->equalTo('Missing'))
             ->will($this->returnValue($missing));
         $loader = $this->getLoader($service, $factory);
-        $record = $loader->load('test', 'VuFind', true);
+        $record = $loader->load('test', 'Solr', true);
         $this->assertEquals($missing, $record);
     }
 
@@ -98,7 +98,7 @@ class LoaderTest extends TestCase
         $collection = $this->getCollection([$driver]);
         $service = $this->getMock('VuFindSearch\Service');
         $service->expects($this->once())->method('retrieve')
-            ->with($this->equalTo('VuFind'), $this->equalTo('test'))
+            ->with($this->equalTo('Solr'), $this->equalTo('test'))
             ->will($this->returnValue($collection));
         $loader = $this->getLoader($service);
         $this->assertEquals($driver, $loader->load('test'));
@@ -111,8 +111,8 @@ class LoaderTest extends TestCase
      */
     public function testBatchLoad()
     {
-        $driver1 = $this->getDriver('test1', 'VuFind');
-        $driver2 = $this->getDriver('test2', 'VuFind');
+        $driver1 = $this->getDriver('test1', 'Solr');
+        $driver2 = $this->getDriver('test2', 'Solr');
         $driver3 = $this->getDriver('test3', 'Summon');
         $missing = $this->getDriver('missing', 'Missing');
 
@@ -127,7 +127,7 @@ class LoaderTest extends TestCase
 
         $service = $this->getMock('VuFindSearch\Service');
         $service->expects($this->at(0))->method('retrieveBatch')
-            ->with($this->equalTo('VuFind'), $this->equalTo(['test1', 'test2']))
+            ->with($this->equalTo('Solr'), $this->equalTo(['test1', 'test2']))
             ->will($this->returnValue($collection1));
         $service->expects($this->at(1))->method('retrieveBatch')
             ->with($this->equalTo('Summon'), $this->equalTo(['test3']))
@@ -138,8 +138,8 @@ class LoaderTest extends TestCase
 
         $loader = $this->getLoader($service, $factory);
         $input = [
-            ['source' => 'VuFind', 'id' => 'test1'],
-            'VuFind|test2', 'Summon|test3', 'WorldCat|test4'
+            ['source' => 'Solr', 'id' => 'test1'],
+            'Solr|test2', 'Summon|test3', 'WorldCat|test4'
         ];
         $this->assertEquals([$driver1, $driver2, $driver3, $missing], $loader->loadBatch($input));
     }
@@ -152,12 +152,12 @@ class LoaderTest extends TestCase
      *
      * @return RecordDriver
      */
-    protected function getDriver($id = 'test', $source = 'VuFind')
+    protected function getDriver($id = 'test', $source = 'Solr')
     {
         $driver = $this->getMock('VuFind\RecordDriver\AbstractBase');
         $driver->expects($this->any())->method('getUniqueId')
             ->will($this->returnValue($id));
-        $driver->expects($this->any())->method('getResourceSource')
+        $driver->expects($this->any())->method('getSourceIdentifier')
             ->will($this->returnValue($source));
         return $driver;
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
index c71c2020a0f..73f401478a8 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Record/RouterTest.php
@@ -99,7 +99,7 @@ class RouterTest extends TestCase
         $router = $this->getRouter($driver, ['Collections' => ['collections' => true]]);
         $this->assertEquals(
             ['params' => ['id' => 'test', 'tab' => 'foo'], 'route' => 'collection'],
-            $router->getTabRouteDetails('VuFind|test', 'foo')
+            $router->getTabRouteDetails('Solr|test', 'foo')
         );
     }
 
@@ -172,12 +172,12 @@ class RouterTest extends TestCase
      *
      * @return RecordDriver
      */
-    protected function getDriver($id = 'test', $source = 'VuFind')
+    protected function getDriver($id = 'test', $source = 'Solr')
     {
         $driver = $this->getMock('VuFind\RecordDriver\AbstractBase');
         $driver->expects($this->any())->method('getUniqueId')
             ->will($this->returnValue($id));
-        $driver->expects($this->any())->method('getResourceSource')
+        $driver->expects($this->any())->method('getSourceIdentifier')
             ->will($this->returnValue($source));
         return $driver;
     }
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Related/WorldCatSimilarTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Related/WorldCatSimilarTest.php
index cefc85e8f00..4b259674941 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/Related/WorldCatSimilarTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Related/WorldCatSimilarTest.php
@@ -48,7 +48,7 @@ class WorldCatSimilarTest extends \VuFindTest\Unit\TestCase
     {
         $driver = $this->getMock(
             'VuFind\RecordDriver\WorldCat',
-            ['tryMethod', 'getPrimaryAuthor', 'getAllSubjectHeadings', 'getTitle', 'getUniqueId', 'getResourceSource']
+            ['tryMethod', 'getPrimaryAuthor', 'getAllSubjectHeadings', 'getTitle', 'getUniqueId', 'getSourceIdentifier']
         );
         $driver->expects($this->once())
             ->method('tryMethod')
@@ -67,7 +67,7 @@ class WorldCatSimilarTest extends \VuFindTest\Unit\TestCase
             ->method('getUniqueId')
             ->will($this->returnValue('fakeid'));
         $driver->expects($this->once())
-            ->method('getResourceSource')
+            ->method('getSourceIdentifier')
             ->will($this->returnValue('WorldCat'));
         $service = $this->getMock('VuFindSearch\Service', ['search']);
         $expectedQuery = new Query('(srw.dd any "fakedc" or srw.au all "fakepa" or srw.su all "fakesh1a fakesh1b" or srw.su all "fakesh2" or srw.ti any "faketitle") not srw.no all "fakeid"');
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
index 4106820a946..0178e29ba5a 100644
--- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordTest.php
@@ -288,10 +288,10 @@ class RecordTest extends \PHPUnit_Framework_TestCase
     {
         $context = $this->getMockContext();
         $context->expects($this->at(1))->method('renderInContext')
-            ->with($this->equalTo('record/checkbox.phtml'), $this->equalTo(['id' => 'VuFind|000105196', 'count' => 0, 'prefix' => 'bar']))
+            ->with($this->equalTo('record/checkbox.phtml'), $this->equalTo(['id' => 'Solr|000105196', 'count' => 0, 'prefix' => 'bar']))
             ->will($this->returnValue('success'));
         $context->expects($this->at(2))->method('renderInContext')
-            ->with($this->equalTo('record/checkbox.phtml'), $this->equalTo(['id' => 'VuFind|000105196', 'count' => 1, 'prefix' => 'bar']))
+            ->with($this->equalTo('record/checkbox.phtml'), $this->equalTo(['id' => 'Solr|000105196', 'count' => 1, 'prefix' => 'bar']))
             ->will($this->returnValue('success'));
         $record = $this->getRecord(
             $this->loadRecordFixture('testbug1.json'), [], $context
diff --git a/public/index.php b/public/index.php
index 67cf9646514..a3feb9488c0 100644
--- a/public/index.php
+++ b/public/index.php
@@ -27,7 +27,7 @@ defined('APPLICATION_ENV')
     );
 
 // Define default search backend identifier
-defined('DEFAULT_SEARCH_BACKEND') || define('DEFAULT_SEARCH_BACKEND', 'VuFind');
+defined('DEFAULT_SEARCH_BACKEND') || define('DEFAULT_SEARCH_BACKEND', 'Solr');
 
 // Define path to local override directory
 defined('LOCAL_OVERRIDE_DIR')
diff --git a/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
index 8fe0ce63967..e273233877e 100644
--- a/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/EDS/result-list.phtml
@@ -3,7 +3,7 @@
   $accessLevel = $this->driver->getAccessLevel();
   $restrictedView = empty($accessLevel) ? false : true;
 ?>
-<div class="row col-xs-11 source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
+<div class="row col-xs-11 source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
   <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
   <div class="col-sm-2 left">
     <? if ($summThumb = $this->record($this->driver)->getThumbnail()): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
index 20d68bc04ea..756a40089bc 100644
--- a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -1,8 +1,8 @@
-<div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?> col-xs-11">
+<div class="result source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?> col-xs-11">
   <div class="row">
     <div>
       <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" class="hiddenSource" />
+      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" class="hiddenSource" />
     </div>
     <? $cover = $this->record($this->driver)->getCover('result-list', 'medium', $this->recordLink()->getUrl($this->driver)); ?>
     <? if ($cover): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
index 6bf943b6ed6..00641440337 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/core.phtml
@@ -62,8 +62,11 @@
       <tr>
         <th><?=$this->transEsc('Published in')?>:</th>
         <td>
-          <? $containerID = $this->driver->getContainerRecordID(); ?>
-          <a href="<?=($containerID ? $this->recordLink()->getUrl("VuFind|$containerID") : $this->record($this->driver)->getLink('journaltitle', $journalTitle))?>"><?=$this->escapeHtml($journalTitle)?></a>
+          <?
+            $containerSource = $this->driver->getSourceIdentifier();
+            $containerID = $this->driver->getContainerRecordID();
+          ?>
+          <a href="<?=($containerID ? $this->recordLink()->getUrl("$containerSource|$containerID") : $this->record($this->driver)->getLink('journaltitle', $journalTitle))?>"><?=$this->escapeHtml($journalTitle)?></a>
           <? $ref = $this->driver->getContainerReference(); if (!empty($ref)) { echo $this->escapeHtml($ref); } ?>
         </td>
       </tr>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
index 07f2351064f..d8df15d4376 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -1,7 +1,7 @@
 <?
   // Set up some convenience variables:
   $id = $this->driver->getUniqueId();
-  $source = $this->driver->getResourceSource();
+  $source = $this->driver->getSourceIdentifier();
   if (isset($this->list) && is_object($this->list)) {
     $list_id = $this->list->id;
     $user_id = $this->list->user_id;
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
index 0c0a1a5ded7..96bd4cacb51 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -2,7 +2,7 @@
   <div class="row">
     <div>
       <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" class="hiddenSource" />
+      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" class="hiddenSource" />
     </div>
     <? if ($cover = $this->record($this->driver)->getCover('result-list', 'medium', $this->recordLink()->getUrl($this->driver))): ?>
       <div class="col-sm-2 col-xs-3 left"><?=$cover ?></div>
@@ -32,9 +32,10 @@
           <? if (!empty($journalTitle)): ?>
             <?=!empty($summAuthor) ? '<br />' : ''?>
             <?=$this->transEsc('Published in')?>
+            <? $containerSource = $this->driver->getSourceIdentifier(); ?>
             <? $containerID = $this->driver->getContainerRecordID(); ?>
             <? /* TODO: handle highlighting more elegantly here: */?>
-            <a href="<?=($containerID ? $this->recordLink()->getUrl("VuFind|$containerID") : $this->record($this->driver)->getLink('journaltitle', str_replace(array('{{{{START_HILITE}}}}', '{{{{END_HILITE}}}}'), '', $journalTitle)))?>"><?=$this->highlight($journalTitle) ?></a>
+            <a href="<?=($containerID ? $this->recordLink()->getUrl("$containerSource|$containerID") : $this->record($this->driver)->getLink('journaltitle', str_replace(array('{{{{START_HILITE}}}}', '{{{{END_HILITE}}}}'), '', $journalTitle)))?>"><?=$this->highlight($journalTitle) ?></a>
             <?=!empty($summDate) ? ' (' . $this->escapeHtml($summDate[0]) . ')' : ''?>
           <? elseif (!empty($summDate)): ?>
             <?=!empty($summAuthor) ? '<br />' : ''?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
index 4931a548f30..15a57ef0a6b 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/toolbar.phtml
@@ -8,7 +8,7 @@
   $id = $this->driver->getUniqueId();
   $controllerClass = 'controller:' . $this->record($this->driver)->getController();
   $cart = $this->cart();
-  $cartId = $this->driver->getResourceSource() . '|' . $id;
+  $cartId = $this->driver->getSourceIdentifier() . '|' . $id;
 ?>
 <ul class="nav nav-pills hidden-print">
   <? if (count($this->driver->getCitationFormats()) > 0): ?>
diff --git a/themes/bootstrap3/templates/RecordTab/usercomments.phtml b/themes/bootstrap3/templates/RecordTab/usercomments.phtml
index 7157b9cbaa7..09d0209721d 100644
--- a/themes/bootstrap3/templates/RecordTab/usercomments.phtml
+++ b/themes/bootstrap3/templates/RecordTab/usercomments.phtml
@@ -10,7 +10,7 @@
   <div class="row">
     <div class="col-sm-3 name">
       <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>"/>
-      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>"/>
+      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>"/>
       <strong><?=$this->transEsc("Your Comment")?></strong>
     </div>
     <div class="col-sm-9">
diff --git a/themes/bootstrap3/templates/cart/email.phtml b/themes/bootstrap3/templates/cart/email.phtml
index f91066ff7c8..181903dedb5 100644
--- a/themes/bootstrap3/templates/cart/email.phtml
+++ b/themes/bootstrap3/templates/cart/email.phtml
@@ -10,7 +10,7 @@
 <?=$this->flashmessages()?>
 <form class="form-horizontal" action="<?=$this->url('cart-email')?>" method="post"  name="bulkEmail">
   <? foreach ($this->records as $current): ?>
-    <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getResourceSource() . '|' . $current->getUniqueId())?>" />
+    <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getSourceIdentifier() . '|' . $current->getUniqueId())?>" />
   <? endforeach; ?>
   <div class="form-group">
     <label class="col-sm-3 control-label"><?=$this->transEsc('Title')?></label>
diff --git a/themes/bootstrap3/templates/cart/export.phtml b/themes/bootstrap3/templates/cart/export.phtml
index 824ab3d1fd7..b1855b21891 100644
--- a/themes/bootstrap3/templates/cart/export.phtml
+++ b/themes/bootstrap3/templates/cart/export.phtml
@@ -14,7 +14,7 @@
 <? if (!empty($this->exportOptions)): ?>
   <form class="form-horizontal" method="post" action="<?=$this->url('cart-export')?>" name="exportForm" title="<?=$this->transEsc('Export Items')?>">
     <? foreach ($this->records as $current): ?>
-      <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getResourceSource() . '|' . $current->getUniqueId())?>" />
+      <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getSourceIdentifier() . '|' . $current->getUniqueId())?>" />
     <? endforeach; ?>
     <div class="form-group">
       <label class="col-sm-3 control-label"><?=$this->transEsc('Title')?></label>
diff --git a/themes/bootstrap3/templates/cart/save.phtml b/themes/bootstrap3/templates/cart/save.phtml
index 94c7cfb149b..a84570f30c8 100644
--- a/themes/bootstrap3/templates/cart/save.phtml
+++ b/themes/bootstrap3/templates/cart/save.phtml
@@ -13,8 +13,8 @@
 <form class="form-horizontal" method="post" action="<?=$this->url('cart-save')?>" name="bulkSave">
   <? $idParams = array(); ?>
   <? foreach ($this->records as $current): ?>
-    <? $idParams[] = urlencode('ids[]') . '=' . urlencode($current->getResourceSource() . '|' . $current->getUniqueId()) ?>
-    <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getResourceSource() . '|' . $current->getUniqueId())?>" />
+    <? $idParams[] = urlencode('ids[]') . '=' . urlencode($current->getSourceIdentifier() . '|' . $current->getUniqueId()) ?>
+    <input type="hidden" name="ids[]" value="<?=$this->escapeHtmlAttr($current->getSourceIdentifier() . '|' . $current->getUniqueId())?>" />
   <? endforeach; ?>
   <div class="form-group">
     <label class="col-sm-3 control-label"><?=$this->transEsc('Title')?></label>
diff --git a/themes/bootstrap3/templates/collection/view.phtml b/themes/bootstrap3/templates/collection/view.phtml
index eb032151297..9da5f2f64a2 100644
--- a/themes/bootstrap3/templates/collection/view.phtml
+++ b/themes/bootstrap3/templates/collection/view.phtml
@@ -50,7 +50,7 @@
   <div class="<?=$tree ? 'col-sm-12' : $this->layoutClass('mainbody') ?>">
     <div class="record">
       <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" class="hiddenId" id="record_id" />
-      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" class="hiddenSource" />
+      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" class="hiddenSource" />
       <?=$this->flashmessages()?>
       <?=$this->record($this->driver)->getCollectionMetadata()?>
     </div>
diff --git a/themes/bootstrap3/templates/myresearch/edit.phtml b/themes/bootstrap3/templates/myresearch/edit.phtml
index f6d703ae909..3ec402b3c16 100644
--- a/themes/bootstrap3/templates/myresearch/edit.phtml
+++ b/themes/bootstrap3/templates/myresearch/edit.phtml
@@ -24,7 +24,7 @@
     <? foreach ($this->savedData as $i=>$current): ?>
       <fieldset>
         <legend>
-          <a href="<?=$this->url('userList', array('id' => $current['listId'])) ?>?delete=<?=urlencode($this->driver->getUniqueId())?>&amp;source=<?=urlencode($this->driver->getResourceSource())?>" id="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>delete<?=$current['listId'] ?>" title="<?=$this->transEsc('confirm_delete')?>" class="close">&times;</a> <?=$this->transEsc('List') ?>: <?=$this->escapeHtml($current['listTitle'])?>
+          <a href="<?=$this->url('userList', array('id' => $current['listId'])) ?>?delete=<?=urlencode($this->driver->getUniqueId())?>&amp;source=<?=urlencode($this->driver->getSourceIdentifier())?>" id="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>delete<?=$current['listId'] ?>" title="<?=$this->transEsc('confirm_delete')?>" class="close">&times;</a> <?=$this->transEsc('List') ?>: <?=$this->escapeHtml($current['listTitle'])?>
         </legend>
         <input type="hidden" name="lists[]" value="<?=$current['listId'] ?>"/>
         <? if ($this->usertags()->getMode() !== 'disabled'): ?>
diff --git a/themes/bootstrap3/templates/record/addtag.phtml b/themes/bootstrap3/templates/record/addtag.phtml
index 56f14d4a354..3dfefa5c71b 100644
--- a/themes/bootstrap3/templates/record/addtag.phtml
+++ b/themes/bootstrap3/templates/record/addtag.phtml
@@ -11,7 +11,7 @@
   <form method="post" name="tagRecord" class="form-horizontal">
     <input type="hidden" name="submit" value="1" />
     <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-    <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+    <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
     <div class="form-group">
       <label class="col-sm-3 control-label" for="addtag_tag"><?=$this->transEsc("Tags")?>:</label>
       <div class="col-sm-9">
diff --git a/themes/bootstrap3/templates/record/email.phtml b/themes/bootstrap3/templates/record/email.phtml
index 0ac0386d31c..3f512c4e30e 100644
--- a/themes/bootstrap3/templates/record/email.phtml
+++ b/themes/bootstrap3/templates/record/email.phtml
@@ -10,6 +10,6 @@
 <?=$this->flashmessages()?>
 <form class="form-horizontal" method="post" name="emailRecord">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
   <?=$this->render('Helpers/email-form-fields.phtml')?>
 </form>
diff --git a/themes/bootstrap3/templates/record/save.phtml b/themes/bootstrap3/templates/record/save.phtml
index 340e04c4879..41aeab736e4 100644
--- a/themes/bootstrap3/templates/record/save.phtml
+++ b/themes/bootstrap3/templates/record/save.phtml
@@ -11,7 +11,7 @@
 <form id="edit-save-form" class="form-horizontal" method="post" action="<?=$this->recordLink()->getActionUrl($this->driver, 'Save')?>" name="saveRecord">
   <input type="hidden" name="submit" value="1" />
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId()) ?>" />
-  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
   <? if (!empty($this->containingLists)): ?>
     <p><?=$this->transEsc('This item is already part of the following list/lists') ?>:
     <? foreach ($this->containingLists as $i=>$list): ?>
@@ -40,7 +40,7 @@
       <? endif; ?>
       </select>
     <? endif; ?>
-      <a class="btn btn-link" id="make-list" href="<?=$this->url('editList', array('id' => 'NEW'))?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordSource=<?=urlencode($this->driver->getResourceSource())?>" title="<?=$this->transEsc('Create a List') ?>"><?=$showLists ? $this->transEsc('or create a new list') : $this->transEsc('Create a List'); ?></a>
+      <a class="btn btn-link" id="make-list" href="<?=$this->url('editList', array('id' => 'NEW'))?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordSource=<?=urlencode($this->driver->getSourceIdentifier())?>" title="<?=$this->transEsc('Create a List') ?>"><?=$showLists ? $this->transEsc('or create a new list') : $this->transEsc('Create a List'); ?></a>
     </div>
   </div>
 
diff --git a/themes/bootstrap3/templates/record/sms.phtml b/themes/bootstrap3/templates/record/sms.phtml
index 8ab36406619..5ff39dee17e 100644
--- a/themes/bootstrap3/templates/record/sms.phtml
+++ b/themes/bootstrap3/templates/record/sms.phtml
@@ -11,7 +11,7 @@
 <?=$this->flashmessages()?>
 <form method="post" name="smsRecord" class="form-horizontal">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
   <div class="form-group">
     <label class="col-sm-3 control-label" for="sms_to"><?=$this->transEsc('Number')?>:</label>
     <div class="col-sm-9">
diff --git a/themes/bootstrap3/templates/record/view.phtml b/themes/bootstrap3/templates/record/view.phtml
index 8a5c087c174..5481a5d3892 100644
--- a/themes/bootstrap3/templates/record/view.phtml
+++ b/themes/bootstrap3/templates/record/view.phtml
@@ -42,9 +42,9 @@
 
 <div class="row">
   <div class="<?=$this->layoutClass('mainbody')?>">
-    <div class="record source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>">
+    <div class="record source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>">
       <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" class="hiddenId" />
-      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource()) ?>" class="hiddenSource" />
+      <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier()) ?>" class="hiddenSource" />
       <?=$this->flashmessages()?>
       <?=$this->record($this->driver)->getCoreMetadata()?>
     </div>
diff --git a/themes/jquerymobile/templates/RecordDriver/EDS/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/EDS/result-list.phtml
index 18b702ea55b..5d95546b179 100644
--- a/themes/jquerymobile/templates/RecordDriver/EDS/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/EDS/result-list.phtml
@@ -4,7 +4,7 @@
   $restrictedView = empty($accessLevel) ? false : true;
 ?>
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
-  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
+  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
     <? $items =  $this->driver->getItems();
 
diff --git a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
index ca0a884fca3..1abaaba9d24 100644
--- a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -1,5 +1,5 @@
 <b>
-  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
+  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
     <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
index 5541d5b77e8..b1d9bf18f97 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/core.phtml
@@ -18,8 +18,11 @@
   <? $journalTitle = $this->driver->getContainerTitle(); if (!empty($journalTitle)): ?>
     <dt><?=$this->transEsc('Published in')?>:</dt>
       <dd>
-      <? $containerID = $this->driver->getContainerRecordID(); ?>
-      <a rel="external" href="<?=($containerID ? $this->recordLink()->getUrl("VuFind|$containerID") : $this->record($this->driver)->getLink('journaltitle', $journalTitle))?>"><?=$this->escapeHtml($journalTitle)?></a>
+      <?
+        $containerSource = $this->driver->getSourceIdentifier();
+        $containerID = $this->driver->getContainerRecordID();
+      ?>
+      <a rel="external" href="<?=($containerID ? $this->recordLink()->getUrl("$containerSource|$containerID") : $this->record($this->driver)->getLink('journaltitle', $journalTitle))?>"><?=$this->escapeHtml($journalTitle)?></a>
       <? $ref = $this->driver->getContainerReference(); if (!empty($ref)) { echo $this->escapeHtml($ref); } ?>
     </dd>
   <? endif; ?>
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
index bd2c8e7b4bd..c1ea4289206 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -1,7 +1,7 @@
 <?
     // Set up some convenience variables:
     $id = $this->driver->getUniqueId();
-    $source = $this->driver->getResourceSource();
+    $source = $this->driver->getSourceIdentifier();
     if (isset($this->list) && is_object($this->list)) {
         $list_id = $this->list->id;
         $user_id = $this->list->user_id;
@@ -11,7 +11,7 @@
     }
 ?>
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
-  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
+  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
     <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $listAuthor = $this->driver->getPrimaryAuthor(); if (!empty($listAuthor)): ?>
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
index 18d9710016b..5492f2c0354 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -1,5 +1,5 @@
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
-  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
+  <div class="result source<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
     <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
diff --git a/themes/jquerymobile/templates/RecordTab/usercomments.phtml b/themes/jquerymobile/templates/RecordTab/usercomments.phtml
index bfb324de331..c172b066686 100644
--- a/themes/jquerymobile/templates/RecordTab/usercomments.phtml
+++ b/themes/jquerymobile/templates/RecordTab/usercomments.phtml
@@ -8,7 +8,7 @@
 
 <form action="<?=$this->recordLink()->getActionUrl($this->driver, 'AddComment')?>" method="post" data-ajax="false">
   <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>"/>
-  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>"/>
+  <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>"/>
   <div data-role="fieldcontain">
     <label for="comments_form_comment"><?=$this->transEsc("Your Comment")?>:</label>
     <textarea id="comments_form_comment" name="comment"></textarea>
diff --git a/themes/jquerymobile/templates/record/addtag.phtml b/themes/jquerymobile/templates/record/addtag.phtml
index 82d2a6a0ba2..b18c7dea3c9 100644
--- a/themes/jquerymobile/templates/record/addtag.phtml
+++ b/themes/jquerymobile/templates/record/addtag.phtml
@@ -8,7 +8,7 @@
     <form method="post" name="tagRecord" data-ajax="false">
       <input type="hidden" name="submit" value="1" />
       <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
       <div data-role="fieldcontain">
         <label for="addtag_tag"><?=$this->transEsc("Tags")?>:</label>
         <input id="addtag_tag" type="text" name="tag" value=""/>
diff --git a/themes/jquerymobile/templates/record/email.phtml b/themes/jquerymobile/templates/record/email.phtml
index a8b3798c65a..0ecec92f9dd 100644
--- a/themes/jquerymobile/templates/record/email.phtml
+++ b/themes/jquerymobile/templates/record/email.phtml
@@ -8,7 +8,7 @@
     <?=$this->flashmessages()?>
     <form method="post" name="emailRecord" data-ajax="false">
       <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
       <?=$this->render('Helpers/email-form-fields.phtml')?>
     </form>
   </div>
diff --git a/themes/jquerymobile/templates/record/save.phtml b/themes/jquerymobile/templates/record/save.phtml
index 9ec7b0b6a12..1eeacf1273e 100644
--- a/themes/jquerymobile/templates/record/save.phtml
+++ b/themes/jquerymobile/templates/record/save.phtml
@@ -9,7 +9,7 @@
     <form method="post" name="saveRecord" data-ajax="false">
       <input type="hidden" name="submit" value="1" />
       <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId()) ?>" />
-      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
       <? if (!empty($this->containingLists)): ?>
         <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>
@@ -37,7 +37,7 @@
           </select>
         <? endif; ?>
 
-        <a rel="external" data-role="button" data-rel="dialog" href="<?=$this->url('editList', array('id' => 'NEW')) ?>?recordId=<?=urlencode($this->driver->getUniqueId())?>&amp;recordSource=<?=urlencode($this->driver->getResourceSource())?>" 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;recordSource=<?=urlencode($this->driver->getSourceIdentifier())?>" 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): ?>
           <? if ($this->usertags()->getMode() !== 'disabled'): ?>
diff --git a/themes/jquerymobile/templates/record/sms.phtml b/themes/jquerymobile/templates/record/sms.phtml
index 11fda5ead3c..b81c0acac3b 100644
--- a/themes/jquerymobile/templates/record/sms.phtml
+++ b/themes/jquerymobile/templates/record/sms.phtml
@@ -8,7 +8,7 @@
     <?=$this->flashmessages()?>
     <form method="post" name="smsRecord" data-ajax="false">
       <input type="hidden" name="id" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueId())?>" />
-      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?>" />
+      <input type="hidden" name="source" value="<?=$this->escapeHtmlAttr($this->driver->getSourceIdentifier())?>" />
       <div data-role="fieldcontain">
         <label for="sms_to"><?=$this->transEsc('Number')?>:</label>
         <input id="sms_to" type="text" name="to" value="<?=isset($this->to) ? $this->to : ''?>" />
diff --git a/themes/root/templates/RecordDriver/AbstractBase/export-bibtex.phtml b/themes/root/templates/RecordDriver/AbstractBase/export-bibtex.phtml
index 0e32df65978..74627109957 100644
--- a/themes/root/templates/RecordDriver/AbstractBase/export-bibtex.phtml
+++ b/themes/root/templates/RecordDriver/AbstractBase/export-bibtex.phtml
@@ -25,7 +25,7 @@ if ($marcProceedingsField) {
 echo '@' . $format . "{\n";
 
 // Citation key:
-echo $this->driver->getResourceSource() . '-' .  $this->driver->getUniqueId() . ",\n";
+echo $this->driver->getSourceIdentifier() . '-' .  $this->driver->getUniqueId() . ",\n";
 
 $title = rtrim($this->driver->getTitle(), " /");
 echo "title = {{$title}},\n";
-- 
GitLab