diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ffc1e675d93d35689edc53c5be695f28af47f187..366a851af491167a2ec98cef2038c58353f0091b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -250,7 +250,7 @@ doc:doc:
   before_script:
     - mkdir -p build && pushd build
     - ../CMake/generate.py -wm
-    - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
+    - cmake -DBUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
     - popd
   allow_failure: true # TODO: Remove
   dependencies: []
diff --git a/CMake/Modules/CompilerFlags.cmake b/CMake/Modules/CompilerFlags.cmake
index dedde77c5f92cc7c36315cac4d0f7f805a631aed..b1d6a68d0a1bcaebda0eea43e2f681980749f650 100644
--- a/CMake/Modules/CompilerFlags.cmake
+++ b/CMake/Modules/CompilerFlags.cmake
@@ -31,6 +31,14 @@ if(BACKTRACE_EXISTS)
 	add_definitions(-DBACKTRACE)
 endif()
 
+if(BUILD_TYPE STREQUAL "Debug")
+	add_definitions(-DREL_DEBUG)
+elseif(BUILD_TYPE STREQUAL "Release")
+	add_definitions(-DREL_RELEASE)
+elseif(BUILD_TYPE STREQUAL "Snapshot")
+	add_definitions(-DREL_SNAPSHOT)
+endif()
+
 if (CMAKE_BUILD_TYPE STREQUAL "Debug")
     add_definitions(-DDEBUG)
 
diff --git a/CMake/Modules/git.cmake b/CMake/Modules/git.cmake
index 478f67b8c956d6edba6d567e4f26ca5b4aec82f6..032e42627ce3294e55a2f351debc8c8ae3a1c72e 100644
--- a/CMake/Modules/git.cmake
+++ b/CMake/Modules/git.cmake
@@ -1,42 +1,50 @@
-# Get the current working commit hash
 function(set_git_version)
-  find_package(Git)
+	find_package(Git)
 
