diff --git a/group-all.yml b/group-all.yml
index b99f764..121f582 100644
--- a/group-all.yml
+++ b/group-all.yml
@@ -14,19 +14,19 @@
 
   tasks:
     - name: Update and clean package cache
-      apt:
+      ansible.builtin.apt:
         update_cache: true
         cache_valid_time: 3600
         autoclean: true
       changed_when: false
 
     - name: Ensure unattended-upgrades is installed and up to date
-      apt:
+      ansible.builtin.apt:
         name: unattended-upgrades
         state: present
 
     - name: Setup unattended-upgrades
-      include_role:
+      ansible.builtin.include_role:
         name: hifis.unattended_upgrades
       vars:
         unattended_origins_patterns:
diff --git a/host-krypton.yml b/host-krypton.yml
index f82daa8..2efdf68 100644
--- a/host-krypton.yml
+++ b/host-krypton.yml
@@ -33,13 +33,13 @@
   tasks:
 
     # - name: Setup dehydrated challenge endpoint for {{ openldap_domain }}
-    #   include_role:
+    #   ansible.builtin.include_role:
     #     name: setup-http-dehydrated
     #   vars:
     #     site_name: "{{ openldap_domain }}"
 
     - name: Ensure openLDAP directories are present.
-      file:
+      ansible.builtin.file:
         path: "{{ item.path }}"
         mode: "0755"
         state: directory
@@ -50,7 +50,7 @@
         - path: "{{ dehydrated_certs_dir }}/{{ openldap_domain }}"
 
     - name: Ensure container for openLDAP is running.
-      docker_container:
+      community.docker.docker_container:
         name: openLDAP
         image: osixia/openldap:1.5.0
         detach: yes
@@ -115,7 +115,7 @@
 
 
     - name: Ensure container for entities validation service is running
-      docker_container:
+      community.docker.docker_container:
         name: entities_validation_svc
         image: netz39/entities_validation_svc:v1.0.4
         pull: true
@@ -128,7 +128,7 @@
           TZ: "{{ timezone }}"
 
     - name: Setup proxy site entities-validation.svc.n39.eu
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: entities-validation.svc.n39.eu
diff --git a/host-platon.yml b/host-platon.yml
index fa03f70..21027c4 100644
--- a/host-platon.yml
+++ b/host-platon.yml
@@ -306,19 +306,19 @@
 
   handlers:
     - name: Restart mosquitto service
-      service:
+      ansible.builtin.service:
         name: mosquitto
         state: restarted
         enabled: yes
 
     - name: Restart rsyslog
-      service:
+      ansible.builtin.service:
         name: rsyslog
         state: restarted
         enabled: yes
 
     - name: Restart asterisk
-      service:
+      ansible.builtin.service:
         name: asterisk
         state: restarted
         enabled: yes
diff --git a/host-pottwal.yml b/host-pottwal.yml
index 4fab96d..beb23b5 100644
--- a/host-pottwal.yml
+++ b/host-pottwal.yml
@@ -55,7 +55,7 @@
     # If port 2222 is changed here, it must also be adapted
     # in the forgejo config file (see application volume)!!
     - name: Setup the docker container for forgejo
-      docker_container:
+      community.docker.docker_container:
         name: forgejo
         image: "{{ forgejo_image }}"
         pull: true
@@ -81,7 +81,7 @@
       tags: ["forgejo"]
 
     - name: Setup proxy site "{{ forgejo_domain_name }}"
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ forgejo_domain_name }}"
@@ -89,7 +89,7 @@
       tags: ["forgejo"]
 
     - name: Ensure apt-cacher container is running
-      docker_container:
+      community.docker.docker_container:
         name: apt_cacher_ng
         image: mrtux/apt-cacher-ng:latest
         pull: true
@@ -102,7 +102,7 @@
           TZ: "{{ timezone }}"
 
     - name: Setup docker network
-      docker_network:
+      community.docker.docker_network:
         name: shlinknet
         state: present
         internal: true
@@ -118,7 +118,7 @@
         - shlink
 
     - name: Ensure shlink database container is running
