diff --git a/Application/CMakeLists.txt b/Application/CMakeLists.txt
index 23f5893fab3befb10fb66b7d77e8a226fbbdccbe..ded7f031f50112a6ec3385488730ffeca668c0bb 100644
--- a/Application/CMakeLists.txt
+++ b/Application/CMakeLists.txt
@@ -70,9 +70,9 @@ if(WIN32)
 	#endif()
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MATH_DEFINES -DNOMINMAX -DWIN32_LEAN_AND_MEAN -DCURL_STATICLIB")
     #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT")
-    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /bigobj /O2 /GL")
+    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /bigobj /O2")
     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /bigobj /O0")
-    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /bigobj /O2 /GL")
+    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /bigobj /O2")
     set(GLEW_STATIC ON)
 else()
     set(BUILD_SHARED_LIBS OFF)
@@ -803,11 +803,12 @@ if(${TREX_BUILD_OPENCV})
    set(OPENCV_CMAKE_ARGS "")
    
    if(TREX_CONDA_PACKAGE_INSTALL)
-		set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=Release)
+		set(TREX_CMAKE_BUILD_TYPE Release)
    else()
-		set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>)
+		set(TREX_CMAKE_BUILD_TYPE $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>)
    endif()
    set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} 
+			-DCMAKE_BUILD_TYPE=${TREX_CMAKE_BUILD_TYPE}
 			-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
             -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
             -DBUILD_DOCS:BOOL=FALSE
@@ -857,9 +858,9 @@ if(${TREX_BUILD_OPENCV})
             GIT_REPOSITORY  https://github.com/opencv/opencv.git
             GIT_TAG 4.3.0
             UPDATE_COMMAND ""
