diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index 4329328668333d2c36d854aebab55e6961177e97..1d05cc463db63e14f1d2035078e6ddeb277a727e 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -74,6 +74,8 @@ sidebarOnLeft = false
 showBookBag = false
 ; Set the maximum amount of items allowed in the Book Bag - Default is 100
 bookBagMaxSize = 100
+; Generator value to display in an HTML header <meta> tag:
+generator = "VuFind 2.0"
 
 ; This section allows you to configure the mechanism used for storing user
 ; sessions.  Available types: File, Memcache, Database.
diff --git a/module/VuFind/src/VuFind/Config/Upgrade.php b/module/VuFind/src/VuFind/Config/Upgrade.php
index 6f4817619aef6575658a13a6a0d3062665e1b582..fb9702562904274c374112844b5c3e352fe77d8b 100644
--- a/module/VuFind/src/VuFind/Config/Upgrade.php
+++ b/module/VuFind/src/VuFind/Config/Upgrade.php
@@ -510,6 +510,13 @@ class Upgrade
             unset($newConfig['Statistics']['enabled']);
         }
 
+        // Update generator if it is default value:
+        if (isset($newConfig['Site']['generator'])
+            && $newConfig['Site']['generator'] == 'VuFind ' . $this->from
+        ) {
+            $newConfig['Site']['generator'] = 'VuFind ' . $this->to;
+        }
+
         // Deal with shard settings (which may have to be moved to another file):
         $this->upgradeShardSettings();
 
diff --git a/module/VuFind/tests/fixtures/configs/customgenerator/config.ini b/module/VuFind/tests/fixtures/configs/customgenerator/config.ini
new file mode 100644
index 0000000000000000000000000000000000000000..30491f29f9db6222e6803313c8cca5443488e372
--- /dev/null
+++ b/module/VuFind/tests/fixtures/configs/customgenerator/config.ini
@@ -0,0 +1,2 @@
+[Site]
+generator = "Custom Generator"
\ No newline at end of file
diff --git a/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini b/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini
new file mode 100644
index 0000000000000000000000000000000000000000..8d71fe49a1bc86be2e2d23a6ad09db7d6e870db1
--- /dev/null
+++ b/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini
@@ -0,0 +1,2 @@
+[Site]
+generator = "VuFind defaultgenerator"
\ No newline at end of file
diff --git a/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php b/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
index 0e6ae3e8472828e3ff5ec441ab4abffbd74113e5..8940274523cf566d277575b3d26a34b1a01ef52c 100644
--- a/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
+++ b/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
@@ -40,6 +40,13 @@ use VuFind\Config\Upgrade;
  */
 class UpgradeTest extends \VuFindTest\Unit\TestCase
 {
+    /**
+     * Target upgrade version
+     *
+     * @var string
+     */
+    protected $targetVersion = '2.0';
+
     /**
      * Get an upgrade object for the specified source version:
      *
@@ -51,7 +58,7 @@ class UpgradeTest extends \VuFindTest\Unit\TestCase
     {
         $oldDir = realpath(__DIR__ . '/../../../fixtures/configs/' . $version);
         $rawDir = realpath(__DIR__ . '/../../../../../../config/vufind');
-        return new Upgrade($version, '2.0', $oldDir, $rawDir);
+        return new Upgrade($version, $this->targetVersion, $oldDir, $rawDir);
     }
 
     /**
@@ -144,4 +151,29 @@ class UpgradeTest extends \VuFindTest\Unit\TestCase
     {
         $this->checkVersion('1.4');
     }
+
+    /**
+     * Test generator upgrade.
+     *
+     * @return void
+     */
+    public function testDefaultGenerator()
+    {
+        // We expect the upgrader to switch default values:
+        $upgrader = $this->getUpgrader('defaultgenerator');
+        $upgrader->run();
+        $results = $upgrader->getNewConfigs();
+        $this->assertEquals(
+            'VuFind ' . $this->targetVersion,
+            $results['config.ini']['Site']['generator']
+        );
+
+        // We expect the upgrader not to change custom values:
+        $upgrader = $this->getUpgrader('customgenerator');
+        $upgrader->run();
+        $results = $upgrader->getNewConfigs();
+        $this->assertEquals(
+            'Custom Generator', $results['config.ini']['Site']['generator']
+        );
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindTheme/src/VuFindTheme/Initializer.php b/module/VuFindTheme/src/VuFindTheme/Initializer.php
index 0e3a1de337c977f38c34233d8a9a09b52fa8d455..751ef013c214f1c0efca0d8c21ca6b123a948156 100644
--- a/module/VuFindTheme/src/VuFindTheme/Initializer.php
+++ b/module/VuFindTheme/src/VuFindTheme/Initializer.php
@@ -91,6 +91,8 @@ class Initializer
      * selected through the user interface; each entry is a colon-separated
      * name:description pair, where name may be 'standard,' 'mobile,' or one of
      * the parameter-values from the alternate_themes array.</li>
+     *   <li>generator - a Generator value to display in the HTML header
+     * (optional)</li>
      * </ul>
      * @param MvcEvent $event  Zend MVC Event object
      */
@@ -320,6 +322,11 @@ class Initializer
         // Grab the resource manager for tracking CSS, JS, etc.:
         $resources = $this->serviceManager->get('VuFindTheme\ResourceContainer');
 
+        // Set generator if necessary:
+        if (isset($this->config->generator)) {
+            $resources->setGenerator($this->config->generator);
+        }
+
         // Apply the loaded theme settings in reverse for proper inheritance:
         foreach ($themes as $key=>$currentThemeInfo) {
             if (isset($currentThemeInfo['helpers'])) {
diff --git a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
index 2fcef78e932fe35fd075fafb4f07f17054546ca3..0743a3e28d52483fdb4d1d1ef3512e5e0dc3038e 100644
--- a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
+++ b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
@@ -66,6 +66,13 @@ class ResourceContainer
      */
     protected $encoding = 'UTF-8';
 
+    /**
+     * Generator value for <meta> tag
+     *
+     * @var string
+     */
+    protected $generator = '';
+
     /**
      * Add a CSS file.
      *
@@ -165,4 +172,26 @@ class ResourceContainer
     {
         return $this->favicon;
     }
+
+    /**
+     * Set the generator.
+     *
+     * @param string $generator New generator.
+     *
+     * @return void
+     */
+    public function setGenerator($generator)
+    {
+        $this->generator = $generator;
+    }
+
+    /**
+     * Get the generator.
+     *
+     * @return string
+     */
+    public function getGenerator()
+    {
+        return $this->generator;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
index aefe2af46173d358e9de52fd3dffa39c16bcde1e..f20876903af24cd25ea4def1538063c0e7d5a4ec 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
@@ -68,6 +68,12 @@ class HeadThemeResources extends \Zend\View\Helper\AbstractHelper
             'Content-Type', 'text/html; charset=' . $this->container->getEncoding()
         );
 
+        // Set up generator:
+        $generator = $this->container->getGenerator();
+        if (!empty($generator)) {
+            $headMeta()->appendName('Generator', $generator);
+        }
+
         // Load CSS (make sure we prepend them in the appropriate order; theme
         // resources should load before extras added by individual templates):
         $headLink = $this->getView()->plugin('headlink');