-      docker_container:
+      community.docker.docker_container:
         name: shlinkdb
         image: postgres:16.8-alpine
         pull: true
@@ -138,7 +138,7 @@
         - shlink
 
     - name: Ensure container for shlink is running
-      docker_container:
+      community.docker.docker_container:
         name: shlink
         image: "{{ shlink_image }}"
         pull: true
@@ -167,7 +167,7 @@
         - shlink
 
     - name: Setup proxy site {{ shlink_domain_name }}
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ shlink_domain_name }}"
@@ -235,7 +235,7 @@
         - Restart prosody
 
     - name: Ensure container for prosody XMPP server is running
-      docker_container:
+      community.docker.docker_container:
         name: prosody
         image: "{{ prosody_image }}"
         pull: true
@@ -257,7 +257,7 @@
 
 
     - name: Ensure container for static XMPP website is running
-      docker_container:
+      community.docker.docker_container:
         name: jabber-static-website
         image: "{{ prosody_web_image }}"
         pull: true
@@ -277,7 +277,7 @@
 
     - name: Setup proxy site {{ prosody_domain_name }}
       # point to static website for now
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ prosody_domain_name }}"
@@ -299,7 +299,7 @@
         - hedgedoc
 
     - name: Ensure the hedgedoc directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item.path }}"
         mode: "{{ item.mode }}"
         state: directory
@@ -312,7 +312,7 @@
         - hedgedoc
 
     - name: Setup docker network
-      docker_network:
+      community.docker.docker_network:
         name: hedgedocnet
         state: present
         internal: true
@@ -320,7 +320,7 @@
         - hedgedoc
 
     - name: Install HedgeDoc database container
-      docker_container:
+      community.docker.docker_container:
         name: hedgedocdb
         image: "{{ hedgedoc_db_image }}"
         pull: true
@@ -340,7 +340,7 @@
         - hedgedoc
 
     - name: Ensure container for hedgedoc is running
-      docker_container:
+      community.docker.docker_container:
         name: hedgedoc
         image: "{{ hedgedoc_image }}"
         pull: true
@@ -372,7 +372,7 @@
         - hedgedoc
 
     - name: Setup proxy site "{{ hedgedoc_domain_name }}"
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ hedgedoc_domain_name }}"
@@ -381,7 +381,7 @@
         - hedgedoc
 
     - name: Ensure the influxdb directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item }}"
         mode: 0700
         state: directory
@@ -391,7 +391,7 @@
         - "{{ data_dir }}/influxdb/cfg"
 
     - name: Ensure container for influxdb is running
-      docker_container:
+      community.docker.docker_container:
         name: influxdb
         image: "{{ influxdb_image }}"
         pull: true
@@ -411,7 +411,7 @@
           - "{{ data_dir }}/influxdb/cfg:/etc/influxdb2"
 
     - name: Setup proxy site {{ influxdb_domain_name }}
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ influxdb_domain_name }}"
@@ -436,7 +436,7 @@
         - redmine
 
     - name: Setup Redmine docker network
-      docker_network:
+      community.docker.docker_network:
         name: redminenet
         state: present
         internal: true
@@ -444,7 +444,7 @@
         - redmine
 
     - name: Setup Redmine MySQL container
-      docker_container:
+      community.docker.docker_container:
         name: redminedb
         image: "{{ redmine_mysql_image }}"
         pull: true
@@ -464,7 +464,7 @@
         - redmine
 
     - name: Setup Redmine container
-      docker_container:
+      community.docker.docker_container:
         name: redmine
         image: "{{ redmine_image }}"
         pull: true
@@ -490,7 +490,7 @@
         - redmine
 
     - name: Setup proxy site "{{ redmine_domain_name }}"
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ redmine_domain_name }}"
@@ -499,7 +499,7 @@
         - redmine
 
     - name: Ensure the uptime-kuma directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item }}"
         mode: "0755"
         state: directory
@@ -509,7 +509,7 @@
         - uptimekuma
 
     - name: Ensure container for uptime-kuma is running
