Skip to content

PrestaShop Integration Guide

The Loxa PrestaShop module is a turnkey integration that handles insurance display, cart management and order data — no custom frontend or backend code required. Install the module, enter your API key on its configuration page, and Loxa Product Protection appears on your product pages automatically.

You can see the module in action on our PrestaShop Test Store. Three insurance integration types are supported: Add-on, Inclusive and Hybrid (inclusive cover with a paid extension). For details on what each type means, see the Generic Integration Guide.

The badge and sidebar use the same design as our Magento, WooCommerce, Shopify and BigCommerce integrations, so shoppers see the same Loxa experience on every platform.

Demo store access

The PrestaShop demo store is behind HTTP Basic Auth to keep it private. If you'd like access for evaluation, contact us at developers@loxacover.com.


Requirements

Requirement Version
PrestaShop 1.7.x or 8.x
PHP 7.4+ (the version your PrestaShop release supports)
MySQL / MariaDB 5.6+ / 10.x

One zip covers both PrestaShop 1.7 and 8. The module works with the Classic theme out of the box and supports custom themes through configurable selectors (see Theme Compatibility).


Installation

Download Module ZIP

This link always gives the latest release of the module.

Upload the module ZIP through the PrestaShop back office:

  1. Go to Modules > Module Manager.
  2. Click Upload a module at the top right of the page.
  3. Drop the ZIP onto the upload area, or click and select it.
  4. Wait for the green confirmation. The module installs itself and creates the database tables it needs.
  5. Click Configure on the Loxa Insurance row.

Updating the module

To update, download the latest ZIP above and upload it the same way. Your settings are kept.

Moving from version 1.x

Version 2.0.0 is a new version of the module, rebuilt to match our WooCommerce plugin. To move to it:

  1. Modules > Module Manager > Loxa Insurance > Uninstall. Your API key and the hidden insurance product are kept.
  2. Install 2.0.0 as above.
  3. On the configuration page, set the Environment (Test or Live — Loxa will tell you which), choose when to Send orders to Loxa, and switch the module on.

What changes from 1.x:

  • No URLs to enter. The API base URL and endpoint fields are replaced by a Test / Live Environment setting.
  • No HMAC secret to manage. Quotes are signed with a key derived from your store's own secret, so there is nothing to set or rotate.
  • Orders are sent to Loxa by the module, and every protected order gets a Loxa product protection panel. Loxa can still read missed orders through the webservice (see Order Processing).
  • The in-back-office updater and its GitHub token are gone. Update by uploading the latest ZIP.
  • Sample-quote (dummy payload) mode, analytics settings and the old badge design are removed.

Orders placed with 1.x are not sent again.


Create the Insurance Product

The module uses a hidden virtual product (reference loxa-insurance) as the line item for insurance in the cart. Create it once after installation.

  1. On the module's configuration page, click Create insurance product (at the top of the page).
  2. The module creates a virtual, untaxed product with reference loxa-insurance, base price 0.00, hidden from the catalogue, with the Loxa logo as its image.

Each insurance line in the cart is priced at the premium from its own quote, so several products with different premiums can be covered in the same basket.

Required step

Insurance cannot be added to the cart until this product exists. If the product is missing, customers will not see insurance options on product pages.

Catalogue artefacts you'll see

Once insurance starts being added to carts, the module creates a Loxa Plan attribute group and combinations of the insurance product, one per plan and insured product (for example "5 Year Product Protection for 3 Seater Sofa"). This is how each insured product gets its own insurance line with a readable name in the basket. The insurance product is hidden, so customers never see these in your catalogue. Don't delete them; the module manages them.


Configure the API

On the module's configuration page, fill in the API section:

Field Description
Enable Loxa Insurance Switch to Yes once everything else is set
API key Your API key provided by Loxa. Once saved it is never shown again; leave the field blank to keep it, or enter a new key to replace it
Environment Test while you set up, Live to sell real cover. Selects the Loxa API used for quotes and orders — there are no URLs to enter

Quote signing is automatic

Every quote the module receives is signed on your server and checked again when the customer adds to cart, so the premium charged is always the premium Loxa quoted. There is nothing to configure — the signing key is derived from your PrestaShop installation's own secret key.


How It Works

Once installed and configured, the module handles the full insurance lifecycle automatically:

