diff --git a/module/VuFind/src/VuFind/Controller/EdsrecordController.php b/module/VuFind/src/VuFind/Controller/EdsrecordController.php
index 9b0569007d0101a2a0578567ac10e42ce14f8f4a..4ab9fb259fcad9f16e0644715f55ebd761c276eb 100644
--- a/module/VuFind/src/VuFind/Controller/EdsrecordController.php
+++ b/module/VuFind/src/VuFind/Controller/EdsrecordController.php
@@ -29,6 +29,7 @@ namespace VuFind\Controller;
 
 use Laminas\ServiceManager\ServiceLocatorInterface;
 use VuFind\Exception\Forbidden as ForbiddenException;
+use VuFindSearch\ParamBag;
 
 /**
  * EDS Record Controller
@@ -57,14 +58,18 @@ class EdsrecordController extends AbstractRecord
     }
 
     /**
-     * Action to display ePub.
+     * Redirect to an eBook.
+     *
+     * @param string $format Format of eBook to request from API.
+     * @param string $method Record driver method to use to obtain target URL.
      *
      * @return mixed
      */
-    public function epubAction()
+    protected function redirectToEbook($format, $method)
     {
-        $driver = $this->loadRecord();
-        //if the user is a guest, redirect them to the login screen.
+        $params = new ParamBag(['ebookpreferredformat' => $format]);
+        $driver = $this->loadRecord($params, true);
+        // If the user is a guest, redirect them to the login screen.
         $auth = $this->getAuthorizationService();
         if (!$auth->isGranted('access.EDSExtendedResults')) {
             if (!$this->getUser()) {
@@ -72,7 +77,17 @@ class EdsrecordController extends AbstractRecord
             }
             throw new ForbiddenException('Access denied.');
         }
-        return $this->redirect()->toUrl($driver->getEpubLink());
+        return $this->redirect()->toUrl($driver->tryMethod($method));
+    }
+
+    /**
+     * Action to display ePub.
+     *
+     * @return mixed
+     */
+    public function epubAction()
+    {
+        return $this->redirectToEbook('ebook-epub', 'getEpubLink');
     }
 
     /**
@@ -82,16 +97,7 @@ class EdsrecordController extends AbstractRecord
      */
     public function pdfAction()
     {
-        $driver = $this->loadRecord();
-        //if the user is a guest, redirect them to the login screen.
-        $auth = $this->getAuthorizationService();
-        if (!$auth->isGranted('access.EDSExtendedResults')) {
-            if (!$this->getUser()) {
-                return $this->forceLogin();
-            }
-            throw new ForbiddenException('Access denied.');
-        }
-        return $this->redirect()->toUrl($driver->getPdfLink());
+        return $this->redirectToEbook('ebook-pdf', 'getPdfLink');
     }
 
     /**
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
index d2cf32b607f4b0725b09cc589348fb62c82a732a..978c4e34557a4d7e83fda7d792df5e522897cd1b 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Backend.php
@@ -273,10 +273,16 @@ class Backend extends AbstractBackend
                 );
             }
             list($dbId, $an) = $parts;
-            $hlTerms = (null != $params)
+            $hlTerms = (null !== $params)
                 ? $params->get('highlightterms') : null;
+            $extras = [];
+            if (null !== $params
+                && ($eBookFormat = $params->get('ebookpreferredformat'))
+            ) {
+                $extras['ebookpreferredformat'] = $eBookFormat;
+            }
             $response = $this->client->retrieve(
-                $an, $dbId, $authenticationToken, $sessionToken, $hlTerms
+                $an, $dbId, $authenticationToken, $sessionToken, $hlTerms, $extras
             );
         } catch (ApiException $e) {
             // if the auth or session token was invalid, try once more
diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Base.php b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Base.php
index 373ccffc0f0e48b025721fd28613db18fe2db780..e7a0d70cb4602c4004fad8cfd17d4b67a9925030 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Base.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/EDS/Base.php
@@ -173,16 +173,17 @@ abstract class Base
      * @param string $sessionToken        Session token
      * @param string $highlightTerms      Comma separated list of terms to highlight
      * in the retrieved record responses
+     * @param array  $extraQueryParams    Extra query string parameters
      *
      * @return array    The requested record
      */
     public function retrieve($an, $dbId, $authenticationToken, $sessionToken,
-        $highlightTerms = null
+        $highlightTerms = null, $extraQueryParams = []
     ) {
         $this->debugPrint(
             "Get Record. an: $an, dbid: $dbId, $highlightTerms: $highlightTerms"
         );
-        $qs = ['an' => $an, 'dbid' => $dbId];
+        $qs = $extraQueryParams + ['an' => $an, 'dbid' => $dbId];
         if (null != $highlightTerms) {
             $qs['highlightterms'] = $highlightTerms;
         }