-      docker_container:
+      community.docker.docker_container:
         name: uptime-kuma
         image: "{{ uptimekuma_image }}"
         pull: true
@@ -526,7 +526,7 @@
         - uptimekuma
 
     - name: Setup proxy site "{{ uptimekuma_domain_name }}"
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ uptimekuma_domain_name }}"
@@ -535,7 +535,7 @@
         - uptimekuma
 
     - name: Ensure the grafana directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item.path }}"
         owner: "{{ item.owner | default('root') }}"
         mode: "{{ item.mode }}"
@@ -552,7 +552,7 @@
         - grafana
 
     - name: Ensure container for grafana is running
-      docker_container:
+      community.docker.docker_container:
         name: grafana
         image: "{{ grafana_image }}"
         pull: true
@@ -573,7 +573,7 @@
         - grafana
 
     - name: Setup proxy site "{{ grafana_domain_name }}"
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ grafana_domain_name }}"
@@ -583,7 +583,7 @@
         - grafana
 
     - name: Ensure the homebox directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item.path }}"
         owner: "{{ item.owner | default('root') }}"
         mode: "{{ item.mode }}"
@@ -597,7 +597,7 @@
         - homebox
 
     - name: Ensure container for homebox is running
-      docker_container:
+      community.docker.docker_container:
         name: homebox
         image: "{{ homebox_image }}"
         pull: true
@@ -617,7 +617,7 @@
         - homebox
 
     - name: Setup proxy site {{ homebox_domain_name }}
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ homebox_domain_name }}"
@@ -627,7 +627,7 @@
         - homebox
 
     - name: Setup proxy site spaceapi.n39.eu
-      template:
+      ansible.builtin.template:
         src: templates/pottwal/spaceapi-apache-site.j2
         dest: /etc/apache2/sites-available/spaceapi.n39.eu.conf
         mode: "0644"
@@ -656,7 +656,7 @@
         restart: yes
 
     - name: Restart apache2
-      service:
+      ansible.builtin.service:
         name: apache2
         state: restarted
 
@@ -664,6 +664,6 @@
       ansible.builtin.shell:
         cmd: service cron reload
     # Use the shell call because the task sometimes has problems finding the service state
-    #  service:
+    #  ansible.builtin.service:
     #    name: cron
     #    state: restarted
diff --git a/host-radon.yml b/host-radon.yml
index 25abe17..6131bd4 100644
--- a/host-radon.yml
+++ b/host-radon.yml
@@ -38,7 +38,7 @@
 
   tasks:
     - name: Ensure the mosquitto directories exist
-      file:
+      ansible.builtin.file:
         path: "{{ item }}"
         mode: 0755
         state: directory
@@ -50,7 +50,7 @@
         - mosquitto
 
     - name: Make sure mosquitto config is there
-      template:
+      ansible.builtin.template:
         src: "templates/mosquitto.conf.j2"
         dest: "{{ mosquitto_data }}/config/mosquitto.conf"
         mode: 0644
@@ -59,7 +59,7 @@
         - mosquitto
 
     - name: Ensure mosquitto is running
-      docker_container:
+      community.docker.docker_container:
         name: mosquitto
         image: "{{ mosquitto_image }}"
         pull: true
@@ -89,7 +89,7 @@
       when: not nodered_dir.stat.exists
 
     - name: Ensure nodered is running
-      docker_container:
+      community.docker.docker_container:
         name: nodered
         image: "{{ nodered_image }}"
         pull: true
@@ -109,7 +109,7 @@
         restart_policy: unless-stopped
 
     - name: Setup proxy site nodered.n39.eu
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "nodered.n39.eu"
@@ -130,7 +130,7 @@
         - rabbitmq
 
     - name: Ensure rabbitmq docker container is running
-      docker_container:
+      community.docker.docker_container:
         name: rabbitmq
         image: "{{ rabbitmq_image }}"
         ports:
@@ -151,7 +151,7 @@
         - rabbitmq
 
     - name: Setup proxy site rabbitmq.n39.eu
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "rabbitmq.n39.eu"
@@ -160,7 +160,7 @@
         - rabbitmq
 
     - name: Ensure Power Meter Pulse Gateway for 19i room is running
