---
title: "Upgrading from 2.3 to 3.0"
manual: "Academic Contacts for Pages"
version: "main"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0@main"
source: "Upgrade/From23To30.rst"
rendered: "2026-10-26T19:20:19+00:00"
---

# Upgrading from 2.3 to 3.0 {#upgrade-from-2-3-to-3-0}

This page takes an installation of **academic_contacts4pages** 2.3
straight to 3.0, without the step to 2.4. Version 3.0 drops TYPO3 12, renders
the contact list with speaking classes and the profile images as responsive
pictures, and renames the icons of the extension. From 2.4 it takes over the
configuration per component, the content element that stays hidden until a site
enables it, a position of its own for a contact in its contract and in its
contacts role, and an upgrade wizard for the content elements of version 1.x.
Version 3.0 replaces no step of 2.4 for this extension, so the page leaves none
out. Work through the sections in order. Skip a step that does not apply to the
installation.

## Before you start {#upgrade-from-2-3-to-3-0-before-you-start}

Version 3.0 runs on TYPO3 13.4 from 13.4.35 on and on TYPO3 14.3 from 14.3.7
on, with PHP 8.2 or later.

**academic_contacts4pages** 3.0 needs these packages. Upgrade them
first or in the same deployment, in this order:

-   [`fgtclb/environment-state-manager`](https://packagist.org/packages/fgtclb/environment-state-manager) 2.x, new since 2.4, which
    **academic_base** 3.0 and **academic_persons** 3.0 require.
    Composer installs it on its own. A classic installation installs
    **environment_state_manager** 2.x before it activates either of
    them.
-   [`fgtclb/academic-base`](https://packagist.org/packages/fgtclb/academic-base) 3.0, the same release as this extension.
-   [`fgtclb/academic-persons`](https://packagist.org/packages/fgtclb/academic-persons) 3.0, the same release as this
    extension. Its upgrade chapter has steps of its own.

The extension declares the system extension **install** as a
dependency since 2.4, for its upgrade wizards. TYPO3 keeps that extension
active in every installation, so this needs no action.

These changes have to ship in the same deployment as the update:

-   A site without the site set includes the page TSconfig of the component,
    or the content element is not offered, see
    [Include the components](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-components@main).
-   A site package that imports a `setup.typoscript` of this extension
    imports the `constants.typoscript` of the same folder as well, or
    the plugin fails with a missing template, see
    [Adjust your own configuration](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-own-configuration@main).
-   A view that renders the persons partials with replaced partial root paths
    lists the path of **academic_base**, see
    [The contact image and the persons partials](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-images@main).

The module paths on this page are those of TYPO3 13, where the upgrade runs.

## Update TYPO3 first {#upgrade-from-2-3-to-3-0-typo3}

Update TYPO3 to 13.4.35 or later while the site still runs 2.3, which supports
TYPO3 13.4. Version 3.0 no longer installs on TYPO3 12, and Composer and the
Extension Manager refuse it next to an older patch release of TYPO3 13.

Stay on TYPO3 13 until the upgrade is complete. This extension requires
**academic_persons**, whose content element wizard reads the column
`tt_content.list_type`, which TYPO3 14 removes, so it only runs on
TYPO3 13, see its [upgrade chapter](https://docs.typo3.org/p/fgtclb/academic-persons/main/en-us/Upgrade/From23To30.html).
The same holds for the content element wizards of **academic_jobs**,
**academic_persons_edit** and **academic_projects** when the
installation also has them. Move to TYPO3 14.3.7 or later once they have run.

See [Breaking: Removed TYPO3 v12 support](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-removed-typo3-v12-support@main) and
[Important: TYPO3 13.4.35 or 14.3.7 is required](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-minimum-typo3-versions@main).

## Update the package {#upgrade-from-2-3-to-3-0-package}

```bash
composer require -W \
    'fgtclb/academic-base':'~3.0.0' \
    'fgtclb/academic-persons':'~3.0.0' \
    'fgtclb/academic-contacts4pages':'~3.0.0'
```

On a classic installation, install **environment_state_manager** 2.x
from the TER in **Admin Tools > Extensions** first, then update
**academic_base**, **academic_persons** and
**academic_contacts4pages** there, in this order. Run the commands of
this page with `typo3/sysext/core/bin/typo3` instead of
`vendor/bin/typo3`.

```bash
vendor/bin/typo3 cache:flush
```

## Update the database {#upgrade-from-2-3-to-3-0-database}

```bash
vendor/bin/typo3 extension:setup
```

Or apply the changes in **Admin Tools > Maintenance > Analyze
Database Structure**.

For this extension the comparison adds five columns to
`tx_academiccontacts4pages_domain_model_contact`:

-   `contract_sorting` and `role_sorting`, the order of a contact in
    its contract and in its contacts role. Until the wizard of the next section
    fills them, both hold `0`, see
    [Important: Contracts and contacts roles sort their contacts on their own](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-contract-and-role-sort-their-contacts@main).
-   `email_address`, `phone_number` and `physical_address`, the
    address records a contact displays. The default `0` means
    **Display all**, the output of every existing contact, see
    [Feature: Dedicated selection of address records](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-dedicated-address-record-selection@main).

It also applies the changes of the index definitions TYPO3 13.4.35 and 14.3.7
bring, and those of **academic_persons**. The contract table of that
extension, to which page contacts belong as inline children, gains the columns
of a workspace aware table, so a contract and its page contacts are drafted
and published together. The section **Update the database** of the
[upgrade chapter of academic_persons](https://docs.typo3.org/p/fgtclb/academic-persons/main/en-us/Upgrade/From23To30.html)
describes the comparison of that table on SQLite. See
[Important: The contact inline parent is now workspace aware](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-contact-inline-parent-is-workspace-aware@main).

## Run the upgrade wizards {#upgrade-from-2-3-to-3-0-wizards}

Both wizards need the database changes of the previous section. Run them in
this order, in **Admin Tools > Upgrade > Upgrade Wizard** or on the
command line. Mind the identifiers, the first one is spelled without the s
of Contacts.

1.  `academicContact4pages_seedContactSecondarySorting`, **Seed the
    contact sort order of contracts and contacts roles**. It fills the two new
    sort columns with the order the contract and contacts role forms show
    today. Run it right after the database comparison: until it has run, every
    contact holds `0` in both columns, and a contact saved in the backend
    gets no position of its own in those lists. Running it again is
    harmless.

    ```bash
    vendor/bin/typo3 upgrade:run academicContact4pages_seedContactSecondarySorting
    ```

    See [Important: Contracts and contacts roles sort their contacts on their own](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-contract-and-role-sort-their-contacts@main).
1.  `academicContacts4pages_pluginUpgradeWizard`, **Migrate the
    academic_contacts4pages plugins of version 1.x**. It renames the content
    type `academiccontacts4pages_contactslist` of version 1.x to
    `academiccontacts4pages_list` in every content element, and carries
    the permission of backend user groups over. It replaces
    `academicContact4pages_pluginUpgradeWizard` of versions 2.0 to 2.3, which
    looked for a misspelled type and never migrated anything. The new wizard is
    a new class, and TYPO3 records a wizard as done by its class, so it is
    offered also where the old one is marked done. It is offered only while a
    content element or a backend user group of version 1.x is left, so an
    installation that started with 2.0 or later never sees it.

    ```bash
    vendor/bin/typo3 upgrade:run academicContacts4pages_pluginUpgradeWizard
    ```

    TypoScript, page TSconfig or templates of a site package that name the old
    type change it to `academiccontacts4pages_list` by hand. See
    [Important: A new upgrade wizard migrates the plugins of version 1.x](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-ace-897-academic-contacts4pages@main) and
    [Upgrading from version 1.x](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:installation-upgrade-from-version-1@main).

A wizard that TYPO3 recorded as done is offered again once it is marked
undone. TYPO3 13 marks a wizard undone with
`vendor/bin/typo3 upgrade:mark:undone <identifier>`.

## Adapt the configuration {#upgrade-from-2-3-to-3-0-configuration}

The TypoScript and the page TSconfig are delivered per content element since
2.4, and the content element is hidden in the whole installation until the page
TSconfig of its component is included. See
[Breaking: Site sets and static templates have been restructured](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-site-sets-and-static-templates-restructured@main).

### The upgrade check {#upgrade-from-2-3-to-3-0-upgrade-check}

The console command `academic:upgrade:check` of **academic_base**
reads the stored configuration of the installation and reports the static
templates, page TSconfig imports and site sets that no longer reach an academic
extension. Run it on the staging copy right after the package update, and again
once the steps of this section are done:

```bash
vendor/bin/typo3 academic:upgrade:check
```

With the extension key and a site it also compares the template overrides of
the site with the templates this extension ships:

```bash
vendor/bin/typo3 academic:upgrade:check academic_contacts4pages --site=<site identifier>
```

A folder that overrides the persons partials for this plugin as well is
checked with **academic_persons**. The check of
**academic_contacts4pages** compares it with the partials of this
extension, which ships no `Profile/` partials, and reports every file in
it as `missing-upstream`. Each finding, and what to do about it, is
described in the [upgrade check](https://docs.typo3.org/p/fgtclb/academic-base/main/en-us/UpgradeCheck/Index.html#upgrade-check)
of **academic_base**.

### Include the components {#upgrade-from-2-3-to-3-0-components}

-   **Site set.** A site that depends on the set
    `fgtclb/academic-contacts4pages` needs no change. The set keeps its name
    and brings the page TSconfig along.
-   **Static template.** The stored entry of 2.3 keeps working as
    **Academic Contacts4Pages: Path up to 2.3 (deprecated, use All
    components) (academic_contacts4pages)**, which is removed in version 4.0.
    Replace it with **Academic Contacts4Pages: All components
    (academic_contacts4pages)** in the field **Include TypoScript sets**
    on the tab **Advanced Options** of the template record. That entry
    brings the shared plugin settings of **academic_persons** along, so
    remove a separate entry **Academic Persons: Shared plugin settings
    (academic_persons)**, called **Academic Persons Settings
    (academic_persons)** in 2.3, from the same record. See
    [Deprecation: The static template path of version 2.3](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:deprecation-legacy-static-template-path@main).
-   **Page TSconfig.** A site without the site set adds
    **Academic Contacts4Pages: All components
    (academic_contacts4pages)** in the field **Include static Page
    TSconfig (from extensions)** on the tab **Resources** of its root
    page, see [Include static page TSconfig](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:static-pagetsconfig@main). Without it the content element is not
    offered for new content.
-   Use one of the two mechanisms per site, see
    [Do not combine both](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:one-mechanism-per-site@main).

Until a component is included, an existing content element of it keeps
rendering and keeps its type: **academic_base** shows the stored type
in the field **Type** followed by
**(not enabled on this page)**, and saving keeps it. The warning of the
2.4 changelog entry that saving such a record rewrites its type describes the
state before a fix that **academic_base** 2.4 carries as well, see
[its changelog entry](https://docs.typo3.org/p/fgtclb/academic-base/main/en-us/Changelog/2.4/Important-HiddenContentTypeStaysSelectable.html#important-ace-666-academic-base).
A content element that a page TSconfig of your own already turned into another
type is not repaired. Correct it by hand from its record history.

### Adjust your own configuration {#upgrade-from-2-3-to-3-0-own-configuration}

-   The page TSconfig directory is `Configuration/TSconfig/` now, and the
    TypoScript moved into `Configuration/TypoScript/List/`. Take the new
    path of every `@import` from the table of the changelog entry
    linked above. An import of a missing file fails silently.
-   The setup reads constants now, the Fluid root paths of the plugin and the
    switch for the header of the content element. A site package that imports
    a `setup.typoscript` of this extension imports the
    `constants.typoscript` of the same folder into its constants as well.
    Without it the plugin fails with a missing template, and the header renders
    as if it were switched on:

    **TypoScript constants of the site package**

    ```typoscript
    @import 'EXT:academic_contacts4pages/Configuration/TypoScript/List/constants.typoscript'
    ```
-   A site whose content element layout renders no header can switch the
    header of the contact list on with
    `plugin.tx_academiccontacts4pages.renderContentElementHeader = 1`,
    see [Feature: The contact list can render the content element header](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-1790440965@main) and
    [The header of the content elements](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:configuration-content-element-header@main).
-   A site package that replaces the shipped setup with a copy of its own adds
    `plugin.tx_academiccontacts4pages.settings.groupByRole = 1` to
    the copy. Existing content elements store no value for the option
    **Group by role** and read this default, see
    [Feature: Optional role grouping and one partial per contact](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-1790316809@main).
-   A backend user group whose members set the language of a page contact
    needs `tx_academiccontacts4pages_domain_model_contact:sys_language_uid` in
    its allowed excludefields. A site that ran 2.3 on TYPO3 12 adds it, see
    [Important: Translations of page contacts keep their parent](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-1791547202@main).
-   The contacts take the crop variant and the gender placeholders of the
    persons lists, set in the site settings of **academic_persons**.
    See [Important: Contacts follow the image settings of the persons extension](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-1790709369@main).

## Adapt templates and assets {#upgrade-from-2-3-to-3-0-templates}

### Classes and styles {#upgrade-from-2-3-to-3-0-classes}

The templates render speaking classes now, shared by all academic extensions,
and no classes of the theme they were developed with. The card of a contact is
the profile item of **academic_persons**, which carries the speaking
classes of that extension, see its [chapter Styling](https://docs.typo3.org/p/fgtclb/academic-persons/main/en-us/Styling/Index.html).
The extension ships no stylesheet. Move the selectors of the site stylesheet to
the classes in the table of
[Breaking: Contact list carries speaking classes](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-contacts4pages-speaking-frontend-classes@main). The chapter
[Styling](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:styling@main) describes the markup, and [An example](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:styling-example@main) names the
stylesheets of the development instances as a starting point.

### The contact image and the persons partials {#upgrade-from-2-3-to-3-0-images}

The image of a contact is a `<picture>` with WebP sources now, and a
contact whose profile has no image shows the placeholder of the persons
plugins. CSS that selects the image as a direct child of the card no longer
matches. To keep contacts without an image empty, set
`plugin.tx_academicpersons.image.placeholder.default` to an empty
value. A view that renders `Profile/Item`, the plugin view with replaced
partial root paths or the page view of a page template, lists the path of
**academic_base** below the others:

```typoscript
plugin.tx_academiccontacts4pages.view.partialRootPaths {
    -1 = EXT:academic_base/Resources/Private/Partials/
}
```

See [Breaking: Profile images render as a responsive picture](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-contacts4pages-profile-images-render-as-picture@main).

The partial `Profile/Item.html` of **academic_persons**, which
renders every contact, is built from small partials now: the detail link, the
name, the contracts and the image. The name leaves out an empty part and shows
the academic title. A copy of `Profile/Item.html` keeps rendering what it
rendered before. Drop it in favour of the small partial it was meant to change,
described in the [chapter Templates of academic_persons](https://docs.typo3.org/p/fgtclb/academic-persons/main/en-us/Templates/Index.html).
This plugin reads the persons partials through partial root paths of its own,
so an override of them is registered for
`plugin.tx_academiccontacts4pages` as well as for
`plugin.tx_academicpersons`. See
[Important: The profile item is built from small partials](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-profile-item-partials-are-overridable@main).

### Icons {#upgrade-from-2-3-to-3-0-icons}

The icons of the extension are replaced and have new identifiers. They are
backend icons, registered in [`Configuration/Icons.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Configuration/Icons.html#file-extension-configuration-icons-php):

| 2.3 identifier | 3.0 identifier |
| --- | --- |
| `academic_contacts4pages` | `tx-academiccontacts4pages-plugin-contacts` |
| `tx_academiccontacts4pages_domain_model_contact` | `tx-academiccontacts4pages-record-contact` |
| `tx_academiccontacts4pages_domain_model_role` | `tx-academiccontacts4pages-record-role` |

`tx_academiccontacts4pages_domain_model_contract` is removed without a
successor, and the files `Resources/Public/Icons/Contract.svg` and
`Resources/Public/Icons/Role.svg` are removed. Replace the identifiers
in templates, page TSconfig, TCA overrides and PHP code, move a replacement
icon in the [`Configuration/Icons.php`](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/FileStructure/Configuration/Icons.html#file-extension-configuration-icons-php) of a site package to the new
identifier, and change `.icon-*` selectors. See
[Breaking: Icons replaced and their identifiers renamed](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-contacts4pages-icon-identifiers-renamed@main).

### Template overrides {#upgrade-from-2-3-to-3-0-overrides}

Versions 2.4 and 3.0 change these templates and partials. A copy of one of them
in a site package keeps rendering the copy, so compare each copy with the
shipped file of 3.0 and take over the changes. The paths below are relative to
`Resources/Private/`:

| File | What changed | Entry |
| --- | --- | --- |
| `Templates/Contacts/List.html` | Contacts without a role are rendered after the role groups, from the new variable `{contactsWithoutRole}`. The option **Group by role** switches the role groups off, and every contact renders through the new partial `Partials/Contacts/Item.html`. The contacts sit in an `ace-content`, each group in an `ace-itemlist`, the outermost element carries `academic-contacts4pages-list`, and the header of the content element renders while `settings.renderContentElementHeader` is set. | [Important: Contacts without a role are listed too](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-ace-322-academic-contacts4pages@main), [Feature: Optional role grouping and one partial per contact](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-1790316809@main), [Classes and styles](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-classes@main) |
| `Partials/Contacts/Item.html` | New. A site package that already ships a partial of that name in a partial root path of this plugin has it rendered for every contact now. Rename it, or turn it into the contact card. The role carries `ace-role`. | [Feature: Optional role grouping and one partial per contact](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-1790316809@main), [Classes and styles](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-classes@main) |

The view variable `{contacts}` is a plain list now, no query result. A
template that reads `{contacts.first}` gets nothing, see
[Important: Contacts without a visible profile are skipped](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-contacts-without-visible-profile-are-skipped@main).

The upgrade check with the extension key and a site compares a copy with the
shipped file, see [The upgrade check](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-upgrade-check@main).

## Adapt your code {#upgrade-from-2-3-to-3-0-code}

-   A class that extends
    `\FGTCLB\AcademicContacts4pages\Domain\Repository\ContactRepository`
    and overrides `findByPid()` adds the parameter
    `bool $showHidden = false`, see
    [Breaking: Extended ContactRepository::findByPid() signature](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-ace-250-academic-contacts4pages@main).
-   `\FGTCLB\AcademicContacts4pages\Backend\FormEngine\ContractItemsProcFunc`
    is removed. Own TCA or FlexForm configuration uses
    `\FGTCLB\AcademicPersons\Backend\FormEngine\ContractItems->itemsProcFunc`
    instead, see [Breaking: Removed duplicated ContractItemsProcFunc in EXT:academic_contacts4pages](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:breaking-1783613369@main).
-   A subclass of
    `\FGTCLB\AcademicContacts4pages\DataProcessing\ContactsProcessor`
    that is named in TypoScript has to be autowired by the `Services.yaml`
    of its site package, because the processor takes its collaborator through
    the constructor. Code that reads the contacts of the processor or the
    plugin as a query result accepts a list. See
    [Important: Contacts without a visible profile are skipped](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-contacts-without-visible-profile-are-skipped@main).
-   A copy of the controller of the content element, or a subclass of the
    processor, that only changes which contacts a page shows is replaced by a
    listener of
    `\FGTCLB\AcademicContacts4pages\Event\ModifyPageContactsEvent`. See
    [Feature: Page contacts processor options and contacts event](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-1790767100@main) and [ModifyPageContactsEvent](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:developers-page-contacts-event@main).
-   Additional view variables of the content element come from a listener of
    `\FGTCLB\AcademicBase\Event\ModifyPluginViewEvent`, see
    [Feature: The plugin dispatches the plugin view event](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:feature-plugin-view-event@main) and
    [ModifyPluginViewEvent](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:developers-event-modify-plugin-view-event@main).

## Check the result {#upgrade-from-2-3-to-3-0-check}

-   The upgrade check exits with `0`, without and with the extension key,
    see [The upgrade check](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:upgrade-from-2-3-to-3-0-upgrade-check@main). A folder that overrides
    the persons partials for this plugin as well is the exception: the check
    with this extension key reports its files as `missing-upstream`, so
    check that folder with **academic_persons** instead.
-   The content element, called **Person’s Contacts on the Page** now,
    is offered for new content on the pages that should have it, and existing
    ones keep their type. See
    [Important: Content elements have new titles and descriptions](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-content-element-titles-and-descriptions@main).
-   The order of the contacts on a page, in a contract and in a contacts role
    stays as it was after one of them is saved.
-   Pages that mix contacts with and without a role list all of them.
-   Translations of page contacts that an import created on TYPO3 12 may point
    at a wrong original. The query in [Important: Translations of page contacts keep their parent](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-1791547202@main) finds them.
-   Translated contacts may point at a translation of their contacts role, and
    localizing a contacts role may have left duplicates. The queries in
    [Important: Translated contacts keep their contacts role](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-translated-contacts-keep-their-role@main) find both.
-   The address selects of a page contact are relations. Existing page
    contacts get their rows in the reference index on their next save, or at
    once with `vendor/bin/typo3 referenceindex:update`, see
    [Important: The address selects of a page contact are relations](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-ace-481-academic-contacts4pages@main).
-   Every release of version 2 can hold page contacts that lost their page or
    their contacts role when a workspace was published by its publish date, or
    when a page and a contacts role were edited in the same workspace. The
    queries in [Important: Page contacts keep their page and role when either is published](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-page-contacts-keep-their-page-on-publish@main) find
    them.
-   Translated contacts that point at a page without a translation in their
    language are left from older versions. They are not rendered twice, and
    can be deleted, see [Important: Contacts of untranslated pages stay untranslated](https://docs.typo3.org/permalink/fgtclb/academic-contacts4pages:important-1788197604@main).
