diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8a81654f9503543e0a3771068c7bfe2ead420883..f95f90155c5ed113d1ae4e6e28efc11b55f1a6c4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,19 +3,26 @@ image: alpine:3.9
 stages:
  - build
  - test
- - package
- - release
  - notify
 
+.template:only:merge: &only-merge
+  only:
+    - merge_requests
+
+.template:only:master: &only-master
+  only:
+    refs:
+      - master
+
+.template:only:tag: &only-tag
+  only:
+    - /^v.*$/
+  except:
+    - branches
 
-#######################################################################################################################
-#######################################################################################################################
 #######################################################################################################################
 # build + test
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro.yml
-
 .template:build:
   dependencies: []
   stage: build
@@ -37,13 +44,32 @@ stages:
     - cd build
     - ctest . --output-on-failure -j $(grep -c processor /proc/cpuinfo)
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_alpine.yml
-
 .config:alpine: &distro_alpine
+  <<: *only-merge
   image: alpine:3.9
-  only:
-    - merge_requests
+
+.config:archlinux: &distro_archlinux
+  <<: *only-merge
+  image: archlinux/base
+
+.config:builder: &distro_builder
+  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
+
+.config:debian: &distro_debian
+  <<: *only-merge
+  image: amd64/debian:testing-slim
+
+.config:opensuse:leap: &distro_opensuse-leap
+  <<: *only-merge
+  image: opensuse/leap:latest
+
+.config:ubuntu:lts: &distro_ubuntu-lts
+  <<: *only-merge
+  image: ubuntu:latest
+
+.config:ubuntu:rolling: &distro_ubuntu-rolling
+  <<: *only-merge
+  image: ubuntu:rolling
 
 # -----------------------------------------------------------------------------
 
@@ -61,14 +87,6 @@ test:alpine:
   before_script:
     - apk add --no-cache bash bc coreutils python3 cmake libexecinfo libxml2 tclap readline qt5-qtbase qt5-qtbase-x11 graphviz jsoncpp
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_arch.yml
-
-.config:archlinux: &distro_archlinux
-  image: archlinux/base
-  only:
-    - merge_requests
-
 # -----------------------------------------------------------------------------
 
 build:archlinux:
@@ -76,7 +94,6 @@ build:archlinux:
   extends: .template:build
   before_script:
     - pacman -Syu --noconfirm base-devel cmake ninja python libxml2 tclap readline qt5-base graphviz jsoncpp
-    # - pacman -Syu --noconfirm binutils && strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5 # qt hack
 
 test:archlinux:
   <<: *distro_archlinux
@@ -85,15 +102,8 @@ test:archlinux:
     - build:archlinux
   before_script:
     - pacman -Syu --noconfirm base-devel bash bc coreutils cmake ninja python libxml2 tclap readline qt5-base graphviz jsoncpp
-    # - pacman -Syu --noconfirm binutils && strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5 # qt hack
-
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_builder.yml
 
-.config:builder: &distro_builder
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
-  except:
-    - tags
+# -----------------------------------------------------------------------------
 
 .build:builder:
   <<: *distro_builder
@@ -103,8 +113,6 @@ test:archlinux:
   <<: *distro_builder
   extends: .template:test
 
-# -----------------------------------------------------------------------------
-
 build:builder:gcc:
   extends: .build:builder
 
@@ -123,22 +131,13 @@ test:builder:clang:
   dependencies:
     - build:builder:clang
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_debian.yml
-
-.config:debian: &distro_debian
-  image: amd64/debian:testing-slim
-  only:
-    - merge_requests
-
 # -----------------------------------------------------------------------------
 
 build:debian:
   <<: *distro_debian
   extends: .template:build
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
+    - apt-get update && apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
 
 test:debian:
   <<: *distro_debian