┌─────────────────────────────────────────────────────────────────────┐
│  PRODUCT PAGE (browser)                                             │
│                                                                     │
│  1. Page loads → the module injects product data and settings       │
│  2. JS asks your server for a quote (/module/loxainsurance/price),  │
│     sending only product identifiers — never a price                │
│  3. Your server looks up the product's price itself, adds the API   │
│     key and asks the Loxa API for a quote                           │
│  4. Your server signs each quoted plan to the product and           │
│     combination it is for                                           │
│  5. JS renders the insurance badge and sidebar                      │
│  6. Customer adds cover → clicks "Add to cart"                      │
│                                                                     │
├─────────────────────────────────────────────────────────────────────┤
│  SERVER (PrestaShop)                                                │
│                                                                     │
│  7. Cart hook checks the quote's signature against the product      │
│     actually being added — a tampered, stale or out-of-date quote   │
│     is refused and the product is added without cover              │
│  8. Insurance is added as its own line, linked to that product's    │
│     line, at the quoted premium                                     │
│  9. Insurance quantity always follows its product line              │
│                                                                     │
├─────────────────────────────────────────────────────────────────────┤
│  CHECKOUT → ORDER                                                   │
│                                                                     │
│  10. actionValidateOrder records each protected line against the    │
│      order (shown in the order's Loxa product protection panel)     │
│                                                                     │
├─────────────────────────────────────────────────────────────────────┤
│  ORDER PROCESSING                                                   │
│                                                                     │
│  11. Once the order is paid (or ships), the module sends it to      │
│      Loxa in the background                                         │
│  12. Loxa creates the policies                                      │
│  13. Customer receives their welcome email and policy documents     │
└─────────────────────────────────────────────────────────────────────┘

What the Module Handles Automatically

You do not need to build any of the following — the module takes care of it:

  • Badge rendering — add-on, inclusive and hybrid badges in Loxa's standard design. The hybrid badge states the free cover and offers the paid extension in one card.
  • Insurance sidebar — plan picker, terms, FAQ and legal disclaimers, with the decision kept in view while the details scroll. On mobile it opens as a bottom sheet. It is keyboard- and screen-reader-accessible.
  • Combination re-pricing — when a customer selects a different combination (size, colour, etc.), the module quotes that combination at its own price.
  • Price protection — premiums are signed server-side and verified on add-to-cart, so they can't be changed in the browser. Prices are always looked up on your server, never taken from the browser. A quote is refused if the product's price has since risen by more than 5%, so cover always matches what the customer pays.
  • Cart line item management — each insured product gets its own insurance line at the correct premium, named after the plan and the product it protects. Removing an insured product removes its insurance.
  • Quantity synchronisation — insurance quantity follows its product line and can't be changed on its own. Cover applies to the whole product line.
  • Second-chance mechanism — optionally intercepts add-to-cart when the customer hasn't chosen cover and shows the sidebar as a reminder (configurable in settings). It only does so when there is cover to offer.
  • Quote-to-order persistence — insurance data follows the order through checkout and is shown on the back-office order page.
  • Compliance — opt-out flows for inclusive insurance are built in per Compliance Rules.
  • Catalogue visibility — the insurance virtual product is hidden from the shop catalogue and search results.
  • Quote caching and limits — a quote is reused for 5 minutes for the same product and price, so busy pages don't call Loxa on every view (clear it from the settings with Clear cached quotes), and calls to Loxa are rate limited per visitor and store-wide.
  • Post-purchase offers (optional) — items too expensive to protect at checkout can be offered protection by email after purchase. See Items Above the Point-of-Sale Limit.

Order Processing

When a customer checks out with insurance, the module records the insurance against the order and sends the order to Loxa, which creates the policies.

Sending orders to Loxa

Set Send orders to Loxa (under Orders on the configuration page) to choose when each protected order is sent:

Option When it is sent Cover starts
Off (default) Never —
When the order is paid When the order reaches a paid status. Bank transfer and cheque orders are sent once you confirm payment On the purchase date
When the order ships When the order reaches a shipped status (Shipped or Delivered) On the shipping date — use this for made-to-order or long-lead items, so cover doesn't start before the customer has the product

Orders are sent in the background, so checkout is never slowed down. If Loxa can't be reached, the module retries automatically over several hours. Cancelled and refunded orders are not sent.

No real customer data in Test

While the Environment is Test, orders are sent with a placeholder customer in place of the real name, email, phone and address. Real customer details are only ever sent to the Live API.

The Loxa product protection panel

Every order with protection, or with an item the customer asked about after purchase, shows a Loxa product protection panel on its back-office order page:

  • the protected items, with plan, plan code, premium and sum insured
  • whether the order has been sent to Loxa
  • an Activity log of every attempt — for example "Loxa: sent for policy creation (2 protected items)." The log holds order IDs and outcomes only, never customer details.

If an order couldn't be sent, Send to Loxa (create policy) in the panel sends it again.

Background tasks and the cron URL

Sending runs straight after checkout. Retries run whenever anyone opens the back office. To have retries run on time regardless, ask your host to call the cron URL shown in the module's Developer section every 5 minutes:

*/5 * * * * curl -fsS "https://store.example.com/module/loxainsurance/cron?token=…" > /dev/null

The URL carries a token unique to your store. Treat it like a password.

Webservice access for missed orders

As a back-up to sending, Loxa can collect any protected order it missed through your PrestaShop Webservice. Loxa will ask if you need to set this up. Because both routes identify an order by its PrestaShop order ID, an order Loxa has already received is never turned into a second policy.

  1. Go to Advanced Parameters > Webservice.
  2. Switch Enable PrestaShop's webservice to Yes and save.
  3. Click Add new webservice key.
  4. Generate a key, set Key description to "Loxa" and Status to Enabled.
  5. Under Permissions, grant GET (View) on only one resource: loxa_insurance_orders.
  6. Save, and share the key with Loxa through a secure channel.
Credential Description
Webservice Key Used as the HTTP Basic Auth username with an empty password
Webservice URL Your store base URL, e.g. https://store.example.com/api/

Single-resource access by design

Granting GET on loxa_insurance_orders is all Loxa needs. Do not also grant access to orders, customers, addresses or products — the resource exposes only the fields needed to issue a policy, and only for orders that include protection.

Keep the key secure

The webservice key grants read access to protected orders. Never send it over plain email or commit it to version control. Always serve the Webservice over HTTPS.

Example webservice record (GET /api/loxa_insurance_orders/{id})
{
  "loxa_insurance_order": {
    "id": 1024,
    "id_order": 4521,
    "id_order_detail": 12053,
    "id_order_detail_parent": 12052,
    "date_add": "2026-11-02 11:42:18",

    "order_reference": "XXKVDPZNB",
    "order_status_id": 2,
    "order_status": "Payment accepted",
    "order_total_paid": 1401.98,
    "order_currency": "GBP",
    "order_date": "2026-11-02 11:41:55",

    "customer_email": "j***@example.com",
    "customer_firstname": "Jane",
    "customer_lastname": "Doe",

    "delivery_address1": "12 Example Street",
    "delivery_address2": "",
    "delivery_city": "London",
    "delivery_postcode": "EC1A 1BB",
    "delivery_country": "GB",
    "delivery_phone": "07000 000000",

    "insurance_line": "{\"id_order_detail\":12053,\"sku\":\"loxa-insurance\",\"name\":\"5 Year Product Protection for 3 Seater Sofa\",\"quantity\":1,\"unit_price\":101.99,\"line_total\":101.99}",
    "parent_line":    "{\"id_order_detail\":12052,\"sku\":\"sofa-3-seater\",\"name\":\"3 Seater Sofa\",\"quantity\":1,\"unit_price\":1299.99,\"line_total\":1299.99}",

    "insurance_plan": "{\"code\":\"LDF5-20260119-23\",\"premium_raw\":\"101.99\",\"name\":\"Product Protection\",\"term\":\"5\",\"sum_insured\":\"1299.99\",\"inclusive_code\":\"\",\"category\":\"\",\"parent_sku\":\"sofa-3-seater\",\"parent_name\":\"3 Seater Sofa\"}"
  }
}
Field group Fields Notes
Order context order_reference, order_status_id, order_status, order_total_paid, order_currency, order_date Read live from the order — always reflects its current state
Customer customer_email, customer_firstname, customer_lastname Personal data, minimised — no date of birth, marketing preferences or customer ID
Delivery delivery_address1, delivery_address2, delivery_city, delivery_postcode, delivery_country, delivery_phone Personal data. The invoice address is not exposed
Line items insurance_line, parent_line JSON-encoded strings ({id_order_detail, sku, name, quantity, unit_price, line_total})
Plan insurance_plan JSON-encoded string — see Insurance data

id_order_detail_parent links the insurance line to the product line it protects, so each plan matches its product even when an order has several insured items.

Insurance data

Each protected line carries this plan data, shown in the order panel and returned by the webservice:

Field Description
code The insurance plan code (used by Loxa to identify the policy)
premium_raw Premium charged to the customer, per unit
name Plan display name
term Coverage term in years
sum_insured The insured product's price at the time of purchase
inclusive_code For a hybrid order, the code of the free cover the paid extension builds on; empty otherwise
category The Loxa category from Category Override, if used; empty otherwise
parent_sku Reference of the product being insured (the combination's, if it has one)
parent_name Name of the product being insured

Every value is set on your server from the verified quote and the cart — nothing is taken from the browser unchecked.

Cancellations

The module does not send cancellations or refunds to Loxa. If you need to notify Loxa of a cancellation, use the Cancellations endpoint or contact Loxa.


Items Above the Point-of-Sale Limit

Some plans have a point-of-sale limit: above a set price they can't be bought at the checkout. Those items can still be protected after purchase, up to the plan's limit of indemnity, if post-purchase is enabled for your store by Loxa.

This is optional. Turn it on with Post-purchase protection offers under Orders on the configuration page (off by default).

For those items the product page shows, in place of the badge:

☐ Click here if you're interested in product protection This item can't be protected at checkout. Tick the box and we'll email you your protection options after your order. Learn more →

Learn more opens the sidebar with the plan's description — no plans, prices or terms, as nothing is on sale yet.

When the customer ticks the box and checks out:

  1. The item is marked in the basket: "Product protection: We'll email you your options after your order".
  2. Once the order is paid, the module asks Loxa for a post-purchase offer for the ticked items — the order number, product reference, name and price only. No customer details are sent to Loxa.
  3. If anything can be protected, your store emails the customer a link to choose and buy cover from Loxa. The link lasts 30 days.

This happens whatever Send orders to Loxa is set to.

The order's Loxa product protection panel lists the items the customer asked about and records what happened. Send post-purchase offer there sends it again — the customer gets the same link while it's still valid.

The offer email

The email is sent with PrestaShop's own mail system, the same way as your order confirmations, with the subject "Protect your purchase". It lists the items, a button to view the protection options, the date the link expires, a note that there's no obligation to buy, and Loxa's regulatory disclaimer.

To change its layout or wording, copy the templates into your theme — module updates never overwrite your copy:

modules/loxainsurance/mails/en/loxa_post_purchase_offer.html  →  themes/<your-theme>/modules/loxainsurance/mails/en/
modules/loxainsurance/mails/en/loxa_post_purchase_offer.txt   →  themes/<your-theme>/modules/loxainsurance/mails/en/

The module ships English templates. For a store in another language, add a copy under that language's folder (e.g. mails/fr/).

Keep the required wording

If you change the template, keep the no-obligation line and Loxa's legal disclaimer, and don't describe the cover yourself: what's covered, the price and the documents are shown on Loxa's offer page.

Your store must be able to send email

If your store can't send email (common on staging and test sites), the order's activity log says the email could not be sent. Check Advanced Parameters > E-mail, then use Send post-purchase offer.

Post-purchase must be enabled

The tickbox only appears when Post-purchase protection offers is on and Loxa has enabled post-purchase for your store. Turning the setting off removes the tickbox; orders already placed with the box ticked still receive their offer. See the Post-Purchase Integration Guide for how post-purchase cover works.


Data Protection (GDPR)

Party Role
Retailer (you) Data controller for your customer data
Loxa Data processor for the personal data it receives — used solely to issue, administer and pay claims on the policy the customer bought

The lawful basis is performance of contract (Art. 6(1)(b) UK GDPR / EU GDPR): the customer has bought an insurance policy and the data is needed to provide it.

  • Minimum data. Orders sent to Loxa, and the webservice resource, carry only what a policy needs: the customer's name and email, the delivery address and phone, and the protected items.
  • Nothing in Test. In the Test environment orders carry a placeholder customer.
  • Post-purchase offers carry no customer data. Your store emails the customer itself.
  • Not stored twice. The webservice reads customer details live from your PrestaShop database on each request, so an erasure or correction you make in PrestaShop applies straight away.
  • Audited. Every read of loxa_insurance_orders is recorded in the ps_loxa_insurance_access_log table: the webservice key that made it, the connecting IP address, how many records were returned and when. No personal data is stored in the log, and uninstalling the module keeps it.

Theme Compatibility

The module is designed to work with standard PrestaShop themes. It places its anchor elements on the product page through PrestaShop's displayProductAdditionalInfo hook and renders the sidebar at the end of the page.

Theme Status Notes
Classic (PrestaShop 1.7 and 8) ✅ Works out of the box The badge sits above Quantity / Add to cart
Custom themes ⚠ May need config See below

The badge and sidebar are protected from your theme's own styles, so a theme's button or link styling won't restyle them. To match your brand, use the Custom CSS setting.

For custom themes that restructure the product page or use non-standard selectors for the add-to-cart button, quantity input or combination pickers, set the matching selectors under Product page. To place the badges somewhere specific, set the Add-on anchor selector / Inclusive anchor selector — the badge is inserted after the element they match.

If your theme does not render the displayProductAdditionalInfo hook, add the anchor elements to your templates/catalog/product.tpl manually:

<span id="loxa-prestashop-inclusive-anchor" data-loxa-prestashop-anchor="inclusive"></span>
<span id="loxa-prestashop-addon-anchor" data-loxa-prestashop-anchor="addon"></span>

Coming from 1.x

1.x used loxa-shopify-* anchor IDs. If you added anchors to your theme by hand, rename them to the ones above.


Admin Configuration Reference

All settings live on the module's configuration page: Modules > Module Manager > Loxa Insurance > Configure. The buttons at the top of the page create (or recreate) the insurance product and clear cached quotes.

API

Field Default Notes
Enable Loxa Insurance No Activates the module
API key (empty) Provided by Loxa. Never shown once saved; blank keeps the saved key
Environment Test Test or Live; selects the Loxa API for quotes and orders

Orders

Field Default Notes
Send orders to Loxa Off Off, When the order is paid or When the order ships — see Sending orders to Loxa
Post-purchase protection offers No Offers protection after purchase for items too expensive to protect at checkout — see Items Above the Point-of-Sale Limit

Product page

Field Default Notes
Add to cart selector (empty) Blank uses the Classic theme's add-to-cart button
Variant selector (empty) Optional; extra elements that change the combination, for themes that don't use PrestaShop's own
Quantity selector (empty) Blank uses #quantity_wanted
Buy now selector (empty) Optional; a "buy now" button that should carry the chosen cover too
Add-on anchor selector (empty) Optional; the add-on / hybrid badge is inserted after this element. Blank places it above the add-to-cart section
Inclusive anchor selector (empty) Optional; the inclusive badge is inserted after this element

Behaviour

Field Default Notes
Sidebar position Right Left or Right (desktop; on mobile the sidebar opens from the bottom)
Second chance No Shows the sidebar if the customer clicks add-to-cart without choosing cover
Variant delay (ms) 0 Wait this long after a combination changes before fetching a new quote
Exclusion tags (empty) Comma-separated tags or category names; products with any of them show no protection
Catalogue prices exclude VAT No Turn on only if your product prices have no tax rule; products are insured at the price plus 20%
Category override No Prices products in the Loxa category named by their tag or category prefixed with loxa- (e.g. loxa-furniture). Worked out on your server, never in the browser. Must be agreed with Loxa before use — Loxa also enables category override for your store, otherwise the category is ignored

Appearance

Field Default Notes
Show sidebar on add No The badge's Add / Extend button opens the sidebar instead of adding cover straight away
Show FAQ in sidebar Yes Shows Loxa's standard frequently-asked-questions in the sidebar
Font Loxa (Neulis Sans) Or System font to use your theme's font
Custom CSS (empty) Additional CSS for the badge and sidebar. Always takes priority over the module's own styles, so !important isn't needed

The quickest way to restyle is to override the module's colour and shape settings in Custom CSS:

:root {
  --loxa-v3-accent: #0a5c36;        /* buttons and selected plan */
  --loxa-v3-badge-bg: #f4f8f5;      /* badge background */
  --loxa-v3-radius-scale: 0;        /* 0 = square corners, 1 = default, 3 = pill */
}

Developer

Field Default Notes
Debug logging No Writes Loxa events to the PrestaShop log (Advanced Parameters > Logs), and [Loxa] messages to the browser console for signed-in employees only
Disable product page No Stops the badge loading on product pages, e.g. while a custom integration is built. Orders and offers still run
Cron URL — Shown under the section. See Background tasks and the cron URL

Troubleshooting

Insurance badges are not appearing on product pages

Check the following:

  1. Module is enabled — on the configuration page, Enable Loxa Insurance is Yes.
  2. API key and environment are set — the API key must be valid for the selected Environment (Test or Live).
  3. The insurance product exists — if not, click Create insurance product at the top of the configuration page.
  4. Product is insurable — the Loxa API must return insurable: true and active: true for the product. Turn on Debug logging to see [Loxa] console messages.
  5. Anchor elements exist — if your theme doesn't render displayProductAdditionalInfo, set the anchor selectors or add the anchors manually (see Theme Compatibility).
  6. Product is not excluded — check that the product's tags or categories don't match Exclusion tags.
  7. Caches are fresh — Advanced Parameters > Performance > Clear cache, then reload the product page.
  8. Recent changes in Loxa — a quote is reused for 5 minutes, so a change made in Loxa (for example a product's category) can take up to 5 minutes to show. To see it straight away, click Clear cached quotes at the top of the configuration page.
The product was added without its cover

The quote couldn't be verified, so the product went into the basket on its own. This happens if the page was left open for more than 24 hours (quotes expire), if the product's price rose by more than 5% after the quote, or if the quote was changed in the browser. Reloading the product page fetches a new quote — add the product with cover again.

If it happens on every attempt, turn on Debug logging and look for Loxa entries in Advanced Parameters > Logs.

Orders aren't reaching Loxa

Open the order and check the Activity log in its Loxa product protection panel — every attempt is recorded there.

  • No activity at all — check that Send orders to Loxa is not Off, that the order contains protection, and that the order has reached the chosen trigger (paid, or shipped).
  • "Retrying in N min" — Loxa couldn't be reached; the module will try again. If retries seem slow, set up the cron URL.
  • "NOT sent" — the order was rejected or ran out of retries. Fix the cause if the log gives one (e.g. no API key configured), then click Send to Loxa (create policy), or contact Loxa support.
A customer ticked \"interested in product protection\" but wasn't emailed

Check the order's Activity log:

  • Nothing about the offer — the order hasn't been paid yet (bank transfer and cheque orders are processed once you confirm payment).
  • "none of the items … can be protected after purchase" — Loxa couldn't cover the item after purchase, so no email was sent.
  • "not switched on for this store" — ask Loxa to enable post-purchase.
  • "the email to the customer could not be sent" — your store couldn't send email (see Your store must be able to send email). Fix your mail setup, then click Send post-purchase offer.
  • "its link was not a secure (https) address" — contact Loxa support.
The tickbox doesn't appear on an item above the point-of-sale limit
  1. Post-purchase protection offers is on (under Orders on the configuration page).
  2. Loxa has enabled post-purchase for your store, and the item is within the plan's limit of indemnity.
  3. For a product with combinations, the expensive combination is selected — each combination is quoted at its own price.
Express checkout buttons (PayPal, Klarna, Apple Pay) bypass insurance

Express checkout buttons on the product page start their own payment flow with the payment provider, bypassing the standard add-to-cart form. Insurance is never added through these flows.

Options:

  • Disable express checkout buttons on product pages — customers who add to cart normally will always be offered insurance
  • Use the Buy now selector setting if the button submits through the product form
  • Express checkout on the cart and checkout pages is unaffected since insurance is already in the cart
Insurance prices don't update when selecting a combination
  1. Check the Variant selector — if your theme uses custom dropdowns or swatches, you may need to set a CSS selector in settings.
  2. Adjust the Variant delay — if prices flash or re-fetch too quickly, increase it (e.g. 300).
How do I roll back to a previous version?

Contact Loxa for the release you need. Versioned ZIPs are kept for each release (for example /downloads/loxa-prestashop-insurance-2.0.0.zip). Going back from 2.0.0 to 1.x needs an uninstall first; talk to Loxa before you do.