-  if (Git_FOUND)
-    execute_process (
-      COMMAND ${GIT_EXECUTABLE} describe --tags HEAD
-      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-	  OUTPUT_VARIABLE ALIB_GIT_DESCRIBE
-      RESULT_VARIABLE RET_CODE
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
+	if (NOT Git_FOUND)
+		message ( "[Git] Git not found" )
+	endif()
 
-    if("${RET_CODE}" STREQUAL "0")
+	execute_process (
+		COMMAND ${GIT_EXECUTABLE} describe --tags --match "v*" HEAD
+		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+		OUTPUT_VARIABLE ALIB_GIT_DESCRIBE
+		RESULT_VARIABLE RET_CODE
+		OUTPUT_STRIP_TRAILING_WHITESPACE
+		)
+
+	if("${RET_CODE}" STREQUAL "0")
 		message ( "[Git] Describe: '${ALIB_GIT_DESCRIBE}'" )
 		SET ( ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}" PARENT_SCOPE )
-    else()
+	else()
 		message ( WARNING "[Git] Failed retrieving current commit (return code ${RET_CODE})" )
 		SET ( ALIB_GIT_DESCRIBE "<unknown commit>" PARENT_SCOPE )
 		return()
-    endif()
+	endif()
 
-    execute_process (
-	  COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
-      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-	  OUTPUT_VARIABLE ALIB_GIT_BRANCH
-      RESULT_VARIABLE RET_CODE
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
+	execute_process (
+		COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
+		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+		OUTPUT_VARIABLE ALIB_GIT_BRANCH
+		RESULT_VARIABLE RET_CODE
+		OUTPUT_STRIP_TRAILING_WHITESPACE
+		)
 
-    if("${RET_CODE}" STREQUAL "0")
+	if("${RET_CODE}" STREQUAL "0")
 		message ( "[Git] Branch: '${ALIB_GIT_BRANCH}'" )
 		SET ( ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}" PARENT_SCOPE )
-    else()
+	else()
 		message ( WARNING "[Git] Failed retrieving current branch (return code ${RET_CODE})" )
 		SET ( ALIB_GIT_BRANCH "<unknown branch>" PARENT_SCOPE )
 		return()
-    endif()
-  else()
-    message ( "[Git] Git not found" )
-  endif()
+	endif()
 endfunction(set_git_version)
+
+function(set_git_snapshot_version)
+	set(ALIB_SNAPSHOT_VERSION ${ALIB_GIT_DESCRIBE})
+	string(REGEX REPLACE "^v" "" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
+	string(REGEX REPLACE "\([^-]*-g\)" "r\\1" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
+	string(REPLACE "-" "." ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
+	set(ALIB_SNAPSHOT_VERSION "${ALIB_SNAPSHOT_VERSION}" PARENT_SCOPE )
+	message("[Git] Snapshot version: ${ALIB_SNAPSHOT_VERSION}")
+endfunction(set_git_snapshot_version)
diff --git a/CMake/Modules/versioning.cmake b/CMake/Modules/versioning.cmake
index da2b95197e8174439b6382eccf01b35e452c75cd..dd57d812d7f3ab0872398e30c50169a4c13f14c7 100644
--- a/CMake/Modules/versioning.cmake
+++ b/CMake/Modules/versioning.cmake
@@ -4,9 +4,24 @@
 message("[Versioning] Current version is ${PROJECT_VERSION}")
 
 include(git)
-if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+
+if(BUILD_TYPE MATCHES "(Debug|Snapshot)")
+	# sets ALIB_GIT_BRANCH
+	# sets ALIB_GIT_DESCRIBE
 	set_git_version()
 endif()
+if(BUILD_TYPE STREQUAL "Snapshot")
+	# sets ALIB_SNAPSHOT_VERSION
+	set_git_snapshot_version()
+endif()
+
+if(BUILD_TYPE STREQUAL "Debug")
+	set(ALIB_VERSION_INFO "${PROJECT_VERSION} | Debug build @ ${ALIB_GIT_BRANCH} ${ALIB_GIT_DESCRIBE}" )
+elseif(BUILD_TYPE STREQUAL "Release")
+	set(ALIB_VERSION_INFO "${PROJECT_VERSION}")
+elseif(BUILD_TYPE STREQUAL "Snapshot")
+	set(ALIB_VERSION_INFO "${ALIB_SNAPSHOT_VERSION}")
+endif()
 
 configure_file (
 	${CONFIGURE_HEADERS_SRC_DIR}/version.hpp.in
diff --git a/CMake/headers/version.hpp.in b/CMake/headers/version.hpp.in
index 15d1aeebf61c5d911f0f5f19d5b319dec5a60c0f..4686f638c36b39f34eeff1f3c5d9961df3c8b263 100644
--- a/CMake/headers/version.hpp.in
+++ b/CMake/headers/version.hpp.in
@@ -1,19 +1,12 @@
 #ifndef __VERSION_HPP_
 #define __VERSION_HPP_
 
-#define ALIB_VERSION       "${PROJECT_VERSION}"
-#define ALIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}"
-#define ALIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}"
-#define ALIB_VERSION_PATCH "${PROJECT_VERSION_PATCH}"
+#define ALIB_VERSION           "${PROJECT_VERSION}"
+#define ALIB_VERSION_MAJOR     "${PROJECT_VERSION_MAJOR}"
+#define ALIB_VERSION_MINOR     "${PROJECT_VERSION_MINOR}"
+#define ALIB_VERSION_PATCH     "${PROJECT_VERSION_PATCH}"
 
 #define ALIB_VERSION_STAMP ${PROJECT_VERSION_MAJOR} * 10000 + ${PROJECT_VERSION_MINOR} * 100 + ${PROJECT_VERSION_PATCH}
-
-#ifdef DEBUG
-  #cmakedefine ALIB_GIT_BRANCH   "${ALIB_GIT_BRANCH}"
-  #cmakedefine ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}"
-  #define ALIB_VERSION_INFO ALIB_VERSION " | Build: Debug | Git: " ALIB_GIT_BRANCH " @ " ALIB_GIT_DESCRIBE
-#else // release
-  #define ALIB_VERSION_INFO ALIB_VERSION
-#endif
+#cmakedefine ALIB_VERSION_INFO "${ALIB_VERSION_INFO}"
 
 #endif // __VERSION_HPP_
diff --git a/CMake/templates/CMakeLists_root.txt b/CMake/templates/CMakeLists_root.txt
index 3960c0822263c378c189aaebb29571b733073e46..4d912294ad9c4bb4cb01da4b73c519c0d94f48b2 100644
--- a/CMake/templates/CMakeLists_root.txt
+++ b/CMake/templates/CMakeLists_root.txt
@@ -19,12 +19,18 @@ if (NOT UNIX)
 endif ()
 
 # If not specified whether Debug or Release, select debug. Fail if invalid.
-# cmake -DCMAKE_BUILD_TYPE={{Release,Debug}}
-if (NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE Debug)
-endif ()
-if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|Debug)")
-	message(FATAL_ERROR "Unsupported build type (${{CMAKE_BUILD_TYPE}})")
+# cmake -DBUILD_TYPE={{Release,Snapshot,Debug}}
+if (NOT BUILD_TYPE)
+	set(BUILD_TYPE Debug)
+endif()
+if(NOT BUILD_TYPE MATCHES "(Release|Snapshot|Debug)")
+	message(FATAL_ERROR "Unsupported build type (${{BUILD_TYPE}}). Valid values: Release | Snapshot | Debug ")
+elseif(BUILD_TYPE MATCHES "Release")
+	set(CMAKE_BUILD_TYPE Release)
+elseif(BUILD_TYPE MATCHES "Snapshot")
+	set(CMAKE_BUILD_TYPE Release)
+elseif(BUILD_TYPE MATCHES "Debug")
+	set(CMAKE_BUILD_TYPE Debug)
 endif()
 
 if(DEFINED ENV{{CMAKE_BUILD_PARALLEL_LEVEL}})
diff --git a/extra/docker/Dockerfile.master b/extra/docker/Dockerfile.snapshot
similarity index 96%
rename from extra/docker/Dockerfile.master
rename to extra/docker/Dockerfile.snapshot
index ecc4e35d29d414a6deb008b5e16dd463020ce7fd..dc05592cbeb6b2517808def00551c6b49952bff1 100644
--- a/extra/docker/Dockerfile.master
+++ b/extra/docker/Dockerfile.snapshot
@@ -11,7 +11,7 @@ ADD     . /build
 WORKDIR	/build/release
 RUN	../CMake/generate.py -wm -g cli && \
 	cmake \
-		-DCMAKE_BUILD_TYPE=Release \
+		-DBUILD_TYPE=Snapshot \
 		-DCMAKE_INSTALL_PREFIX=/build/install \
 		.. && \
 	make -j $(grep -c processor /proc/cpuinfo) && \
@@ -43,7 +43,7 @@ RUN	apk add --update \
 	  libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \
 	../CMake/generate.py -wm && \
 	cmake \
-		-DCMAKE_BUILD_TYPE=Release \
+		-DBUILD_TYPE=Snapshot \
 		-DCMAKE_INSTALL_PREFIX=/build/install \
 		.. && \
 	make -j $(grep -c processor /proc/cpuinfo) && \
diff --git a/extra/docker/Dockerfile.stable b/extra/docker/Dockerfile.stable
new file mode 100644
index 0000000000000000000000000000000000000000..20ee37142ad839cc49740f64582c6ef309ff3764
--- /dev/null
+++ b/extra/docker/Dockerfile.stable
@@ -0,0 +1,72 @@
+# -------------------------------------------------------------------------------------------------
+# build-cli stage
+
+FROM alpine:3.9 AS build-cli
+
+RUN apk add --update \
+	curl bash g++ make cmake python3 \
+	libexecinfo-dev libxml2-dev tclap-dev readline-dev
+
+ADD     . /build
+WORKDIR	/build/release
+RUN	../CMake/generate.py -wm -g cli && \
+	cmake \
+		-DBUILD_TYPE=Release \
+		-DCMAKE_INSTALL_PREFIX=/build/install \
+		.. && \
+	make -j $(grep -c processor /proc/cpuinfo) && \
+	make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \
+	make install
+
+# -------------------------------------------------------------------------------------------------
+# deploy-cli stage
+
+FROM alpine:3.9 AS deploy-cli
+LABEL maintainer="peckato1@fit.cvut.cz"
+
+RUN apk add --update \
+	  bash libstdc++ \
+	  libexecinfo libxml2 tclap readline
+
+COPY --from=build-cli /build/install /usr
+CMD /usr/bin/aql2
+
+# -------------------------------------------------------------------------------------------------
+# build-all stage
+
+FROM alpine:3.9 AS build-all
+COPY --from=build-cli /build /build
+WORKDIR /build/release
+
+RUN	apk add --update \
+	  curl bash g++ make cmake python3 \
+	  libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \
+	../CMake/generate.py -wm && \
+	cmake \
+		-DBUILD_TYPE=Release \
+		-DCMAKE_INSTALL_PREFIX=/build/install \
+		.. && \
+	make -j $(grep -c processor /proc/cpuinfo) && \
+	make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \
+	make install
+
+# -------------------------------------------------------------------------------------------------
+# deploy-all stage
+
+FROM alpine:3.9 AS deploy-all
+LABEL maintainer="peckato1@fit.cvut.cz"
+
+RUN apk add --update \
+	bash \
+	libstdc++ \
+	\
+	libexecinfo \
+	libxml2 \
+	tclap \
+	readline \
+	qt5-qtbase-x11 \
+	graphviz \
+	jsoncpp
+
+COPY --from=build-all /build/install /usr
+CMD /usr/bin/aql2
diff --git a/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD b/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD
index affca0c97d32701e5e585f9f7dcf4814cb3fcb5c..04eab8d2810f3ac5ccf32a69b06e628bb53aef92 100644
--- a/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD
+++ b/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD
@@ -35,7 +35,7 @@ build() {
 	cd "$pkgbase/build"
 	python ../CMake/generate.py -wm
 	cmake .. \
-		-DCMAKE_BUILD_TYPE=Release \
+		-DBUILD_TYPE=Snapshot \
 		-DCMAKE_INSTALL_PREFIX=/usr
 	make
 }
diff --git a/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD b/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD
index 87232ac3bc74ef69bf73e38fc9d459fd30aae613..03268e35870a1473f035d759ba76c20a256ba81b 100644
--- a/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD
+++ b/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD
@@ -30,7 +30,7 @@ build() {
 	cd "$pkgbase-v$pkgver/build"
 	python ../CMake/generate.py -wm
 	cmake .. \
-		-DCMAKE_BUILD_TYPE=Release \
+		-DBUILD_TYPE=Release \
 		-DCMAKE_INSTALL_PREFIX=/usr
 	make
 }
diff --git a/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules b/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules
index bd4eae84f989dc1d2076d8380f9bef4b6b49fd46..43fc5fa8473dc80ecbd4e6b94fffee286fecce87 100755
--- a/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules
+++ b/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules
@@ -22,7 +22,7 @@ override_dh_strip:
 
 override_dh_auto_configure:
 	./CMake/generate.py -wm
-	dh_auto_configure -- -DCMAKE_BUILD_TYPE=Release
+	dh_auto_configure -- -DBUILD_TYPE=Snapshot
 
 #override_dh_auto_test:
 #	echo "Skipping tests"
diff --git a/extra/scripts/CD/packaging/package-docker.sh b/extra/scripts/CD/packaging/package-docker.sh
index f31b504d895ba8d7585b6ce33d1e3ba979b3533b..93f61e7d3556bd4318a329022f5450b7b38090be 100644
--- a/extra/scripts/CD/packaging/package-docker.sh
+++ b/extra/scripts/CD/packaging/package-docker.sh
@@ -15,8 +15,14 @@ package () {
 	BUILD_ALL=all_build
 	BUILD_CLI=cli_build
 
-	docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_CLI .
-	docker build --target=deploy-all -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_ALL .
+	if [[ $TYPE == "snapshot" ]]; then
+		DOCKERFILE="Dockerfile.snapshot"
+	elif [[ $TYPE == "stable" ]]; then
+		DOCKERFILE="Dockerfile.stable"
+	fi
+
+	docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_CLI .
+	docker build --target=deploy-all -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_ALL .
 
 	docker run $BUILD_CLI /usr/bin/aql2 --help
 	docker run $BUILD_ALL /usr/bin/aql2 --help
@@ -35,7 +41,7 @@ package () {
 		docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_STABLE"
 		docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_LATEST"
 		docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_STABLE" # gui-version is now only a symlink to all-version
-		docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST"  # gui-version is now only a symlink to all-version
+		docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version
 		docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_STABLE"
 		docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_LATEST"
 
diff --git a/extra/scripts/build.sh b/extra/scripts/build.sh
index aa8254b4a4b835d34880c62fe070396778c92f21..f4c8c1b727618df611c5bbc7a9912a2b59a38c52 100755
--- a/extra/scripts/build.sh
+++ b/extra/scripts/build.sh
@@ -59,10 +59,10 @@ installed_or_exit "make" "ninja"
 
 # check if shortcut
 ARGS_SHORTCUT=
-if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" ]]; then
+if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" || $1 == "snapshot" ]]; then
 	ARGS_SHORTCUT=1
 
-	if [[ $1 == "release" ]]; then
+	if [[ $1 == "release" || $1 == "snapshot" ]]; then
 		BUILD_DIR="release"
 		BUILD_MODE="Release"
 	elif [[ $1 == "debug" ]]; then
@@ -89,6 +89,8 @@ while getopts "d:m:j:n" arg; do
 				BUILD_MODE="Debug"
 			elif [[ "$TMP" == "release" ]]; then
 				BUILD_MODE="Release"
+			elif [[ "$TMP" == "snapshot" ]]; then
+				BUILD_MODE="Snapshot"
 			else
 				usage_and_exit
 			fi
@@ -157,7 +159,7 @@ else
 fi
 
 
-CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
+CMAKE_FLAGS="-DBUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
 if [[ $BUILD_SYSTEM == "ninja" ]]; then
 	CMAKE_FLAGS="$CMAKE_FLAGS -GNinja"
 fi