@@ -146,16 +145,7 @@ test:debian:
   dependencies:
     - build:debian
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
-
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_opensuse.yml
-
-.config:opensuse:leap: &distro_opensuse-leap
-  image: opensuse/leap:latest
-  only:
-    - merge_requests
+    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
 
 # -----------------------------------------------------------------------------
 
@@ -173,22 +163,13 @@ test:opensuse:leap:
   before_script:
     - zypper -n install bash cmake libxml2 readline libQt5Widgets5 libQt5Xml5 graphviz libjsoncpp19
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_ubuntu-lts.yml
-
-.config:ubuntu:lts: &distro_ubuntu-lts
-  image: ubuntu:latest
-  only:
-    - merge_requests
-
 # -----------------------------------------------------------------------------
 
 build:ubuntu:lts:
   <<: *distro_ubuntu-lts
   extends: .template:build
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
+    - apt-get update && apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
 
 test:ubuntu:lts:
   <<: *distro_ubuntu-lts
@@ -196,16 +177,7 @@ test:ubuntu:lts:
   dependencies:
     - build:ubuntu:lts
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
-
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# distro_ubuntu-rolling.yml
-
-.config:ubuntu:rolling: &distro_ubuntu-rolling
-  image: ubuntu:rolling
-  only:
-    - merge_requests
+    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
 
 # -----------------------------------------------------------------------------
 
@@ -213,21 +185,19 @@ build:ubuntu:rolling:
   <<: *distro_ubuntu-rolling
   extends: .template:build
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
+    - apt-get update && apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
 
 test:ubuntu:rolling:
   <<: *distro_ubuntu-rolling
   extends: .template:test
   before_script:
-    - apt-get update
-    - apt-get install -y build-essential bash cmake libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
   dependencies:
     - build:ubuntu:rolling
 
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# doc.yml
+#######################################################################################################################
+# doc
 
 doc:doc:
   stage: build
@@ -241,8 +211,8 @@ doc:doc:
       - doc/
     expire_in: 1 day
 
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# static-analysis.yml
+#######################################################################################################################
+# static analysis
 
 .template:static-analysis:
   stage: build
@@ -254,11 +224,6 @@ doc:doc:
     - popd
   allow_failure: true # TODO: Remove
   dependencies: []
-  only:
-    - merge_requests
-    - branches
-  except:
-    - tags
 
 # -----------------------------------------------------------------------------
 
@@ -274,333 +239,6 @@ static-analysis:clang-tidy:
     - jq ".[].file" build/compile_commands.json | tr -d "\"" | grep -v "test-src" | xargs -n1 -P$(grep -c processor /proc/cpuinfo) clang-tidy -p build/
 
 