-      docker_container:
+      community.docker.docker_container:
         name: pwr-meter-pulse-gw-19i
         image: "{{ pwr_meter_pulse_gw_image }}"
         ports:
@@ -178,7 +178,7 @@
         restart_policy: unless-stopped
 
     - name: Setup proxy site pwr-meter-pulse-gw-19i.svc.n39.eu
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "pwr-meter-pulse-gw-19i.svc.n39.eu"
@@ -186,7 +186,7 @@
 
 
     - name: Setup docker container for BrotherQL Web UI printer
-      docker_container:
+      community.docker.docker_container:
         name: brotherql-web
         image: dersimn/brother_ql_web:2.1.9-alpine
         pull: true
@@ -202,7 +202,7 @@
         - labelprinter
 
     - name: Setup proxy site labelprinter.n39.eu
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: labelprinter.n39.eu
@@ -211,7 +211,7 @@
         - labelprinter
 
     - name: Setup docker container for Grafana Screenshots
-      docker_container:
+      community.docker.docker_container:
         name: grafana-screenshot
         image: mrtux/grafana-screenshot:0.1.3
         pull: true
@@ -228,7 +228,7 @@
 
   handlers:
     - name: Restart mosquitto container
-      docker_container:
+      community.docker.docker_container:
         name: mosquitto
         state: started
         restart: yes
diff --git a/host-tau.yml b/host-tau.yml
index 5281c54..e92b6e4 100644
--- a/host-tau.yml
+++ b/host-tau.yml
@@ -26,7 +26,7 @@
 
   tasks:
     - name: Setup docker network
-      docker_network:
+      community.docker.docker_network:
         name: dockernet
         driver: bridge
         ipam_config:
@@ -35,7 +35,7 @@
         state: present
 
     - name: Setup Dehydrated
-      include_role:
+      ansible.builtin.include_role:
         name: 24367dfa.dehydrated
       vars:
         dehydrated_contact_email: "{{ server_admin }}"
@@ -52,14 +52,14 @@
             deploy_challenge_hook: "/bin/systemctl restart apache2"
 
     - name: Setup proxy site testredmine.netz39.de
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: testredmine.netz39.de
         proxy_port: 9004
 
     - name: Setup phpmyadmin
-      docker_container:
+      community.docker.docker_container:
         name: phpmyadmin
         state: started
         image: phpmyadmin:5.2
@@ -76,7 +76,7 @@
           - 9001:80
 
     - name: Setup proxy site mysql.adm.netz39.de
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: mysql.adm.netz39.de
@@ -93,13 +93,13 @@
       when: not docker_dir.stat.exists
     - name: Ensure the Docker Registry data directory exists
       # This may not be part of the backup
-      file:
+      ansible.builtin.file:
         path: "{{ data_dir }}/registry/data"
         state: directory
         mode: "0755"
 
     - name: Setup Docker Registry Container
-      docker_container:
+      community.docker.docker_container:
         name: registry
         image: registry:2
         pull: true
@@ -118,7 +118,7 @@
           - "{{ data_dir }}/registry/auth:/auth:rw"
 
     - name: Setup proxy site for the Docker Registry
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ docker_registry_domain }}"
@@ -147,7 +147,7 @@
         - dokuwiki
 
     - name: Setup Dokuwiki Container
-      docker_container:
+      community.docker.docker_container:
         name: dokuwiki
         image: "{{ dokuwiki_image }}"
         pull: true
@@ -166,7 +166,7 @@
         - dokuwiki
 
     - name: Setup proxy site for Dokuwiki
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_proxy
       vars:
         site_name: "{{ dokuwiki_domain }}"
@@ -176,7 +176,7 @@
 
 
     - name: Setup container for secondary FFMD DNS
-      docker_container:
+      community.docker.docker_container:
         name: bind9-md-freifunk-net
         image: ffmd/bind9-md-freifunk-net:v2022122301
         pull: true
@@ -191,7 +191,7 @@
         - ffmd-dns
 
     - name: Setup forwarding for Discord invite
