diff --git a/module/finc/src/finc/ILS/Driver/FincLibero.php b/module/finc/src/finc/ILS/Driver/FincLibero.php
index 85a3a419e41bc0758579e7d6e4fe9a37502d986e..683a3f94a850ec6fcf39170c83aac0e0330260a4 100644
--- a/module/finc/src/finc/ILS/Driver/FincLibero.php
+++ b/module/finc/src/finc/ILS/Driver/FincLibero.php
@@ -136,6 +136,119 @@ class FincLibero extends FincILS implements TranslatorAwareInterface
         return preg_quote(substr($this->daiaIdPrefix, 0, strpos($this->daiaIdPrefix, ':')+1));
     }
 
+    /**
+     * Parse an array with DAIA status information.
+     * Copies \VuFind\ILS\Driver\DAIA::parseDaiaArray to enable finc-specific
+     * titleHoldLogic
+     *
+     * @param string $id        Record id for the DAIA array.
+     * @param array  $daiaArray Array with raw DAIA status information.
+     *
+     * @return array            Array with VuFind compatible status information.
+     */
+    protected function parseDaiaArray($id, $daiaArray)
+    {
+        $doc_id = null;
+        $doc_href = null;
+
+        if (isset($daiaArray['id'])) {
+            $doc_id = $daiaArray['id'];
+        }
+
+        if (isset($daiaArray['href'])) {
+            // url of the document (not needed for VuFind)
+            $doc_href = $daiaArray['href'];
+        }
+
+        if (isset($daiaArray['message'])) {
+            // log messages for debugging
+            $this->logMessages($daiaArray['message'], 'document');
+        }
+
+        // if one or more items exist, iterate and build result-item
+        if (isset($daiaArray['item']) && is_array($daiaArray['item'])) {
+            $isTitleHold = null;
+            $isTitleHoldable = $this->hasTitleHolds();
+            $number = 0;
+            foreach ($daiaArray['item'] as $item) {
+                // if it is a title-holdable record, the first item is a dummy
+                // that delivers the title hold information and MUST NOT be
+                // forwarded as an actual piece of availability information
+                // instead, all following items MUST be marked as title-holdable,
+                // to enable the frontend to display an adequate link
+                if ($isTitleHoldable && !$isTitleHold) {
+                    if ($isTitleHold = $this->isTitleHold($item)) {
+                        $titleHoldId = $item['id'];
+                        continue;
+                    }
+                }
+                $result_item = [];
+                $result_item['id'] = $id;
+
+                // custom DAIA field
+                $result_item['doc_id'] = $doc_id;
+                if (
+                    $isTitleHold
+                    &&
+                    (
+                        !isset($this->noTitleHoldStatuses)
+                        ||
+                        empty($this->noTitleHoldStatuses)
+                        ||
+                        !in_array($item['localIlsStatus'],$this->noTitleHoldStatuses)
+                    )
+                ) {
+                    $result_item['item_id'] = $titleHoldId;
+                }
+
+                // custom DAIA field used in getHoldLink()
+                $result_item['ilslink']
+                    = (isset($item['href']) ? $item['href'] : $doc_href);
+                if ($isTitleHold) {
+                    $result_item['addTitleHoldLink'] = TRUE;
+                }
+
+                // count items
+                $number++;
+                $result_item['number'] = $this->getItemNumber($item, $number);
+
+                // set default value for barcode
+                $result_item['barcode'] = $this->getItemBarcode($item);
+
+                // set default value for reserve
+                $result_item['reserve'] = $this->getItemReserveStatus($item);
+
+                // get callnumber
+                $result_item['callnumber'] = $this->getItemCallnumber($item);
+
+                // get location
+                $result_item['location'] = $this->getItemDepartment($item);
+
+                // custom DAIA field
+                $result_item['locationid'] = $this->getItemDepartmentId($item);
+
+                // get location link
+                $result_item['locationhref'] = $this->getItemDepartmentLink($item);
+
+                // custom DAIA field
+                $result_item['storage'] = $this->getItemStorage($item);
+
+                // custom DAIA field
+                $result_item['storageid'] = $this->getItemStorageId($item);
+
+                // custom DAIA field
+                $result_item['storagehref'] = $this->getItemStorageLink($item);
+
+                // status and availability will be calculated in own function
+                $result_item = $this->getItemStatus($item) + $result_item;
+
+                // add result_item to the result array
+                $result[] = $result_item;
+            } // end iteration on item
+        }
+        return $result;
+    }
+
     /**
      * FincLibero specific overrides of PAIA methods
      */
@@ -826,6 +939,17 @@ class FincLibero extends FincILS implements TranslatorAwareInterface
         return null;
     }
 
+    /**
+     * May there be Title holdable items in this instance?
+     * Inherited FincLibero drivers should set see $titleHoldLimitations
+     * to achieve this
+     *
+     * @return bool
+     */
+    public function hasTitleHolds() {
+        return isset($this->titleHoldLimitations);
+    }
+
     /**
      * Place Title Hold
      *