diff --git a/Cargo.lock b/Cargo.lock
index 62b2cefa..332fecc0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -955,7 +955,7 @@ dependencies = [
 
 [[package]]
 name = "ffplayout"
-version = "0.18.2"
+version = "0.19.0"
 dependencies = [
  "chrono",
  "clap",
@@ -963,7 +963,8 @@ dependencies = [
  "ffplayout-lib",
  "futures",
  "jsonrpc-http-server",
- "notify",
+ "notify 6.0.1",
+ "notify-debouncer-full",
  "openssl",
  "regex",
  "reqwest",
@@ -975,7 +976,7 @@ dependencies = [
 
 [[package]]
 name = "ffplayout-api"
-version = "0.18.2"
+version = "0.19.0"
 dependencies = [
  "actix-files",
  "actix-multipart",
@@ -1008,7 +1009,7 @@ dependencies = [
 
 [[package]]
 name = "ffplayout-lib"
-version = "0.18.2"
+version = "0.19.0"
 dependencies = [
  "chrono",
  "crossbeam-channel",
@@ -1017,7 +1018,7 @@ dependencies = [
  "jsonrpc-http-server",
  "lettre",
  "log",
- "notify",
+ "notify 4.0.17",
  "openssl",
  "rand",
  "regex",
@@ -1042,6 +1043,15 @@ dependencies = [
  "serde_json",
 ]
 
+[[package]]
+name = "file-id"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13be71e6ca82e91bc0cb862bebaac0b2d1924a5a1d970c822b2f98b63fda8c3"
+dependencies = [
+ "winapi-util",
+]
+
 [[package]]
 name = "file-rotate"
 version = "0.7.5"
@@ -1123,7 +1133,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
 dependencies = [
  "bitflags",
- "fsevent-sys",
+ "fsevent-sys 2.0.1",
 ]
 
 [[package]]
@@ -1135,6 +1145,15 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "fuchsia-zircon"
 version = "0.3.3"
@@ -1546,6 +1565,17 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags",
+ "inotify-sys",
+ "libc",
+]
+
 [[package]]
 name = "inotify-sys"
 version = "0.1.5"
@@ -1696,6 +1726,26 @@ dependencies = [
  "winapi-build",
 ]
 
+[[package]]
+name = "kqueue"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags",
+ "libc",
+]
+
 [[package]]
 name = "kv-log-macro"
 version = "1.0.7"
@@ -1961,8 +2011,8 @@ dependencies = [
  "bitflags",
  "filetime",
  "fsevent",
- "fsevent-sys",
- "inotify",
+ "fsevent-sys 2.0.1",
+ "inotify 0.7.1",
  "libc",
  "mio 0.6.23",
  "mio-extras",
@@ -1970,6 +2020,36 @@ dependencies = [
  "winapi 0.3.9",
 ]
 
+[[package]]
+name = "notify"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5738a2795d57ea20abec2d6d76c6081186709c0024187cd5977265eda6598b51"
+dependencies = [
+ "bitflags",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys 4.1.0",
+ "inotify 0.9.6",
+ "kqueue",
+ "libc",
+ "mio 0.8.8",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "notify-debouncer-full"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "416969970ec751a5d702a88c6cd19ac1332abe997fce43f96db0418550426241"
+dependencies = [
+ "file-id",
+ "notify 6.0.1",
+ "parking_lot 0.12.1",
+ "walkdir",
+]
+
 [[package]]
 name = "num-bigint"
 version = "0.4.3"
@@ -2142,7 +2222,7 @@ dependencies = [
  "libc",
  "redox_syscall 0.3.5",
  "smallvec",
- "windows-targets",
+ "windows-targets 0.48.0",
 ]
 
 [[package]]
@@ -2891,7 +2971,7 @@ dependencies = [
 
 [[package]]
 name = "tests"
-version = "0.18.2"
+version = "0.19.0"
 dependencies = [
  "chrono",
  "crossbeam-channel",
@@ -2902,7 +2982,7 @@ dependencies = [
  "jsonrpc-http-server",
  "lettre",
  "log",
- "notify",
+ "notify 4.0.17",
  "rand",
  "regex",
  "reqwest",
@@ -3400,7 +3480,7 @@ version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.48.0",
 ]
 
 [[package]]
@@ -3418,13 +3498,37 @@ dependencies = [
  "windows_x86_64_msvc 0.42.2",
 ]
 
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
 [[package]]
 name = "windows-sys"
 version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
 ]
 
 [[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 84cce657..800ab62f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,7 +3,7 @@ members = ["ffplayout-api", "ffplayout-engine", "lib", "tests"]
 default-members = ["ffplayout-api", "ffplayout-engine", "tests"]
 
 [workspace.package]
-version = "0.18.2"
+version = "0.19.0"
 license = "GPL-3.0"
 repository = "https://github.com/ffplayout/ffplayout"
 authors = ["Jonathan Baecker <jonbae77@gmail.com>"]
diff --git a/docker/Almalinux.Dockerfile b/docker/Almalinux.Dockerfile
deleted file mode 100644
index 5b20829f..00000000
--- a/docker/Almalinux.Dockerfile
+++ /dev/null
@@ -1,43 +0,0 @@
-FROM almalinux:9 AS base
-
-ENV container docker
-RUN dnf -y install libgomp && \
-    dnf clean all;
-
-RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
-    systemd-tmpfiles-setup.service ] || rm -f $i; done); \
-    rm -f /lib/systemd/system/multi-user.target.wants/*; \
-    rm -f /etc/systemd/system/*.wants/*; \
-    rm -f /lib/systemd/system/local-fs.target.wants/*; \
-    rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
-    rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
-    rm -f /lib/systemd/system/basic.target.wants/*; \
-    rm -f /lib/systemd/system/anaconda.target.wants/*
-
-FROM base
-
-ARG FFPLAYOUT_VERSION=0.18.1
-COPY README.md *.rpm /tmp/
-
-RUN dnf update -y && \
-    dnf install -y epel-release && \
-    dnf install -y 'dnf-command(config-manager)' && \
-    dnf config-manager --set-enabled crb && \
-    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm && \
-    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm && \
-    dnf install -y ffmpeg ffmpeg-devel wget dejavu-sans-fonts sudo && \
-    dnf clean all
-
-RUN [[ -f /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm ]] || wget -q "https://github.com/ffplayout/ffplayout/releases/download/v${FFPLAYOUT_VERSION}/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm" -P /tmp/ && \
-    dnf install -y /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
-    rm /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
-    mkdir -p /home/ffpu && chown -R ffpu: /home/ffpu && \
-    systemctl enable ffplayout && \
-    systemctl enable ffpapi && \
-    ffpapi -u admin -p admin -m contact@example.com
-
-EXPOSE 8787
-
-VOLUME [ "/sys/fs/cgroup" ]
-
-CMD ["/usr/sbin/init"]
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 4cab2401..5b20829f 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,8 +1,8 @@
-FROM centos:7 AS base
+FROM almalinux:9 AS base
 
 ENV container docker
-RUN yum -y install libgomp && \
-    yum clean all
+RUN dnf -y install libgomp && \
+    dnf clean all;
 
 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
     systemd-tmpfiles-setup.service ] || rm -f $i; done); \
@@ -14,247 +14,27 @@ RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
     rm -f /lib/systemd/system/basic.target.wants/*; \
     rm -f /lib/systemd/system/anaconda.target.wants/*
 
-FROM base AS build
-
-WORKDIR /tmp/workdir
-
-ENV FFMPEG_VERSION=5.1.2 \
-    AOM_VERSION=v1.0.0 \
-    LIBASS_VERSION=0.13.7 \
-    FREETYPE_VERSION=2.10.4 \
-    FRIBIDI_VERSION=0.19.7 \
-    FONTCONFIG_VERSION=2.12.4 \
-    SRC=/usr/local
-
-ARG LIBASS_SHA256SUM="8fadf294bf701300d4605e6f1d92929304187fca4b8d8a47889315526adbafd7 0.13.7.tar.gz"
-ARG FREETYPE_SHA256SUM="5eab795ebb23ac77001cfb68b7d4d50b5d6c7469247b0b01b2c953269f658dac freetype-2.10.4.tar.gz"
-ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz"
-
-ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib
-ARG MAKEFLAGS="-j2"
-ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig"
-ARG PREFIX=/opt/ffmpeg
-ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64"
-
-RUN buildDeps="autoconf \
-        automake \
-        bzip2 \
-        cmake3 \
-        diffutils \
-        expat-devel \
-        file \
-        gcc \
-        gcc-c++ \
-        git \
-        gperf \
-        libtool \
-        make \
-        perl \
-        python3 \
-        openssl-devel \
-        tar \
-        yasm \
-        which \
-        zlib-devel" && \
-    echo "${SRC}/lib" > /etc/ld.so.conf.d/libc.conf && \
-    yum --enablerepo=extras install -y epel-release && \
-    yum --enablerepo=epel install -y ${buildDeps} && \
-    alternatives --install /usr/bin/cmake cmake /usr/bin/cmake3 0 && \
-    # Install the tools required to build nasm 2.14.02 \
-    nasmDeps="asciidoc \
-        perl-Font-TTF \
-        perl-Sort-Versions \
-        xmlto" && \
-    yum --enablerepo=epel install -y ${nasmDeps} && \
-    # Compile and install nasm 2.14.02 \
-    DIR=/tmp/nasm && \
-    mkdir -p ${DIR} && \
-    curl -LSs https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz | \
-    tar xzC ${DIR} --strip-components=1 && \
-    pushd ${DIR} && \
-    ./configure --host=x86_64-redhat-linux-gnu \
-        --build=x86_64-redhat-linux-gnu \
-        --prefix=/usr/local \
-        --exec-prefix=/usr/local \
-        --bindir=/usr/local/bin \
-        --sbindir=/usr/local/sbin \
-        --sysconfdir=/usr/local/etc \
-        --datadir=/usr/local/share \
-        --includedir=/usr/local/include \
-        --libdir=/usr/local/lib \
-        --libexecdir=/usr/local/libexec \
-        --enable-sections && \
-    make all && \
-    make install && \
-    make install_rdf && \
-    popd && rm -rf ${DIR} && \
-    alternatives --install /usr/bin/nasm nasm /usr/local/bin/nasm 0 && \
-    # Now that we have a modern nasm build and available, we can undo the last \
-    # yum transaction as none of those packages are required for the rest of the build \
-    yum history undo $(yum history info | grep 'Transaction ID' | awk -F: '{print$2}' | tr -d ' ') -y && \
-    yum autoremove -y
-
-RUN yum -y install \
-    lame-libs \
-    openjpeg-libs \
-    opus \
-    srt-libs \
-    libvorbis \
-    libvpx \
-    libwebp \
-    libogg \
-    x264-libs \
-    x265-libs \
-    zeromq
-
-## fridibi https://www.fribidi.org/
-RUN  \
-    DIR=/tmp/fribidi && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \
-    echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \
-    sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \
-    ./bootstrap --no-config --auto && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j1 && \
-    make install && \
-    rm -rf ${DIR}
-
-## freetype https://www.freetype.org/
-RUN  \
-    DIR=/tmp/freetype && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \
-    echo ${FREETYPE_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## fontconfig https://www.freedesktop.org/wiki/Software/fontconfig/
-RUN  \
-    DIR=/tmp/fontconfig && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG_VERSION}.tar.bz2 && \
-    tar -jx --strip-components=1 -f fontconfig-${FONTCONFIG_VERSION}.tar.bz2 && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## libass https://github.com/libass/libass
-RUN  \
-    DIR=/tmp/libass && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/libass/libass/archive/${LIBASS_VERSION}.tar.gz && \
-    echo ${LIBASS_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f ${LIBASS_VERSION}.tar.gz && \
-    ./autogen.sh && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-RUN \
-    DIR=/tmp/aom && \
-    git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} ; \
-    cd ${DIR} ; \
-    rm -rf CMakeCache.txt CMakeFiles ; \
-    mkdir -p ./aom_build ; \
-    cd ./aom_build ; \
-    cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 ..; \
-    make ; \
-    make install ; \
-    rm -rf ${DIR}
-
-## Download ffmpeg https://ffmpeg.org/
-RUN  \
-    DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \
-    curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
-    tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
-    ./configure     --disable-debug  --disable-doc    --disable-ffplay   --enable-shared --enable-gpl  --extra-libs=-ldl && \
-    make ;  make install
-
-## Build ffmpeg https://ffmpeg.org/
-RUN  \
-    DIR=/tmp/ffmpeg && cd ${DIR} && \
-    ./configure \
-    --disable-debug \
-    --disable-doc \
-    --disable-ffplay \
-    --enable-gpl \
-    --enable-libaom \
-    --enable-libass \
-    --enable-libfreetype \
-    --enable-libmp3lame \
-    --enable-libopenjpeg \
-    --enable-libopus \
-    --enable-libsrt \
-    --enable-libvorbis \
-    --enable-libvpx \
-    --enable-libwebp \
-    --enable-libx264 \
-    --enable-libx265 \
-    --enable-libzmq \
-    --enable-nonfree \
-    --enable-fontconfig \
-    --enable-postproc \
-    --enable-shared \
-    --enable-version3 \
-    --extra-cflags="-I${PREFIX}/include" \
-    --extra-ldflags="-L${PREFIX}/lib" \
-    --extra-libs=-ldl \
-    --extra-libs=-lpthread \
-    --prefix="${PREFIX}" && \
-    make clean && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \
-    make distclean && \
-    hash -r && \
-    cd tools && \
-    make qt-faststart && cp qt-faststart ${PREFIX}/bin/
-
-RUN \
-    ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib64/ && \
-    for lib in /usr/local/lib64/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \
-    cp ${PREFIX}/bin/* /usr/local/bin/ && \
-    cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \
-    LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib ffmpeg -buildconf && \
-    cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \
-    mkdir -p /usr/local/lib64/pkgconfig && \
-    for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \
-        sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib64/pkgconfig/"${pc##*/}"; \
-    done
-
 FROM base
 
 ARG FFPLAYOUT_VERSION=0.18.1
+COPY README.md *.rpm /tmp/
 
-ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
+RUN dnf update -y && \
+    dnf install -y epel-release && \
+    dnf install -y 'dnf-command(config-manager)' && \
+    dnf config-manager --set-enabled crb && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y ffmpeg ffmpeg-devel wget dejavu-sans-fonts sudo && \
+    dnf clean all
 
-COPY --from=build /usr/local/ /usr/local/
-
-ADD ./overide.conf /etc/systemd/system/ffplayout.service.d/overide.conf
-ADD ./overide.conf /etc/systemd/system/ffpapi.service.d/overide.conf
-
-RUN \
-    yum update -y \
-    && yum install -y wget dejavu-sans-fonts sudo \
-    && wget -q -O /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm "https://github.com/ffplayout/ffplayout/releases/download/v${FFPLAYOUT_VERSION}/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm" \
-    && yum install -y /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm \
-    && yum clean all \
-    && rm /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm \
-    && mkdir -p /home/ffpu && chown -R ffpu: /home/ffpu \
-    && systemctl enable ffplayout \
-    && systemctl enable ffpapi \
-    && ffpapi -u admin -p admin -m contact@example.com
+RUN [[ -f /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm ]] || wget -q "https://github.com/ffplayout/ffplayout/releases/download/v${FFPLAYOUT_VERSION}/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm" -P /tmp/ && \
+    dnf install -y /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
+    rm /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
+    mkdir -p /home/ffpu && chown -R ffpu: /home/ffpu && \
+    systemctl enable ffplayout && \
+    systemctl enable ffpapi && \
+    ffpapi -u admin -p admin -m contact@example.com
 
 EXPOSE 8787
 
diff --git a/docker/README.md b/docker/README.md
index cf4df3d4..23c48fb9 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -3,14 +3,14 @@
 
 ## Base Image
 
-Use of [centos image](https://hub.docker.com/_/centos) as base image as it offer the possibility to use systemd.
+Use of [CentOS image](https://hub.docker.com/_/centos) as base image as it offer the possibility to use systemd.
 In order to run systemd in a container it has to run in privileged mode and bind to the `cgroup` of the host.
 
 ## Image
 
 In addition to the base image, there is the compilation of ffmpeg and all lib from source based on https://github.com/jrottenberg/ffmpeg.
 We can't use directly the image from `jrottenberg/ffmpeg` as it compile ffmpeg with the flag `--enable-small` that remove some part of the json from the ffprobe command.
-There is also a conf file to override the ffplayout.service as the libs for ffmpeg are not in the defauft place which is copied to `/etc/systemd/system/ffplayout.service.d/overide.conf`.
+There is also a conf file to override the ffplayout.service as the libs for ffmpeg are not in the default place which is copied to `/etc/systemd/system/ffplayout.service.d/override.conf`.
 
 The image is build with a default user/pass `admin/admin`.
 
@@ -37,16 +37,13 @@ docker build -t ffplayout-image .
 
 # build ffmpeg from source
 docker build -f fromSource.Dockerfile -t ffplayout-image:from-source .
-
-# build with current almalinux image
-docker build -f Almalinux.Dockerfile -t ffplayout-image:almalinux .
 ```
 
 example of command to start the container:
 
 `docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro --cap-add SYS_ADMIN -p 8787:8787 ffplayout-image`
 
-Note from centos docker hub page
+Note from CentOS docker hub page
 `
 There have been reports that if you're using an Ubuntu host, you will need to add -v /tmp/$(mktemp -d):/run in addition to the cgroups mount.
 `
diff --git a/docker/fromSource.Dockerfile b/docker/fromSource.Dockerfile
index 1e92671b..aaf11182 100644
--- a/docker/fromSource.Dockerfile
+++ b/docker/fromSource.Dockerfile
@@ -1,8 +1,6 @@
-FROM centos:7 AS base
+FROM almalinux:9 AS base
 
 ENV container docker
-RUN yum -y install libgomp && \
-    yum clean all;
 
 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
     systemd-tmpfiles-setup.service ] || rm -f $i; done); \
@@ -18,418 +16,119 @@ FROM base AS build
 
 WORKDIR /tmp/workdir
 
-ENV FFMPEG_VERSION=5.1.2 \
-    AOM_VERSION=v1.0.0 \
-    FDKAAC_VERSION=0.1.5 \
-    FONTCONFIG_VERSION=2.12.4 \
-    FREETYPE_VERSION=2.10.4 \
-    FRIBIDI_VERSION=0.19.7 \
-    KVAZAAR_VERSION=2.0.0 \
-    LAME_VERSION=3.100 \
-    LIBASS_VERSION=0.13.7 \
-    LIBPTHREAD_STUBS_VERSION=0.4 \
-    OGG_VERSION=1.3.2 \
-    OPUS_VERSION=1.2 \
-    OPENJPEG_VERSION=2.1.2 \
-    VORBIS_VERSION=1.3.5 \
-    VPX_VERSION=1.8.0 \
-    WEBP_VERSION=1.0.2 \
-    X264_VERSION=20170226-2245-stable \
-    X265_VERSION=3.4 \
-    LIBZMQ_VERSION=4.3.2 \
-    LIBSRT_VERSION=1.4.1 \
-    LIBPNG_VERSION=1.6.9 \
-    SRC=/usr/local
-
-ARG FREETYPE_SHA256SUM="5eab795ebb23ac77001cfb68b7d4d50b5d6c7469247b0b01b2c953269f658dac freetype-2.10.4.tar.gz"
-ARG FRIBIDI_SHA256SUM="3fc96fa9473bd31dcb5500bdf1aa78b337ba13eb8c301e7c28923fea982453a8 0.19.7.tar.gz"
-ARG LIBASS_SHA256SUM="8fadf294bf701300d4605e6f1d92929304187fca4b8d8a47889315526adbafd7 0.13.7.tar.gz"
-ARG OGG_SHA256SUM="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692 libogg-1.3.2.tar.gz"
-ARG OPUS_SHA256SUM="77db45a87b51578fbc49555ef1b10926179861d854eb2613207dc79d9ec0a9a9 opus-1.2.tar.gz"
-ARG VORBIS_SHA256SUM="6efbcecdd3e5dfbf090341b485da9d176eb250d893e3eb378c428a2db38301ce libvorbis-1.3.5.tar.gz"
-ARG LIBZMQ_SHA256SUM="02ecc88466ae38cf2c8d79f09cfd2675ba299a439680b64ade733e26a349edeb v4.3.2.tar.gz"
+ENV SRC=/usr/local \
+    BUILD=/tmp/build
 
 ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib
-ARG MAKEFLAGS="-j2"
-ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig"
-ARG PREFIX=/opt/ffmpeg
+ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig:/lib64/pkgconfig"
+ARG LOCALDESTDIR=/opt/ffmpeg
 ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64"
 
-RUN buildDeps="autoconf \
-    automake \
-    bzip2 \
-    cmake3 \
-    diffutils \
-    expat-devel \
-    file \
-    gcc \
-    gcc-c++ \
-    git \
-    gperf \
-    libtool \
-    make \
-    perl \
-    python3 \
-    openssl-devel \
-    tar \
-    yasm \
-    which \
-    zlib-devel" && \
+RUN \
+    buildDeps="bzip2 gperf which libticonv autoconf automake cmake diffutils file gcc \
+    ninja-build wget nasm gcc-c++ git libtool make perl yasm meson x264-devel zlib-devel \
+    expat-devel fontconfig-devel libxml2-devel lame-devel libpng-devel numactl-devel \
+    fribidi-devel zeromq-devel freetype-devel opus-devel libass-devel openssl-devel" && \
     echo "${SRC}/lib" > /etc/ld.so.conf.d/libc.conf && \
-    yum --enablerepo=extras install -y epel-release && \
-    yum --enablerepo=epel install -y ${buildDeps} && \
-    alternatives --install /usr/bin/cmake cmake /usr/bin/cmake3 0 && \
-    # Install the tools required to build nasm 2.14.02 \
-    nasmDeps="asciidoc \
-        perl-Font-TTF \
-        perl-Sort-Versions \
-        xmlto" && \
-    yum --enablerepo=epel install -y ${nasmDeps} && \
-    # Compile and install nasm 2.14.02 \
-    DIR=/tmp/nasm && \
-    mkdir -p ${DIR} && \
-    curl -LSs https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz | \
-    tar xzC ${DIR} --strip-components=1 && \
-    pushd ${DIR} && \
-    ./configure --host=x86_64-redhat-linux-gnu \
-        --build=x86_64-redhat-linux-gnu \
-        --prefix=/usr/local \
-        --exec-prefix=/usr/local \
-        --bindir=/usr/local/bin \
-        --sbindir=/usr/local/sbin \
-        --sysconfdir=/usr/local/etc \
-        --datadir=/usr/local/share \
-        --includedir=/usr/local/include \
-        --libdir=/usr/local/lib \
-        --libexecdir=/usr/local/libexec \
-        --enable-sections && \
-    make all && \
-    make install && \
-    make install_rdf && \
-    popd && rm -rf ${DIR} && \
-    alternatives --install /usr/bin/nasm nasm /usr/local/bin/nasm 0 && \
-    # Now that we have a modern nasm build and available, we can undo the last \
-    # yum transaction as none of those packages are required for the rest of the build \
-    yum history undo $(yum history info | grep 'Transaction ID' | awk -F: '{print$2}' | tr -d ' ') -y && \
-    yum autoremove -y
+    dnf install -y epel-release && \
+    dnf install -y 'dnf-command(config-manager)' && \
+    dnf config-manager --set-enabled crb && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y ${buildDeps} && \
+    mkdir -p ${BUILD}
 
-## x264 http://www.videolan.org/developers/x264.html
 RUN \
-    DIR=/tmp/x264 && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-${X264_VERSION}.tar.bz2 | \
-    tar -jx --strip-components=1 && \
-    ./configure --prefix="${PREFIX}" --enable-shared --enable-pic --disable-cli && \
+    cd ${BUILD} && \
+    git clone --depth 1 "https://github.com/Haivision/srt.git" && \
+    cd srt && \
+    mkdir build && \
+    cd build && \
+    cmake .. -DCMAKE_INSTALL_PREFIX="$LOCALDESTDIR" -DENABLE_SHARED:BOOLEAN=OFF -DUSE_STATIC_LIBSTDCXX:BOOLEAN=ON \
+        -DENABLE_CXX11:BOOLEAN=OFF -DCMAKE_INSTALL_BINDIR="bin" -DCMAKE_INSTALL_LIBDIR="lib" -DCMAKE_INSTALL_INCLUDEDIR="include" && \
     make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
+    make install
 
-### x265 http://x265.org/
 RUN \
-    DIR=/tmp/x265 && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://github.com/videolan/x265/archive/refs/tags/${X265_VERSION}.tar.gz | \
-    tar -zx && \
-    cd x265-${X265_VERSION}/build/linux && \
-    sed -i "/-DEXTRA_LIB/ s/$/ -DCMAKE_INSTALL_PREFIX=\${PREFIX}/" multilib.sh && \
-    sed -i "/^cmake/ s/$/ -DENABLE_CLI=OFF/" multilib.sh && \
-    ./multilib.sh && \
-    make -C 8bit install && \
-    rm -rf ${DIR}
+    cd ${BUILD} && \
+    git clone --depth 1 "https://code.videolan.org/rist/librist.git" && \
+    cd librist && \
+    mkdir build && \
+    cd build && \
+    meson setup --default-library=static --prefix "$LOCALDESTDIR" --libdir="$LOCALDESTDIR/lib" .. && \
+    ninja && \
+    ninja install
 
-### libogg https://www.xiph.org/ogg/
 RUN \
-    DIR=/tmp/ogg && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz && \
-    echo ${OGG_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f libogg-${OGG_VERSION}.tar.gz && \
-    ./configure --prefix="${PREFIX}" --enable-shared  && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### libopus https://www.opus-codec.org/
-RUN \
-    DIR=/tmp/opus && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz && \
-    echo ${OPUS_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f opus-${OPUS_VERSION}.tar.gz && \
-    autoreconf -fiv && \
-    ./configure --prefix="${PREFIX}" --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### libvorbis https://xiph.org/vorbis/
-RUN \
-    DIR=/tmp/vorbis && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz && \
-    echo ${VORBIS_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f libvorbis-${VORBIS_VERSION}.tar.gz && \
-    ./configure --prefix="${PREFIX}" --with-ogg="${PREFIX}" --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### libvpx https://www.webmproject.org/code/
-RUN \
-    DIR=/tmp/vpx && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \
-    tar -zx --strip-components=1 && \
-    ./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \
-    --disable-debug --disable-examples --disable-docs --disable-install-bins  && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### libwebp https://developers.google.com/speed/webp/
-RUN \
-    DIR=/tmp/vebp && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz | \
-    tar -zx --strip-components=1 && \
-    ./configure --prefix="${PREFIX}" --enable-shared  && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### libmp3lame http://lame.sourceforge.net/
-RUN \
-    DIR=/tmp/lame && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://sourceforge.net/projects/lame/files/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz/download | \
-    tar -zx --strip-components=1 && \
-    ./configure --prefix="${PREFIX}" --bindir="${PREFIX}/bin" --enable-shared --enable-nasm --disable-frontend && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-### fdk-aac https://github.com/mstorsjo/fdk-aac
-RUN \
-    DIR=/tmp/fdk-aac && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://github.com/mstorsjo/fdk-aac/archive/v${FDKAAC_VERSION}.tar.gz | \
-    tar -zx --strip-components=1 && \
-    autoreconf -fiv && \
-    ./configure --prefix="${PREFIX}" --enable-shared --datadir="${DIR}" && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## openjpeg https://github.com/uclouvain/openjpeg
-RUN \
-    DIR=/tmp/openjpeg && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sL https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz | \
-    tar -zx --strip-components=1 && \
-    cmake -DBUILD_THIRDPARTY:BOOL=ON -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## freetype https://www.freetype.org/
-RUN  \
-    DIR=/tmp/freetype && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz && \
-    echo ${FREETYPE_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f freetype-${FREETYPE_VERSION}.tar.gz && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## fridibi https://www.fribidi.org/
-RUN  \
-    DIR=/tmp/fribidi && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/fribidi/fribidi/archive/${FRIBIDI_VERSION}.tar.gz && \
-    echo ${FRIBIDI_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f ${FRIBIDI_VERSION}.tar.gz && \
-    sed -i 's/^SUBDIRS =.*/SUBDIRS=gen.tab charset lib bin/' Makefile.am && \
-    ./bootstrap --no-config --auto && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j1 && \
-    make install && \
-    rm -rf ${DIR}
-
-## fontconfig https://www.freedesktop.org/wiki/Software/fontconfig/
-RUN  \
-    DIR=/tmp/fontconfig && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG_VERSION}.tar.bz2 && \
-    tar -jx --strip-components=1 -f fontconfig-${FONTCONFIG_VERSION}.tar.bz2 && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## libass https://github.com/libass/libass
-RUN  \
-    DIR=/tmp/libass && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/libass/libass/archive/${LIBASS_VERSION}.tar.gz && \
-    echo ${LIBASS_SHA256SUM} | sha256sum --check && \
-    tar -zx --strip-components=1 -f ${LIBASS_VERSION}.tar.gz && \
+    cd ${BUILD} && \
+    git clone --depth 1 "https://github.com/mstorsjo/fdk-aac" && \
+    cd fdk-aac && \
     ./autogen.sh && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
+    ./configure --prefix="$LOCALDESTDIR" --enable-shared=no && \
     make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
+    make install
 
-## kvazaar https://github.com/ultravideo/kvazaar
 RUN \
-    DIR=/tmp/kvazaar && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/ultravideo/kvazaar/archive/v${KVAZAAR_VERSION}.tar.gz && \
-    tar -zx --strip-components=1 -f v${KVAZAAR_VERSION}.tar.gz && \
-    ./autogen.sh && \
-    ./configure --prefix="${PREFIX}" --disable-static --enable-shared && \
+    cd ${BUILD} && \
+    git clone --depth 1 "https://gitlab.com/AOMediaCodec/SVT-AV1.git" && \
+    cd SVT-AV1/Build && \
+    rm -rf * && \
+    cmake .. -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$LOCALDESTDIR" -DCMAKE_BUILD_TYPE=Release \
+        -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_BINDIR="bin" -DCMAKE_INSTALL_LIBDIR="lib" -DCMAKE_INSTALL_INCLUDEDIR="include" && \
     make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
+    make install
 
 RUN \
-    DIR=/tmp/aom && \
-    git clone --branch ${AOM_VERSION} --depth 1 https://aomedia.googlesource.com/aom ${DIR} && \
-    cd ${DIR} && \
-    rm -rf CMakeCache.txt CMakeFiles && \
-    mkdir -p ./aom_build && \
-    cd ./aom_build && \
-    cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DBUILD_SHARED_LIBS=1 .. && \
-    make && \
-    make install && \
-    rm -rf ${DIR}
+    cd ${BUILD} && \
+    git clone --depth 1 "https://code.videolan.org/videolan/dav1d.git" && \
+    cd dav1d && \
+    mkdir build && \
+    cd build && \
+    meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$LOCALDESTDIR" --libdir="$LOCALDESTDIR/lib" && \
+    ninja && \
+    ninja install
 
 RUN \
-    DIR=/tmp/libpthread-stubs && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://xcb.freedesktop.org/dist/libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \
-    tar -zx --strip-components=1 -f libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz && \
-    ./configure --prefix="${PREFIX}" && \
+    cd ${BUILD} && \
+    git clone "https://github.com/webmproject/libvpx.git" && \
+    cd libvpx && \
+    ./configure --prefix="$LOCALDESTDIR" --disable-shared --enable-static --disable-unit-tests --disable-docs --enable-postproc --enable-vp9-postproc --enable-runtime-cpu-detect && \
+     make -j $(nproc | awk '{print $1 / 2}') && \
+    make install
+
+RUN \
+    cd ${BUILD} && \
+    git clone "https://bitbucket.org/multicoreware/x265_git.git" x265 && \
+    cd x265/build && \
+    rm -rf * && \
+    cmake ../source -DCMAKE_INSTALL_PREFIX="$LOCALDESTDIR" -DENABLE_SHARED:BOOLEAN=OFF -DCMAKE_CXX_FLAGS_RELEASE:STRING="-O3 -DNDEBUG" && \
     make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
+    make install
 
-## libzmq https://github.com/zeromq/libzmq/
 RUN \
-    DIR=/tmp/libzmq && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/zeromq/libzmq/archive/v${LIBZMQ_VERSION}.tar.gz && \
-    echo ${LIBZMQ_SHA256SUM} | sha256sum --check && \
-    tar -xz --strip-components=1 -f v${LIBZMQ_VERSION}.tar.gz && \
-    ./autogen.sh && \
-    ./configure --prefix="${PREFIX}" && \
+    cd ${BUILD} && \
+    wget "https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2" && \
+    tar xfvj ffmpeg-snapshot.tar.bz2 && \
+    rm -rf ffmpeg-snapshot.tar.bz2 && \
+    cd ffmpeg && \
+    ./configure --prefix="$LOCALDESTDIR" --enable-pthreads --extra-libs=-lpthread \
+    --disable-debug --disable-shared --disable-doc --enable-gpl --enable-version3 --pkg-config-flags=--static \
+    --enable-nonfree --enable-runtime-cpudetect --enable-fontconfig \
+    --enable-openssl --enable-libass --enable-libfdk-aac --enable-libfreetype \
+    --enable-libfribidi --enable-libmp3lame --enable-libopus --enable-libvpx --enable-librist \
+    --enable-libsrt --enable-libx264 --enable-libx265 --enable-libzmq --enable-libsvtav1 --enable-libdav1d && \
     make -j $(nproc | awk '{print $1 / 2}') && \
-    make check && \
-    make install && \
-    rm -rf ${DIR}
-
-## libsrt https://github.com/Haivision/srt
-RUN \
-    DIR=/tmp/srt && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    curl -sLO https://github.com/Haivision/srt/archive/v${LIBSRT_VERSION}.tar.gz && \
-    tar -xz --strip-components=1 -f v${LIBSRT_VERSION}.tar.gz && \
-    cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" . && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    rm -rf ${DIR}
-
-## libpng
-RUN \
-    DIR=/tmp/png && \
-    mkdir -p ${DIR} && \
-    cd ${DIR} && \
-    git clone https://git.code.sf.net/p/libpng/code ${DIR} -b v${LIBPNG_VERSION} --depth 1 && \
-    ./autogen.sh && \
-    ./configure --prefix="${PREFIX}" && \
-    make check && \
-    make install && \
-    rm -rf ${DIR}
-
-## Download ffmpeg https://ffmpeg.org/
-RUN  \
-    DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \
-    curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
-    tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
-    ./configure --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-gpl --extra-libs=-ldl && \
-    make && make install
-
-## Build ffmpeg https://ffmpeg.org/
-RUN  \
-    DIR=/tmp/ffmpeg && cd ${DIR} && \
-    ./configure \
-    --disable-debug \
-    --disable-doc \
-    --disable-ffplay \
-    --enable-gpl \
-    --enable-libaom \
-    --enable-libass \
-    --enable-libfdk_aac \
-    --enable-libfreetype \
-    --enable-libmp3lame \
-    --enable-libopenjpeg \
-    --enable-libopus \
-    --enable-libsrt \
-    --enable-libvorbis \
-    --enable-libvpx \
-    --enable-libwebp \
-    --enable-libx264 \
-    --enable-libx265 \
-    --enable-libzmq \
-    --enable-nonfree \
-    --enable-fontconfig \
-    --enable-postproc \
-    --enable-shared \
-    --enable-version3 \
-    --extra-cflags="-I${PREFIX}/include" \
-    --extra-ldflags="-L${PREFIX}/lib" \
-    --extra-libs=-ldl \
-    --extra-libs=-lpthread \
-    --prefix="${PREFIX}" && \
-    make clean && \
-    make -j $(nproc | awk '{print $1 / 2}') && \
-    make install && \
-    make tools/zmqsend && cp tools/zmqsend ${PREFIX}/bin/ && \
-    make distclean && \
-    hash -r && \
-    cd tools && \
-    make qt-faststart && cp qt-faststart ${PREFIX}/bin/
+    make install
 
 RUN \
-    ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib64/ && \
-    for lib in /usr/local/lib64/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \
-    cp ${PREFIX}/bin/* /usr/local/bin/ && \
-    cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \
-    LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib ffmpeg -buildconf && \
-    cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \
-    mkdir -p /usr/local/lib64/pkgconfig && \
-    for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \
-        sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib64/pkgconfig/"${pc##*/}"; \
-    done
+    cd / && \
+    cp /opt/ffmpeg/bin/ff* /usr/local/bin/ && \
+    rm -rf $BUILD $LOCALDESTDIR && \
+    dnf -y remove autoconf automake cmake diffutils file gcc ninja-build nasm gcc-c++ git libtool make perl yasm meson \
+    x264-devel zlib-devel expat-devel fontconfig-devel libxml2-devel lame-devel libpng-devel numactl-devel \
+    fribidi-devel zeromq-devel freetype-devel opus-devel libass-devel openssl-devel && \
+    dnf autoremove -y && \
+    dnf clean all
 
 FROM base
 
@@ -443,16 +142,21 @@ ADD ./overide.conf /etc/systemd/system/ffplayout.service.d/overide.conf
 ADD ./overide.conf /etc/systemd/system/ffpapi.service.d/overide.conf
 
 RUN \
-    yum update -y \
-    && yum install -y wget dejavu-sans-fonts sudo \
-    && wget -q -O /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm "https://github.com/ffplayout/ffplayout/releases/download/v${FFPLAYOUT_VERSION}/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm" \
-    && yum install -y /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm \
-    && yum clean all \
-    && rm /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm \
-    && mkdir -p /home/ffpu && chown -R ffpu: /home/ffpu \
-    && systemctl enable ffplayout \
-    && systemctl enable ffpapi \
-    && ffpapi -u admin -p admin -m contact@example.com
+    dnf update -y \
+    dnf install -y epel-release && \
+    dnf install -y 'dnf-command(config-manager)' && \
+    dnf config-manager --set-enabled crb && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm && \
+    dnf install -y wget dejavu-sans-fonts sudo x264-libs fontconfig lame libpng numactl fribidi zeromq freetype opus libass && \
+    wget -q -O /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm "https://github.com/ffplayout/ffplayout/releases/download/v${FFPLAYOUT_VERSION}/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm" && \
+    dnf install -y /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
+    dnf clean all && \
+    rm /tmp/ffplayout-${FFPLAYOUT_VERSION}-1.x86_64.rpm && \
+    mkdir -p /home/ffpu && chown -R ffpu: /home/ffpu && \
+    systemctl enable ffplayout && \
+    systemctl enable ffpapi && \
+    ffpapi -u admin -p admin -m contact@example.com
 
 EXPOSE 8787
 
diff --git a/docker/nvidia-centos7.Dockerfile b/docker/nvidia-centos7.Dockerfile
index 089fb422..d08e64e3 100644
--- a/docker/nvidia-centos7.Dockerfile
+++ b/docker/nvidia-centos7.Dockerfile
@@ -77,7 +77,7 @@ ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
 RUN curl -fsSLO https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2 \
   && tar -xjf ffmpeg-$FFMPEG_VERSION.tar.bz2 \
   && cd ffmpeg-$FFMPEG_VERSION \
-  && ./configure --enable-nvenc --enable-libx264 --enable-gpl --enable-libfdk_aac  --enable-libx264  --enable-nonfree  --enable-postproc  --enable-shared  --enable-version3 \
+  && ./configure --enable-nvenc --enable-libx264 --enable-gpl --enable-libfdk_aac --enable-nonfree  --enable-postproc  --enable-shared  --enable-version3 \
   && make -j$(nproc) \
   && make install
 
diff --git a/docker/overide.conf b/docker/override.conf
similarity index 100%
rename from docker/overide.conf
rename to docker/override.conf
diff --git a/ffplayout-engine/Cargo.toml b/ffplayout-engine/Cargo.toml
index ac9b43ea..e4d14364 100644
--- a/ffplayout-engine/Cargo.toml
+++ b/ffplayout-engine/Cargo.toml
@@ -17,7 +17,8 @@ clap = { version = "3.2", features = ["derive"] }
 crossbeam-channel = "0.5"
 futures = "0.3"
 jsonrpc-http-server = "18.0"
-notify = "4.0"
+notify = "6.0"
+notify-debouncer-full = { version = "*", default-features = false }
 regex = "1"
 reqwest = { version = "0.11", features = ["blocking", "json"] }
 serde = { version = "1.0", features = ["derive"] }
diff --git a/ffplayout-engine/src/input/folder.rs b/ffplayout-engine/src/input/folder.rs
index d3f57a19..fd93692d 100644
--- a/ffplayout-engine/src/input/folder.rs
+++ b/ffplayout-engine/src/input/folder.rs
@@ -10,9 +10,11 @@ use std::{
 };
 
 use notify::{
-    DebouncedEvent::{Create, Remove, Rename},
-    {watcher, RecursiveMode, Watcher},
+    event::{CreateKind, ModifyKind, RemoveKind, RenameMode},
+    EventKind::{Create, Modify, Remove},
+    RecursiveMode, Watcher,
 };
+use notify_debouncer_full::new_debouncer;
 use simplelog::*;
 
 use ffplayout_lib::utils::{include_file, Media, PlayoutConfig};
@@ -25,56 +27,82 @@ pub fn watchman(
     is_terminated: Arc<AtomicBool>,
     sources: Arc<Mutex<Vec<Media>>>,
 ) {
-    let (tx, rx) = channel();
+    let path = Path::new(&config.storage.path);
 
-    let path = config.storage.path.clone();
-
-    if !Path::new(&path).exists() {
-        error!("Folder path not exists: '{path}'");
-        panic!("Folder path not exists: '{path}'");
+    if !path.exists() {
+        error!("Folder path not exists: '{path:?}'");
+        panic!("Folder path not exists: '{path:?}'");
     }
 
-    let mut watcher = watcher(tx, Duration::from_secs(1)).unwrap();
-    watcher.watch(path, RecursiveMode::Recursive).unwrap();
+    // let (tx, rx) = channel();
+    let (tx, rx) = channel();
+
+    let mut debouncer = new_debouncer(Duration::from_secs(1), None, tx).unwrap();
+
+    debouncer
+        .watcher()
+        .watch(path, RecursiveMode::Recursive)
+        .unwrap();
+    debouncer.cache().add_root(path, RecursiveMode::Recursive);
 
     while !is_terminated.load(Ordering::SeqCst) {
-        if let Ok(res) = rx.try_recv() {
-            match res {
-                Create(new_path) => {
-                    let index = sources.lock().unwrap().len();
-                    let media = Media::new(index, &new_path.to_string_lossy(), false);
+        if let Ok(result) = rx.try_recv() {
+            match result {
+                Ok(events) => events.iter().for_each(|event| match event.kind {
+                    Create(CreateKind::File) => {
+                        let new_path = &event.paths[0];
+                        let index = sources.lock().unwrap().len();
+                        let media = Media::new(index, &new_path.to_string_lossy(), false);
 
-                    if include_file(config.clone(), &new_path) {
-                        sources.lock().unwrap().push(media);
-                        info!("Create new file: <b><magenta>{new_path:?}</></b>");
+                        if include_file(config.clone(), new_path) {
+                            sources.lock().unwrap().push(media);
+                            info!("Create new file: <b><magenta>{new_path:?}</></b>");
+                        }
                     }
-                }
-                Remove(old_path) => {
-                    if include_file(config.clone(), &old_path) {
-                        sources
-                            .lock()
-                            .unwrap()
-                            .retain(|x| x.source != old_path.display().to_string());
-                        info!("Remove file: <b><magenta>{old_path:?}</></b>");
-                    }
-                }
-                Rename(old_path, new_path) => {
-                    let index = sources
+                    Modify(ModifyKind::Name(RenameMode::Both)) => {
+                        let old_path = &event.paths[0];
+                        let new_path = &event.paths[1];
+
+                        let index = sources
                         .lock()
                         .unwrap()
                         .iter()
                         .position(|x| *x.source == old_path.display().to_string())
                         .unwrap();
 
-                    let media = Media::new(index, &new_path.to_string_lossy(), false);
-                    sources.lock().unwrap()[index] = media;
+                        let media = Media::new(index, &new_path.to_string_lossy(), false);
+                        sources.lock().unwrap()[index] = media;
 
-                    info!("Rename file: <b><magenta>{old_path:?}</></b> to <b><magenta>{new_path:?}</></b>");
-                }
-                _ => (),
+                        info!("Move file: <b><magenta>{old_path:?}</></b> to <b><magenta>{new_path:?}</></b>");
+                    }
+                    Modify(ModifyKind::Name(RenameMode::From)) => {
+                        let old_path = &event.paths[0];
+
+                        if !old_path.is_file() && include_file(config.clone(), old_path) {
+                            sources
+                                .lock()
+                                .unwrap()
+                                .retain(|x| x.source != old_path.to_string_lossy());
+                            info!("Remove file: <b><magenta>{old_path:?}</></b>");
+                        }
+                    }
+                    Remove(RemoveKind::File) => {
+                        let old_path = &event.paths[0];
+
+                        if include_file(config.clone(), old_path) {
+                            sources
+                                .lock()
+                                .unwrap()
+                                .retain(|x| x.source != old_path.to_string_lossy());
+                            info!("Remove file: <b><magenta>{old_path:?}</></b>");
+                        }
+                    }
+                    _ => (),
+                }),
+                Err(errors) => errors.iter().for_each(|error| error!("{error:?}")),
             }
         }
 
-        sleep(Duration::from_secs(5));
+        sleep(Duration::from_secs(3));
     }
 }