-#######################################################################################################################
-#######################################################################################################################
-#######################################################################################################################
-# package + release
-
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# release.yml
-
-.template:only:snapshot: &release_snapshot
-  only:
-    refs:
-      - master
-
-.template:only:tag: &release_stable
-  only:
-    - tags
-    - /^v.*$/
-
-.template:package:
-  stage: package
-  tags:
-    - altbuilder
-  dependencies: []
-  script:
-    - LINUX=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
-    - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f4)
-    - export DISTRIBUTION=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
-    - if [[ $LINUX == "ubuntu" ]]; then LINUX="debian"; fi
-    - ./extra/scripts/CD/packaging/package.sh $MODE $LINUX package .
-
-
-.docker: &docker
-  image: docker:dind
-  cache: {}  # disable
-  services:
-    - docker:dind
-  variables:
-    DOCKER_DRIVER: overlay2
-    DOCKER_TLS_CERTDIR: "/certs"
-  before_script:
-    - apk add docker bash
-    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
-    - docker info
-
-.package:docker:
-  <<: *docker
-  extends: .template:package
-  artifacts:
-    paths:
-      - images.tar
-    expire_in: 1 day
-
-package:docker::snapshot:
-  <<: *release_snapshot
-  extends: .package:docker
-
-package:docker::stable:
-  <<: *release_stable
-  extends: .package:docker
-
-
-
-
-.package:sources:
-  image: alpine:latest
-  extends: .template:package
-  before_script:
-    - apk add bash
-  artifacts:
-    paths:
-      - "*.tar.gz*"
-    expire_in: 1 day
-
-package:sources::snapshot:
-  <<: *release_snapshot
-  extends: .package:sources
-
-package:sources::stable:
-  <<: *release_stable
-  extends: .package:sources
-
-
-
-.package:archlinux:
-  image: archlinux/base
-  extends: .template:package
-  artifacts:
-    paths:
-      - "*.pkg.tar.xz*"
-    expire_in: 1 day
-  variables:
-    PACKAGER: "Tomáš Pecka <peckato1@fit.cvut.cz>"
-
-package:archlinux::snapshot:
-  <<: *release_snapshot
-  extends: .package:archlinux
-
-package:archlinux::stable:
-  <<: *release_stable
-  extends: .package:archlinux
-
-
-
-.package:debian:
-  extends: .template:package
-  artifacts:
-    paths:
-      - "*.deb"
-      - "*.ddeb"
-      - "*.changes"
-      - "*.buildinfo"
-    expire_in: 1 day
-  variables:
-    LOGNAME: "peckato1"
-    DEBFULLNAME: "Tomáš Pecka"
-    DEBEMAIL: "peckato1@fit.cvut.cz"
-
-# ---------------------------
-
-.package:debian:buster:
-  image: amd64/debian:buster
-  extends: .package:debian
-
-.package:debian:bullseye:
-  image: amd64/debian:bullseye
-  extends: .package:debian
-
-package:debian:buster:snapshot:
-  <<: *release_snapshot
-  extends: .package:debian:buster
-
-package:debian:buster:stable:
-  <<: *release_stable
-  extends: .package:debian:buster
-
-package:debian:bullseye:snapshot:
-  <<: *release_snapshot
-  extends: .package:debian:bullseye
-
-package:debian:bullseye:stable:
-  <<: *release_stable
-  extends: .package:debian:bullseye
-
-# ---------------------------
-
-.package:ubuntu:bionic:
-  image: ubuntu:bionic
-  extends: .package:debian
-
-.package:ubuntu:cosmic:
-  image: ubuntu:bionic
-  extends: .package:debian
-
-.package:ubuntu:disco:
-  image: ubuntu:disco
-  extends: .package:debian
-
-package:ubuntu:bionic:snapshot:
-  <<: *release_snapshot
-  extends: .package:ubuntu:bionic
-
-package:ubuntu:bionic:stable:
-  <<: *release_stable
-  extends: .package:ubuntu:bionic
-
-package:ubuntu:cosmic:snapshot:
-  <<: *release_snapshot
-  extends: .package:ubuntu:cosmic
-
-package:ubuntu:cosmic:stable:
-  <<: *release_stable
-  extends: .package:ubuntu:cosmic
-
-package:ubuntu:disco:snapshot:
-  <<: *release_snapshot
-  extends: .package:ubuntu:disco
-
-package:ubuntu:disco:stable:
-  <<: *release_stable
-  extends: .package:ubuntu:disco
-
-
-# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# release.yml
-
-.template:release:
-  stage: release
-  dependencies: []
-  tags:
-    - altvm
-  script:
-    - LINUX=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
-    - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f4)
-    - export DISTRIBUTION=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
-    - if [[ $LINUX == "ubuntu" ]]; then LINUX="debian"; fi
-    - extra/scripts/CD/packaging/package.sh $MODE $LINUX deploy .
-
-
-
-.release:docker:
-  <<: *docker
-  extends: .template:release
-  tags:
-    - altbuilder
-  environment:
-    name: docker-nightly
-    url: https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/container_registry
-
-release:docker::snapshot:
-  <<: *release_snapshot
-  extends: .release:docker
-  dependencies:
-    - package:docker::snapshot
-
-release:docker::stable:
-  <<: *release_stable
-  extends: .release:docker
-  dependencies:
-    - package:docker::stable
-
-
-
-.release:archlinux:
-  extends: .template:release
-  environment:
-    name: archlinux
-    url: https://repository.alt.pecka.me/archlinux/
-
-release:archlinux::snapshot:
-  <<: *release_snapshot
-  extends: .release:archlinux
-  dependencies:
-    - package:archlinux::snapshot
-
-release:archlinux:release:
-  <<: *release_stable
-  extends: .release:archlinux
-  dependencies:
-    - package:archlinux::stable
-
-
-.release:debian:
-  extends: .template:release
-  environment:
-    name: debian
-    url: https://repository.alt.pecka.me/debian/
-
-release:debian:buster:snapshot:
-  <<: *release_snapshot
-  extends: .release:debian
-  dependencies:
-    - package:debian:buster:snapshot
-
-release:debian:buster:stable:
-  <<: *release_stable
-  extends: .release:debian
-  dependencies:
-    - package:debian:buster:stable
-
-release:debian:bullseye:snapshot:
-  <<: *release_snapshot
-  extends: .release:debian
-  dependencies:
-    - package:debian:bullseye:snapshot
-
-release:debian:bullseye:stable:
-  <<: *release_stable
-  extends: .release:debian
-  dependencies:
-    - package:debian:bullseye:stable
-
-release:ubuntu:bionic:snapshot:
-  <<: *release_snapshot
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:bionic:snapshot
-
-release:ubuntu:bionic:stable:
-  <<: *release_stable
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:bionic:stable
-
-release:ubuntu:cosmic:snapshot:
-  <<: *release_snapshot
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:cosmic:snapshot
-
-release:ubuntu:cosmic:stable:
-  <<: *release_stable
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:cosmic:stable
-
-release:ubuntu:disco:snapshot:
-  <<: *release_snapshot
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:disco:snapshot
-
-release:ubuntu:disco:stable:
-  <<: *release_stable
-  extends: .release:debian
-  dependencies:
-    - package:ubuntu:disco:stable
-
-.release:sources:
-  extends: .template:release
-  environment:
-    name: sources
-    url: https://repository.alt.pecka.me/sources/
-
-release:sources::snapshot:
-  <<: *release_snapshot
-  extends: .release:sources
-  dependencies:
-    - package:sources::snapshot
-
-release:sources::stable:
-  <<: *release_stable
-  extends: .release:sources
-  dependencies:
-    - package:sources::stable
-
-#######################################################################################################################
-#######################################################################################################################
 #######################################################################################################################
 # notify
 
