diff --git a/validation/Dockerfile b/validation/Dockerfile
index a9e53ad4dac50447af2b5607e3e24e5f0409e57a..2a48fd8f1c6253fa3aed03b1cb1001d4997f52ef 100644
--- a/validation/Dockerfile
+++ b/validation/Dockerfile
@@ -1,5 +1,5 @@
-ARG VERSION_PYTHON="3.9"
-ARG VERSION_BASE_IMAGE="python:${VERSION_PYTHON}-alpine3.19"
+ARG VERSION_PYTHON="3.13"
+ARG VERSION_BASE_IMAGE="python:${VERSION_PYTHON}-alpine3.21"
 FROM ${VERSION_BASE_IMAGE}
 # We need to declare ARGs again which were declared before the build stage
 # (FROM directive), otherwise they won't be available in this stage.
@@ -7,7 +7,7 @@ ARG VERSION_PYTHON
 ARG VERSION_BASE_IMAGE
 
 ARG VERSION_CPP_DICT_PACK="v2.500"
-ARG VERSION_PY_MMCIF="0.79"
+ARG VERSION_PY_MMCIF="0.91"
 
 ## Set up environment
 ENV MMCIF_DICTS_DIR="/usr/local/share/mmcif-dict-suite" \
@@ -80,7 +80,7 @@ COPY --chmod=755 validate-mmcif-file.py /usr/local/bin/validate-mmcif-file
 ## https://github.com/ihmwg/ModelCIF/blob/master/dist/mmcif_ma.dic.
 ## Dictionaries do not change that frequently therefore we skip the hassle of
 ## keeping them in an external volume.
-ARG USE_DICT_VERSION="1.4.6"
+ARG USE_DICT_VERSION="1.4.7"
 ENV USE_DICT_VERSION=${USE_DICT_VERSION}
 LABEL org.modelarchive.dict_release="${USE_DICT_VERSION}"
 WORKDIR ${SRC_DIR}
@@ -90,8 +90,8 @@ RUN set -e pipefail; \
     export _DICT_URL="https://mmcif.wwpdb.org/dictionaries/ascii"; \
     export _GIT_URL="https://raw.github.com/ihmwg/ModelCIF/master"; \
     # Use the path of an actual commit to keep the dict immutable (RCSB refuses
-    # to use Git tags for versions).
-    export _MA_DICT_URL="https://raw.githubusercontent.com/ihmwg/ModelCIF/d18ba38/archive/mmcif_ma-v${USE_DICT_VERSION}.dic"; \
+    # to use Git tags for versions). If build fails, maybe update the commit.
+    export _MA_DICT_URL="https://raw.githubusercontent.com/ihmwg/ModelCIF/80e1e22/archive/mmcif_ma-v${USE_DICT_VERSION}.dic"; \
     mkdir ${_DICT_DIR}; \
     mkdir ${MMCIF_DICTS_DIR}; \
     cd ${_DICT_DIR}; \