-      include_role:
+      ansible.builtin.include_role:
         name: setup_http_site_forward
       vars:
         site_name: "{{ discord_invite_domain }}"
diff --git a/host-unicorn.yml b/host-unicorn.yml
index 362b119..374cd32 100644
--- a/host-unicorn.yml
+++ b/host-unicorn.yml
@@ -12,7 +12,7 @@
 
   tasks:
     - name: Setup the docker container for unifi-controller
-      docker_container:
+      community.docker.docker_container:
         name: unifi-controller
         image: jacobalberty/unifi:v9.0.114
         state: started
diff --git a/host-wittgenstein.yml b/host-wittgenstein.yml
index 878ef29..dd9aae6 100644
--- a/host-wittgenstein.yml
+++ b/host-wittgenstein.yml
@@ -130,7 +130,7 @@
 
     ### Space API
     - name: Setup the SpaceAPI Docker container
-      docker_container:
+      community.docker.docker_container:
         name: spaceapi
         image: "{{ spaceapi_image }}"
         pull: true
@@ -149,7 +149,7 @@
         - spaceapi
 
     - name: Setup the Ampel Controller Docker container
-      docker_container:
+      community.docker.docker_container:
         name: ampelcontroller
         image: "{{ ampelcontroller_image }}"
         pull: true
diff --git a/roles/apache/handlers/main.yml b/roles/apache/handlers/main.yml
index 3f91a65..126d33e 100644
--- a/roles/apache/handlers/main.yml
+++ b/roles/apache/handlers/main.yml
@@ -1,6 +1,6 @@
 # Handlers for role apache
 ---
 - name: Restart apache2
-  service:
+  ansible.builtin.service:
     name: apache2
     state: restarted
diff --git a/roles/apache/tasks/main.yml b/roles/apache/tasks/main.yml
index 9e7a82c..67928af 100644
--- a/roles/apache/tasks/main.yml
+++ b/roles/apache/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 - name: Ensure Apache2 and modules are installed and up to date
-  apt:
+  ansible.builtin.apt:
     name:
       - apache2
     state: present
 
 - name: Ensure necessary modules are enabled
-  apache2_module:
+  community.general.apache2_module:
     name: "{{ item }}"
     state: present
   with_items:
diff --git a/roles/apache_letsencrypt/handlers/main.yml b/roles/apache_letsencrypt/handlers/main.yml
index a3c935a..b2cf41c 100644
--- a/roles/apache_letsencrypt/handlers/main.yml
+++ b/roles/apache_letsencrypt/handlers/main.yml
@@ -1,6 +1,6 @@
 # Handlers for role apache_letsencrypt
 ---
 - name: Restart apache2
-  service:
+  ansible.builtin.service:
     name: apache2
     state: restarted
diff --git a/roles/cleanuri/tasks/main.yml b/roles/cleanuri/tasks/main.yml
index 9490a6f..33aeb9b 100644
--- a/roles/cleanuri/tasks/main.yml
+++ b/roles/cleanuri/tasks/main.yml
@@ -1,7 +1,7 @@
 # Tasks for the cleanuri role
 ---
 - name: Ensure CleanURI WebUI is running
-  docker_container:
+  community.docker.docker_container:
     name: cleanuri-webui
     image: "{{ cleanuri_image_webui }}"
     pull: true
@@ -15,7 +15,7 @@
       REACT_APP_API_GATEWAY: "https://{{ cleanuri_api_domain }}"
 
 - name: Setup proxy site for the CleanURI WebUI
-  include_role:
+  ansible.builtin.include_role:
     name: setup_http_site_proxy
   vars:
     site_name: "{{ cleanuri_ui_domain }}"
@@ -23,7 +23,7 @@
 
 
 - name: Ensure CleanURI API Gateway is running
-  docker_container:
+  community.docker.docker_container:
     name: cleanuri-apigateway
     image: "{{ cleanuri_image_apigateway }}"
     pull: true
@@ -42,7 +42,7 @@
       GATEWAY_TASK_RK: "{{ cleanuri_amqp_canonizer }}"
 
 - name: Ensure CleanURI Canonizer is running