@@ -609,18 +247,23 @@ release:sources::stable:
   before_script:
     - apk add --no-cache curl
   dependencies: []
-  only:
-    refs:
-      - master
 
 # -----------------------------------------------------------------------------
 
 notify:pyalib:
+  <<: *only-master
   extends: .template:notify
   script:
     - curl -X POST -F token="$TOKEN_TRIGGER_PYALIB" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/11497/trigger/pipeline
 
-notify:website:
+notify:release:stable:
+  <<: *only-tag
+  extends: .template:notify
+  script:
+    - curl -X POST -F token="$TOKEN_TRIGGER_RELEASE" -F ref=master -F "variables[RELEASE_REF]=$CI_COMMIT_TAG" -F "variables[RELEASE_MODE]=stable"   https://gitlab.fit.cvut.cz/api/v4/projects/17683/trigger/pipeline
+
+notify:release:snapshot:
+  <<: *only-master
   extends: .template:notify
   script:
-    - curl -X POST -F token="$TOKEN_TRIGGER_WEBSITE" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/15509/trigger/pipeline
+    - curl -X POST -F token="$TOKEN_TRIGGER_RELEASE" -F ref=master -F "variables[RELEASE_REF]=CI_COMMIT_SHA"  -F "variables[RELEASE_MODE]=snapshot" https://gitlab.fit.cvut.cz/api/v4/projects/17683/trigger/pipeline