diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Record.php b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
index 9a590b187bb8d24f152ca28969f8600fb5d87b91..466887445337da2079b3035259e0ad6cc5a93ad0 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Record.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Record.php
@@ -303,6 +303,31 @@ class Record extends AbstractHelper
         return $idClasses;
     }
 
+    /**
+     * Get HTML to render a title.
+     *
+     * @param int $maxLength Maximum length of non-highlighted title.
+     *
+     * @return string
+     */
+    public function getTitleHtml($maxLength = 180)
+    {
+        $highlightedTitle = $this->driver->tryMethod('getHighlightedTitle');
+        $title = $this->driver->tryMethod('getTitle');
+        if (!empty($highlightedTitle)) {
+            $highlight = $this->getView()->plugin('highlight');
+            $addEllipsis = $this->getView()->plugin('addEllipsis');
+            return $highlight($addEllipsis($highlightedTitle, $title));
+        }
+        if (!empty($title)) {
+            $escapeHtml = $this->getView()->plugin('escapeHtml');
+            $truncate = $this->getView()->plugin('truncate');
+            return $escapeHtml($truncate($title, $maxLength));
+        }
+        $transEsc = $this->getView()->plugin('transEsc');
+        return $transEsc('Title not available');
+    }
+
     /**
      * Get the name of the controller used by the record route.
      *
diff --git a/themes/blueprint/templates/Recommend/CatalogResults.phtml b/themes/blueprint/templates/Recommend/CatalogResults.phtml
index fbd0863666b97003fe0bbccc759ad005fc3345fe..38f433d42fac6b2ee38f46d4ab38d22907035f17 100644
--- a/themes/blueprint/templates/Recommend/CatalogResults.phtml
+++ b/themes/blueprint/templates/Recommend/CatalogResults.phtml
@@ -7,17 +7,9 @@
     <li>
       <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
       <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+        <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+          <?=$this->record($driver)->getTitleHtml()?>
+        </a>
       </span>
       <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <br />
diff --git a/themes/blueprint/templates/Recommend/RandomRecommend.phtml b/themes/blueprint/templates/Recommend/RandomRecommend.phtml
index 2cfc3e9854a02f5f1417b67aa03f0d7f384d7eaf..0cb2e44ccd847467f42f54fb3e85f020feb6e84a 100644
--- a/themes/blueprint/templates/Recommend/RandomRecommend.phtml
+++ b/themes/blueprint/templates/Recommend/RandomRecommend.phtml
@@ -27,14 +27,9 @@
        <?if($this->recommend->getDisplayMode() === "standard" || $this->recommend->getDisplayMode() === "mixed"):?>
             <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
             <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-            <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-              $summTitle = $driver->getTitle();
-              if (!empty($summTitle)) {
-                  echo $this->escapeHtml($this->truncate($summTitle, 180));
-              } else {
-                  echo $this->transEsc('Title not available');
-              }
-            ?></a>
+            <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+              <?=$this->record($driver)->getTitleHtml()?>
+            </a>
             </span>
             <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
             <br />
diff --git a/themes/blueprint/templates/Recommend/SummonResults.phtml b/themes/blueprint/templates/Recommend/SummonResults.phtml
index 585bb2327269562bc8f4a585582d64a35ef630d2..1e5f7ef5fa8cc01acada09c123e396d2034b4fc2 100644
--- a/themes/blueprint/templates/Recommend/SummonResults.phtml
+++ b/themes/blueprint/templates/Recommend/SummonResults.phtml
@@ -7,17 +7,9 @@
     <li>
       <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
       <span class="<?=$this->record($driver)->getFormatClass($format)?>">
-      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       </span>
       <span style="font-size: .8em">
       <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
diff --git a/themes/blueprint/templates/Recommend/WebResults.phtml b/themes/blueprint/templates/Recommend/WebResults.phtml
index 701bd836951a71d9f0f87217c2e18072dab493bb..055b21a3617be2295913a250402992ca1e3b4a87 100644
--- a/themes/blueprint/templates/Recommend/WebResults.phtml
+++ b/themes/blueprint/templates/Recommend/WebResults.phtml
@@ -5,17 +5,9 @@
   <ul class="similar">
     <? foreach ($results as $driver): ?>
     <li>
-      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       <? $snippet = $driver->getHighlightedSnippet(); ?>
       <? $summary = $driver->getSummary(); ?>
       <? if (!empty($snippet)): ?>
diff --git a/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml b/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
index f956d8d46df1a09ef6c9c6e30c2de5acec5f68a8..531097ffc943f2077034d449eccdbd3307225e5f 100644
--- a/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,14 +3,9 @@
 ?>
 <div class="listentry span-15">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 </div>
 <div class="clearer"></div>
\ No newline at end of file
diff --git a/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
index 20c98d30a591c9dfdc9bd68f4578cfc626390909..dc4e1f3170b86d3d8bbdaa2dbd48d2fee68afddb 100644
--- a/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -9,17 +9,9 @@
   </div>
   <div class="span-9">
     <div class="resultItemLine1">
-      <b class="title"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></b>
+      <b class="title">
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </b>
     </div>
 
     <div class="resultItemLine2">
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
index 2d72d6eed56caffd7e55a16fd2cd66b8f12f551f..3faf6ac5961206190c0814c755d4d60b63443148 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -20,14 +20,9 @@
     <? endif; ?>
   </div>
   <div class="span-10">
-    <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title"><?
-      $listTitle = $this->driver->getTitle();
-      if (!empty($listTitle)) {
-          echo $this->escapeHtml($this->truncate($listTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a><br/>
+    <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a><br/>
     <? $listAuthor = $this->driver->getPrimaryAuthor(); if (!empty($listAuthor)): ?>
       <?=$this->transEsc('by')?>:
       <a href="<?=$this->record($this->driver)->getLink('author', $listAuthor)?>"><?=$this->escapeHtml($listAuthor)?></a><br/>
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
index 5031504dbf7d265a36e14ce0926d2547cae47d9f..40fcfd8082d496ec00978d08b1b60acdf005aaf0 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/result-grid.phtml
@@ -12,17 +12,9 @@
       </a>
     </span>
     <div class="gridTitleBox" >
-      <a class="gridTitle" href="<?=$this->recordLink()->getUrl($this->driver)?>"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 80));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a class="gridTitle" href="<?=$this->recordLink()->getUrl($this->driver)?>">
+        <?=$this->record($this->driver)->getTitleHtml(80)?>
+      </a>
       <? /* We need to find out if we're supposed to display an OpenURL link ($openUrlActive),
             but even if we don't plan to display the link, we still want to get the $openUrl
             value for use in generating a COinS (Z3988) tag -- see bottom of file.
diff --git a/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
index b76affe451da168a39c0209a7cc40fcae4928fcc..816b068ea4f628e1651038a92ab17caee705daaf 100644
--- a/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -11,17 +11,9 @@
   </div>
   <div class="span-9">
     <div class="resultItemLine1">
-      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title"><?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </a>
     </div>
 
     <div class="resultItemLine2">
diff --git a/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
index f9e9fc43193b3124261e067571e813e188286d0b..b0a979dd74db655989ed447b95eef74f571cd9dd 100644
--- a/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/blueprint/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,9 @@
 ?>
 <div class="listentry span-15">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 
   <div class="resultItemLine2">
diff --git a/themes/bootstrap3/templates/Recommend/CatalogResults.phtml b/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
index ef27b6794080a4270627f1c9034413c91885c432..6b1686999831b489480f759cdeba162fc0f8dc0d 100644
--- a/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/CatalogResults.phtml
@@ -5,17 +5,7 @@
       <li class="list-group-item catalog-result">
         <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
         <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?>">
-          <?
-            $summHighlightedTitle = $driver->getHighlightedTitle();
-            $summTitle = $driver->getTitle();
-            if (!empty($summHighlightedTitle)) {
-                echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-            } else if (!empty($summTitle)) {
-                echo $this->escapeHtml($this->truncate($summTitle, 180));
-            } else {
-                echo $this->transEsc('Title not available');
-            }
-          ?>
+          <?=$this->record($driver)->getTitleHtml()?>
         </a>
         <? $summDate = $driver->getPublicationDates(); ?>
         <? $summAuthor = $driver->getPrimaryAuthor(); ?>
diff --git a/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml b/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
index 9c83e95d80441db7dce458a4b32ef7ca7f414937..550b040d61aee4c38ec9927b2a7760fd6ef955d2 100644
--- a/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
+++ b/themes/bootstrap3/templates/Recommend/RandomRecommend.phtml
@@ -27,17 +27,7 @@
 
         <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
         <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?> clearfix">
-          <?
-            $summHighlightedTitle = $driver->getHighlightedTitle();
-            $summTitle = $driver->getTitle();
-            if (!empty($summHighlightedTitle)) {
-                echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-            } else if (!empty($summTitle)) {
-                echo $this->escapeHtml($this->truncate($summTitle, 180));
-            } else {
-                echo $this->transEsc('Title not available');
-            }
-          ?>
+          <?=$this->record($driver)->getTitleHtml()?>
           <? $summAuthor = $driver->getPrimaryAuthor(); ?>
           <span class="small<? if (!empty($summAuthor)): ?> pull-right<? endif; ?>">
             <? $summDate = $driver->getPublicationDates(); ?>
diff --git a/themes/bootstrap3/templates/Recommend/SummonResults.phtml b/themes/bootstrap3/templates/Recommend/SummonResults.phtml
index 1995f77ab7a8befb725b02a6f46b8b6625a35578..93918cd32d6e65c2493d9a236156d59b1b711e3d 100644
--- a/themes/bootstrap3/templates/Recommend/SummonResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/SummonResults.phtml
@@ -6,17 +6,7 @@
         <span>
           <? $formats = $driver->getFormats(); $format = isset($formats[0]) ? $formats[0] : ''; ?>
           <a href="<?=$this->recordLink()->getUrl($driver)?>" class="title <?=$this->record($driver)->getFormatClass($format)?>">
-            <?
-              $summHighlightedTitle = $driver->getHighlightedTitle();
-              $summTitle = $driver->getTitle();
-              if (!empty($summHighlightedTitle)) {
-                  echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-              } else if (!empty($summTitle)) {
-                  echo $this->escapeHtml($this->truncate($summTitle, 180));
-              } else {
-                  echo $this->transEsc('Title not available');
-              }
-            ?>
+            <?=$this->record($driver)->getTitleHtml()?>
           </a>
           <? $summAuthor = $driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
           <span class="small">
diff --git a/themes/bootstrap3/templates/Recommend/WebResults.phtml b/themes/bootstrap3/templates/Recommend/WebResults.phtml
index 701bd836951a71d9f0f87217c2e18072dab493bb..055b21a3617be2295913a250402992ca1e3b4a87 100644
--- a/themes/bootstrap3/templates/Recommend/WebResults.phtml
+++ b/themes/bootstrap3/templates/Recommend/WebResults.phtml
@@ -5,17 +5,9 @@
   <ul class="similar">
     <? foreach ($results as $driver): ?>
     <li>
-      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title"><?
-        $summHighlightedTitle = $driver->getHighlightedTitle();
-        $summTitle = $driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+      <a href="<?=$this->escapeHtmlAttr($driver->getUrl())?>" class="title">
+        <?=$this->record($driver)->getTitleHtml()?>
+      </a>
       <? $snippet = $driver->getHighlightedSnippet(); ?>
       <? $summary = $driver->getSummary(); ?>
       <? if (!empty($snippet)): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
index 7e2fbc62fb07a5ae53e0af0187137573f9daa8cc..eda74148212a3ea029104ff21488f616df98aad8 100644
--- a/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,13 +3,8 @@
 ?>
 <div class="listentry col-xs-11">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 </div>
\ No newline at end of file
diff --git a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
index 986197b797192b1970e3393d6b04d4182485648b..101a4a69a2f2eb4e95d487e933b2df0060647253 100644
--- a/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -10,17 +10,9 @@
     </div>
     <div class="col-sm-10 col-xs-9 middle">
       <div>
-        <b><?
-          $summHighlightedTitle = $this->driver->getHighlightedTitle();
-          $summTitle = $this->driver->getTitle();
-          if (!empty($summHighlightedTitle)) {
-              echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-          } else if (!empty($summTitle)) {
-              echo $this->escapeHtml($this->truncate($summTitle, 180));
-          } else {
-              echo $this->transEsc('Title not available');
-          }
-        ?></b>
+        <b>
+          <?=$this->record($this->driver)->getTitleHtml()?>
+        </b>
       </div>
 
       <div>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
index 3f378ca3cd1c7e68893697acceacef6386f499d6..6db22f3fde9c7704106af6e1d65325891ea4b131 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -25,17 +25,8 @@
   <div class="col-xs-6 middle">
     <div class="resultItemLine1">
       <a href="<?=$this->recordLink()->getUrl($this->driver)?>">
-      <?
-        $summHighlightedTitle = $this->driver->getHighlightedTitle();
-        $summTitle = $this->driver->getTitle();
-        if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-        } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?></a>
+        <?=$this->record($this->driver)->getTitleHtml()?>
+      </a>
     </div>
 
     <div class="resultItemLine2">
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
index 67c96dee649320f364787a8a4adf9f582d59db66..f0271bedabc867d84d71f234e0750bb2d6125cbd 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-grid.phtml
@@ -31,17 +31,9 @@ $urls = $this->record($this->driver)->getLinkDetails();
     <? endif; ?>
   <? endif; ?>
   <div>
-    <a class="title" href="<?=$this->recordLink()->getUrl($this->driver)?>"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 80));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a class="title" href="<?=$this->recordLink()->getUrl($this->driver)?>">
+      <?=$this->record($this->driver)->getTitleHtml(80)?>
+    </a>
     <? if ($openUrlActive || !empty($urls)): ?>
       <br/><br/>
       <? if ($openUrlActive): ?>
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
index c9e2be7d15e0c61ad992aa8432ecc300badc4d60..4327aaeeab5865c2348a356cc3275d119a214578 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -14,17 +14,7 @@
     <div class="col-sm-7 col-xs-6 middle">
       <div>
         <a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="title">
-        <?
-          $summHighlightedTitle = $this->driver->getHighlightedTitle();
-          $summTitle = $this->driver->getTitle();
-          if (!empty($summHighlightedTitle)) {
-            echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-          } else if (!empty($summTitle)) {
-            echo $this->escapeHtml($this->truncate($summTitle, 180));
-          } else {
-            echo $this->transEsc('Title not available');
-          }
-        ?>
+          <?=$this->record($this->driver)->getTitleHtml()?>
         </a>
       </div>
 
diff --git a/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
index b5a0ecd1342ed1dd944278898f257efd2269614d..0e7e5c518cf906dd5c0d48e925e41eabe9ea174e 100644
--- a/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/bootstrap3/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,9 @@
 ?>
 <div class="listentry col-xs-11">
   <div class="resultItemLine1">
-    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title"><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></a>
+    <a href="<?=$this->escapeHtmlAttr($url)?>" class="title">
+      <?=$this->record($this->driver)->getTitleHtml()?>
+    </a>
   </div>
 
   <div class="resultItemLine2">
diff --git a/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
index 66ce9ddb2756dfa9b3fc96bd39152d603912e4be..df1627a06f51d642211867c5cb49467cf059d235 100644
--- a/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/LibGuides/result-list.phtml
@@ -3,13 +3,6 @@
 ?>
 <a rel="external" href="<?=$this->escapeHtmlAttr($url)?>">
   <div class="result">
-    <h3><?
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
   </div>
 </a>
diff --git a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
index 10a10b6b5689935bea78eae773b6ac9123454885..ca0a884fca358101e69433678b0145442bf39d97 100644
--- a/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/Pazpar2/result-list.phtml
@@ -1,17 +1,7 @@
 <b>
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?
       $summHighlightedAuthor = $this->driver->getHighlightedAuthor();
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
index 056f5a0e3d0f39f60a3bed56e9f5daa5d24ca75c..bd2c8e7b4bd86464cd53df380649c38f9b8d0a0d 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/list-entry.phtml
@@ -13,16 +13,7 @@
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3>
-      <?
-        $listTitle = $this->driver->getTitle();
-        if (!empty($listTitle)) {
-            echo $this->escapeHtml($this->truncate($listTitle, 180));
-        } else {
-            echo $this->transEsc('Title not available');
-        }
-      ?>
-    </h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $listAuthor = $this->driver->getPrimaryAuthor(); if (!empty($listAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?=$this->escapeHtml($listAuthor)?></p>
     <? endif; ?>
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
index ce04278048f67bbdc05f1265ccfd9401b1ae0701..31c5f2e60a9da878d6aed0f728ceb8c04dd69e3e 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrDefault/result-list.phtml
@@ -1,17 +1,7 @@
 <a rel="external" href="<?=$this->recordLink()->getUrl($this->driver)?>">
   <div class="result source<?=$this->escapeHtmlAttr($this->driver->getResourceSource())?> recordId<?=$this->driver->supportsAjaxStatus()?' ajaxItemId':''?>">
     <input type="hidden" value="<?=$this->escapeHtmlAttr($this->driver->getUniqueID())?>" class="hiddenId" />
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
     <? $summAuthor = $this->driver->getPrimaryAuthor(); if (!empty($summAuthor)): ?>
       <p><?=$this->transEsc('by')?> <?
       $summHighlightedAuthor = $this->driver->getHighlightedAuthor();
diff --git a/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml b/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
index c1bcfddbdd90633c104f06aac05890ce8eeff36d..b205c9e871992dc0726e27edb1fe8323094606d1 100644
--- a/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
+++ b/themes/jquerymobile/templates/RecordDriver/SolrWeb/result-list.phtml
@@ -3,17 +3,7 @@
 ?>
 <a rel="external" href="<?=$this->escapeHtmlAttr($url)?>">
   <div class="result">
-    <h3><?
-      $summHighlightedTitle = $this->driver->getHighlightedTitle();
-      $summTitle = $this->driver->getTitle();
-      if (!empty($summHighlightedTitle)) {
-          echo $this->highlight($this->addEllipsis($summHighlightedTitle, $summTitle));
-      } else if (!empty($summTitle)) {
-          echo $this->escapeHtml($this->truncate($summTitle, 180));
-      } else {
-          echo $this->transEsc('Title not available');
-      }
-    ?></h3>
+    <h3><?=$this->record($this->driver)->getTitleHtml()?></h3>
   </div>
   <? $snippet = $this->driver->getHighlightedSnippet(); ?>
   <? $summary = $this->driver->getSummary(); ?>