-  docker_container:
+  community.docker.docker_container:
     name: cleanuri-canonizer
     image: "{{ cleanuri_image_canonizer }}"
     pull: true
@@ -59,7 +59,7 @@
       EXTRACTOR_TASK_RK: "{{ cleanuri_amqp_retrieval }}"
 
 - name: Ensure CleanURI Extractor is running
-  docker_container:
+  community.docker.docker_container:
     name: cleanuri-extractor
     image: "{{ cleanuri_image_extractor }}"
     pull: true
@@ -76,7 +76,7 @@
 
 
 - name: Setup proxy site the CleanURI API Gateway
-  include_role:
+  ansible.builtin.include_role:
     name: setup_http_site_proxy
   vars:
     site_name: "{{ cleanuri_api_domain }}"
diff --git a/roles/dd24_dyndns_cron/tasks/main.yml b/roles/dd24_dyndns_cron/tasks/main.yml
index 7187267..da32fbd 100644
--- a/roles/dd24_dyndns_cron/tasks/main.yml
+++ b/roles/dd24_dyndns_cron/tasks/main.yml
@@ -1,6 +1,6 @@
 ---
 - name: Make sure cron and curl are installed
-  apt:
+  ansible.builtin.apt:
     name:
       - cron
       - curl
diff --git a/roles/desec_dyndns_cron/tasks/main.yml b/roles/desec_dyndns_cron/tasks/main.yml
index 921b8f6..eb164d0 100644
--- a/roles/desec_dyndns_cron/tasks/main.yml
+++ b/roles/desec_dyndns_cron/tasks/main.yml
@@ -1,6 +1,6 @@
 ---
 - name: Make sure cron and curl are installed
-  apt:
+  ansible.builtin.apt:
     name:
       - cron
       - curl
diff --git a/roles/nfs_host/handlers/main.yml b/roles/nfs_host/handlers/main.yml
index c2a634d..860a11c 100644
--- a/roles/nfs_host/handlers/main.yml
+++ b/roles/nfs_host/handlers/main.yml
@@ -1,3 +1,3 @@
 ---
 - name: Reload nfs
-  command: 'exportfs -ra'
+  ansible.builtin.command: 'exportfs -ra'
diff --git a/roles/nginx_https_ingress/handlers/main.yml b/roles/nginx_https_ingress/handlers/main.yml
index 66bf5d2..2a16ea6 100644
--- a/roles/nginx_https_ingress/handlers/main.yml
+++ b/roles/nginx_https_ingress/handlers/main.yml
@@ -1,7 +1,7 @@
 # Handlers für nginx-https-proxy
 ---
 - name: Restart nginx
-  service:
+  ansible.builtin.service:
     name: nginx
     state: restarted
     enabled: yes
diff --git a/roles/nginx_https_ingress/tasks/main.yml b/roles/nginx_https_ingress/tasks/main.yml
index 0eeed5f..e824733 100644
--- a/roles/nginx_https_ingress/tasks/main.yml
+++ b/roles/nginx_https_ingress/tasks/main.yml
@@ -18,7 +18,7 @@
 # for SSL passthrough.
 
 - name: Add nginx apt-key
-  apt_key:
+  ansible.builtin.apt_key:
     url: https://nginx.org/keys/nginx_signing.key
     state: present
 
diff --git a/roles/setup_http_site_forward/handlers/main.yml b/roles/setup_http_site_forward/handlers/main.yml
index db1118f..47e5060 100644
--- a/roles/setup_http_site_forward/handlers/main.yml
+++ b/roles/setup_http_site_forward/handlers/main.yml
@@ -1,5 +1,5 @@
 ---
 - name: Restart apache2
-  service:
+  ansible.builtin.service:
     name: apache2
     state: restarted