-            CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release -G ${CMAKE_GENERATOR} ${OPENCV_CMAKE_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV
-            BUILD_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>
-            INSTALL_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug> --target install
+            CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${TREX_CMAKE_BUILD_TYPE} -G ${CMAKE_GENERATOR} ${OPENCV_CMAKE_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV
+            BUILD_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config ${TREX_CMAKE_BUILD_TYPE}
+            INSTALL_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config ${TREX_CMAKE_BUILD_TYPE} --target install
             CMAKE_ARGS
             ${OPENCV_CMAKE_ARGS})
     else()
diff --git a/Application/src/GitSHA1.cpp.in b/Application/src/GitSHA1.cpp.in
index 0a6c73b25d20c63e7d04393b4c1f33753da91872..6760cafe7ba8a59fcf8a217695ef6f4e869408e1 100644
--- a/Application/src/GitSHA1.cpp.in
+++ b/Application/src/GitSHA1.cpp.in
@@ -1,2 +1,6 @@
 #define GIT_SHA1 "@GIT_SHA1@"
 extern const char g_GIT_SHA1[] = GIT_SHA1;
+#define TREX_BUILD_TYPE "@TREX_CMAKE_BUILD_TYPE@"
+extern const char g_TREX_BUILD_TYPE[] = TREX_BUILD_TYPE;
+#define TREX_BUILD_CXX_OPTIONS "@CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@"
+extern const char g_TREX_BUILD_CXX_OPTIONS[] = TREX_BUILD_CXX_OPTIONS;
diff --git a/Application/src/GitSHA1.h b/Application/src/GitSHA1.h
index 8e02c575feca5bdc6eb368cb98e7e9368323ec88..2eac60798debfca4ef2ca3fb24e925c10e224ef5 100644
--- a/Application/src/GitSHA1.h
+++ b/Application/src/GitSHA1.h
@@ -1 +1,3 @@
 extern const char g_GIT_SHA1[];
+extern const char g_TREX_BUILD_TYPE[];
+extern const char g_TREX_BUILD_CXX_OPTIONS[];
\ No newline at end of file
diff --git a/Application/src/commons/common/misc/SpriteMap.h b/Application/src/commons/common/misc/SpriteMap.h
index 2cb1dfc72d43400d9fa796ee4ae2c1193c560d80..2fe32034e336d3b40d045c5fc204269fa78d34f7 100644
--- a/Application/src/commons/common/misc/SpriteMap.h
+++ b/Application/src/commons/common/misc/SpriteMap.h
@@ -327,9 +327,12 @@ namespace sprite {
         
         std::vector<std::string> keys() const {
             std::vector<std::string> result;
-            for (auto &p: _props) {
+            result.reserve(_props.size());
+
+            for (auto &p: _props)
                 result.push_back(p.first.name());
-            }
+
+            std::sort(result.begin(), result.end());
             return result;
         }
         
diff --git a/Application/src/grabber/CMakeLists.txt b/Application/src/grabber/CMakeLists.txt
index 306fc06936d8a77c4c71e888261a7112ca7861f1..00894b873db27c8f773473b78157fe6bbff89056 100644
--- a/Application/src/grabber/CMakeLists.txt
+++ b/Application/src/grabber/CMakeLists.txt
@@ -29,8 +29,10 @@ if(APPLE)
     set(SRCS ${SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/gfx/GrabberIcon.icns)
 endif()
 
+set(TREX_ADDITIONAL_SOURCES "")
 if(WITH_GITSHA1)
-    list(APPEND SRCS "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+	set(TREX_ADDITIONAL_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+    list(APPEND SRCS ${TREX_ADDITIONAL_SOURCES})
 endif()
 
 if(WIN32)
@@ -59,7 +61,7 @@ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:trex_check_python> $<TARGET_FILE_
 endif()
 add_dependencies(${TGRABS_EXEC_NAME} trex_check_python TRex::OpenCV)
 
-add_executable(pvconvert pvconvert.cpp gif.h)
+add_executable(pvconvert pvconvert.cpp gif.h ${TREX_ADDITIONAL_SOURCES})
 target_link_libraries(pvconvert PUBLIC
     tracker_gui
     pv
@@ -100,7 +102,7 @@ if(WITH_HTTPD)
     add_dependencies(${TGRABS_EXEC_NAME} LibMicroHttpd)
 endif()
 
-add_executable(pvinfo pvinfo.cpp pvinfo_merge.cpp pvinfo_merge.h)
+add_executable(pvinfo pvinfo.cpp pvinfo_merge.cpp pvinfo_merge.h ${TREX_ADDITIONAL_SOURCES})
 
 target_link_libraries(pvinfo PRIVATE
 	cnpy
diff --git a/Application/src/tracker/CMakeLists.txt b/Application/src/tracker/CMakeLists.txt
index 568f659d8f931da15b4f1e1f063642cf67bd9fd6..741ea9263e63391761689911941c01bf17037502 100644
--- a/Application/src/tracker/CMakeLists.txt
+++ b/Application/src/tracker/CMakeLists.txt
@@ -33,8 +33,10 @@ if(WIN32 OR UNIX AND NOT APPLE)
 	set(SRCS ${SRCS} trex.rc)
 endif()
 
+set(TREX_ADDITIONAL_SOURCES "")
 if(WITH_GITSHA1)
-    list(APPEND SRCS "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+	set(TREX_ADDITIONAL_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+    list(APPEND SRCS ${TREX_ADDITIONAL_SOURCES})
 endif()
 
 if(NOT WIN32 AND TREX_WITH_TESTS)
diff --git a/Application/src/tracker/misc/default_config.cpp b/Application/src/tracker/misc/default_config.cpp
index 6f3159dca8244f55fdcfcc49e7218e3e67c55cc6..822af08a28a0dff22f616dda84d576b96c833eb2 100644
--- a/Application/src/tracker/misc/default_config.cpp
+++ b/Application/src/tracker/misc/default_config.cpp
@@ -2,6 +2,7 @@
 #include <misc/SpriteMap.h>
 #include <file/Path.h>
 #include <misc/BlobSizeRange.h>
+#include "GitSHA1.h"
 
 #ifndef WIN32
 #include <unistd.h>
@@ -180,6 +181,15 @@ file::Path conda_environment_path() {
 #ifdef WIN32
 #define PYTHON_TIPPS " (containing pythonXX.exe)"
 #endif
+
+
+    constexpr std::string_view is_ndebug_enabled() {
+#ifndef NDEBUG
+        return std::string_view("debug");
+#else
+        return std::string_view("release");
+#endif
+    }
     
     void get(sprite::Map& config, GlobalSettings::docs_map_t& docs, decltype(GlobalSettings::set_access_level)* fn)
     {
@@ -194,6 +204,9 @@ file::Path conda_environment_path() {
         
         CONFIG<std::string>("app_name", "TRex", "Name of the application.", SYSTEM);
         CONFIG("version", std::string("1.0"), "Current application version.", SYSTEM);
+        CONFIG("build_type", std::string(g_TREX_BUILD_TYPE), "The mode the application was built in.", SYSTEM);
+        CONFIG("build_is_debug", std::string(is_ndebug_enabled()), "If built in debug mode, this will show 'debug'.", SYSTEM);
+        CONFIG("build_cxx_options", std::string(g_TREX_BUILD_CXX_OPTIONS), "The mode the application was built in.", SYSTEM);
         CONFIG("build", std::string(), "Current build version", SYSTEM);
         CONFIG("cmd_line", std::string(), "An approximation of the command-line arguments passed to the program.", SYSTEM);
         CONFIG("ffmpeg_path", file::Path(), "Path to an ffmpeg executable file. This is used for converting videos after recording them (from the GUI). It is not a critical component of the software, but mostly for convenience.");
@@ -617,7 +630,7 @@ file::Path conda_environment_path() {
             // UPDATE: write only keys with values that have changed compared
             // to the default options
             if(!config.has(key) || config[key] != GlobalSettings::get(key)) {
-                if((include_build_number && key == "build")
+                if((include_build_number && utils::beginsWith(key, "build"))
                    || (GlobalSettings::access_level(key) <= AccessLevelType::STARTUP
                        && !contains(exclude_fields, key)
                        && !contains(additional_exclusions, key)))
diff --git a/conda/bld.bat b/conda/bld.bat
index 79e1f841a6e9bf08274e978a4e109b6772a85898..bcab20eec5923771373ca2f910b36da7595f5c0e 100644
--- a/conda/bld.bat
+++ b/conda/bld.bat
@@ -16,7 +16,7 @@ echo findlib is %findlib%
 
 echo Generator %CMAKE_GENERATOR%
 echo Python %PYTHON%
-cmake .. -DWITH_GITSHA1=ON -DPYTHON_INCLUDE_DIR:FILEPATH=%pythoninclude% -DPYTHON_LIBRARY:FILEPATH=%findlib% -DPYTHON_EXECUTABLE:FILEPATH=%PREFIX%\python -DWITH_PYLON=OFF -G "%CMAKE_GENERATOR%" -DTREX_BUILD_OPENCV=ON -DCMAKE_INSTALL_PREFIX=%PREFIX% -DCMAKE_SKIP_RPATH=ON -DTREX_BUILD_PNG=ON -DTREX_BUILD_ZIP=ON -DTREX_CONDA_PACKAGE_INSTALL=ON -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=TRUE -DTREX_WITH_TESTS:BOOL=OFF -DTREX_BUILD_GLFW=ON -DTREX_BUILD_ZLIB=ON
+cmake .. -DWITH_GITSHA1=ON -DPYTHON_INCLUDE_DIR:FILEPATH=%pythoninclude% -DPYTHON_LIBRARY:FILEPATH=%findlib% -DPYTHON_EXECUTABLE:FILEPATH=%PREFIX%\python -DWITH_PYLON=OFF -G "%CMAKE_GENERATOR%" -DTREX_BUILD_OPENCV=ON -DCMAKE_INSTALL_PREFIX=%PREFIX% -DCMAKE_SKIP_RPATH=ON -DTREX_BUILD_PNG=ON -DTREX_BUILD_ZIP=ON -DTREX_CONDA_PACKAGE_INSTALL=ON -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=TRUE -DTREX_WITH_TESTS:BOOL=OFF -DTREX_BUILD_GLFW=ON -DTREX_BUILD_ZLIB=ON -DCMAKE_BUILD_TYPE=Release
 
 cmake --build . --target Z_LIB --config Release
 cmake --build . --target libzip --config Release