diff --git a/roles/setup_http_site_forward/tasks/main.yml b/roles/setup_http_site_forward/tasks/main.yml
index ca31f22..7d0dff9 100644
--- a/roles/setup_http_site_forward/tasks/main.yml
+++ b/roles/setup_http_site_forward/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 - name: Add or update Apache2 site
-  template:
+  ansible.builtin.template:
     src: templates/apache-docker-forward-site.j2
     dest: /etc/apache2/sites-available/{{ site_name }}.conf
   notify: Restart apache2
 
 - name: Activate Apache2 site
-  command: a2ensite {{ site_name }}
+  ansible.builtin.command: a2ensite {{ site_name }}
   args:
     creates: /etc/apache2/sites-enabled/{{ site_name }}.conf
   notify: Restart apache2
diff --git a/roles/setup_http_site_proxy/handlers/main.yml b/roles/setup_http_site_proxy/handlers/main.yml
index db1118f..47e5060 100644
--- a/roles/setup_http_site_proxy/handlers/main.yml
+++ b/roles/setup_http_site_proxy/handlers/main.yml
@@ -1,5 +1,5 @@
 ---
 - name: Restart apache2
-  service:
+  ansible.builtin.service:
     name: apache2
     state: restarted
diff --git a/roles/setup_http_site_proxy/tasks/main.yml b/roles/setup_http_site_proxy/tasks/main.yml
index f644791..c50d016 100644
--- a/roles/setup_http_site_proxy/tasks/main.yml
+++ b/roles/setup_http_site_proxy/tasks/main.yml
@@ -1,13 +1,13 @@
 ---
 - name: Add or update Apache2 site
-  template:
+  ansible.builtin.template:
     src: templates/apache-docker-proxy-site.j2
     dest: /etc/apache2/sites-available/{{ site_name }}.conf
     mode: "0644"
   notify: Restart apache2
 
 - name: Activate Apache2 site
-  command: a2ensite {{ site_name }}
+  ansible.builtin.command: a2ensite {{ site_name }}
   args:
     creates: /etc/apache2/sites-enabled/{{ site_name }}.conf
   notify: Restart apache2
diff --git a/roles/users/handlers/main.yml b/roles/users/handlers/main.yml
index 372d62a..04184af 100644
--- a/roles/users/handlers/main.yml
+++ b/roles/users/handlers/main.yml
@@ -1,3 +1,3 @@
 ---
 - name: Update aliases
-  shell: which newaliases && newaliases || true
+  ansible.builtin.shell: which newaliases && newaliases || true
diff --git a/roles/users/tasks/main.yml b/roles/users/tasks/main.yml
index 15fa0fc..3291b35 100644
--- a/roles/users/tasks/main.yml
+++ b/roles/users/tasks/main.yml
@@ -1,12 +1,12 @@
 ---
 - name: Ensure sudo is installed
-  package:
+  ansible.builtin.package:
     name:
       - sudo
     state: present
 
 - name: Configure group sudo for sudoers without password
-  lineinfile:
+  ansible.builtin.lineinfile:
     path: /etc/sudoers
     state: present
     regexp: '^%sudo\s'
@@ -14,7 +14,7 @@
     validate: /usr/sbin/visudo -cf %s
 
 - name: Add users | create users' shell and home dir
-  user:
+  ansible.builtin.user:
     name: "{{ item.logname }}"
     shell: /bin/bash
     createhome: yes
@@ -22,7 +22,7 @@
   with_items: "{{ users }}"
 
 - name: Add authorized keys for user
-  authorized_key:
+  ansible.posix.authorized_key:
     user: "{{ item.0.logname }}"
     key: "{{ item.1 }}"
     state: present
@@ -32,7 +32,7 @@
     - skip_missing: true
 
 - name: Place user in sudo group
-  user:
+  ansible.builtin.user:
     name: "{{ item.logname }}"
     groups: [sudo]
     append: yes
@@ -40,12 +40,12 @@
   with_items: "{{ users }}"
 
 - name: Check if /etc/aliases exists
-  stat:
+  ansible.builtin.stat:
     path: /etc/aliases
   register: aliases
 
 - name: Set system email alias
-  lineinfile:
+  ansible.builtin.lineinfile:
     path: /etc/aliases
     state: present
     regexp: "^{{ item.logname }}:"