diff --git a/etc/cmake/latest/GuiCommands.cmake b/etc/cmake/latest/GuiCommands.cmake
index 2d8df26f36c2c84797ad450f7fb3a4b2d36ef449..580ba79941a635bd254a1591f1258d3958a76b69 100644
--- a/etc/cmake/latest/GuiCommands.cmake
+++ b/etc/cmake/latest/GuiCommands.cmake
@@ -33,7 +33,75 @@ function(armarx_add_qt_library TARGET)
         message(FATAL_ERROR "${TARGET}: Unknown arguments `${AX_UNPARSED_ARGUMENTS}`.")
     endif()
 
-    # TODO: Migrate from armarx_gui_plugin.
+    # Variables that are modified within this context.
+    set(SOURCES ${AX_SOURCES})
+    set(HEADERS ${AX_HEADERS} ${AX_UI_FILES})
+    set(DEPENDENCIES ${AX_DEPENDENCIES})
+
+    armarx_find_qt_base("QtCore;QtGui;QtOpenGL;QtXml;QtScript;QtDesigner" REQUIRED)
+
+    if(NOT "${TARGET}" STREQUAL "ArmarXGuiBase")
+        if(DEPENDENCIES)
+            list(APPEND DEPENDENCIES ArmarXCore ArmarXGuiBase ${QT_LIBRARIES})
+        else()
+            set(DEPENDENCIES ArmarXCore ArmarXGuiBase ${QT_LIBRARIES})
+        endif()
+    endif()
+
+    set(GENERATE_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_autogen/include")
+
+    install(DIRECTORY "${GENERATE_BASE_DIR}" DESTINATION "include" COMPONENT headers)
+    printtarget("${HEADERS}" "${SOURCES}" "${AX_RESOURCE_FILES}" "${DEPENDENCIES}")
+
+    armarx_add_library("${TARGET}"
+        SOURCES "${SOURCES}"
+        HEADERS "${HEADERS}"
+        DEPENDENCIES "${DEPENDENCIES}"
+    )
+    target_include_directories("${TARGET}" PUBLIC $<BUILD_INTERFACE:${GENERATE_BASE_DIR}> )
+    target_compile_definitions("${TARGET}" PUBLIC -DQ_COMPILER_INITIALIZER_LISTS)
+
+    set_target_properties("${TARGET}" PROPERTIES AUTOMOC ON)
+    set_target_properties("${TARGET}" PROPERTIES AUTOUIC ON)
+    set_target_properties("${TARGET}" PROPERTIES AUTORCC ON)
+    set_target_properties("${TARGET}" PROPERTIES AUTOUIC_SEARCH_PATHS ${${ARMARX_PROJECT_NAME}_SOURCE_DIR}/source)
+
+    file(RELATIVE_PATH CORRECT_INCLUDE "${CMAKE_SOURCE_DIR}/source" ${CMAKE_CURRENT_SOURCE_DIR})
+
+    message(STATUS "cmake: ${CMAKE_COMMAND} ${TARGET}")
+    add_custom_command(
+        TARGET ${TARGET}
+        POST_BUILD COMMAND ${CMAKE_COMMAND}
+        ARGS "-DPROJECT_NAME=${PROJECT_NAME}"
+             "-DDIR=${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_autogen/include/"
+             "-DCORRECT_INCLUDE=${CORRECT_INCLUDE}"
+             "-DPROJECT_SOURCE_DIR=${CMAKE_SOURCE_DIR}/source"
+             "-P" "${ArmarXGui_CMAKE_DIR}/check_qt_moc_includes.cmake"
+        COMMENT "Checking Qt MOC includes."
+    )
+endfunction()
+
+
+function(armarx_add_qt_plugin TARGET)
+    # Parse arguments.
+    set(single_param)
+    set(flag_param)
+    set(multi_param PLUGIN_SOURCES PLUGIN_HEADERS SOURCES HEADERS UI_FILES RESOURCE_FILES
+                    DEPENDENCIES)
+    cmake_parse_arguments(PARSE_ARGV 1 AX "${flag_param}" "${single_param}" "${multi_param}")
+    if(DEFINED AX_UNPARSED_ARGUMENTS)
+        message(FATAL_ERROR "${TARGET}: Unknown arguments `${AX_UNPARSED_ARGUMENTS}`.")
+    endif()
+
+
+
+    armarx_add_qt_library("${PLUGIN_NAME}"
+        SOURCES "${SOURCES}"
+        QT_MOC_HDRS "${HEADERS}"
+        QT_UIS ""
+        QT_RESOURCES "${AX_QT_RESOURCES}"
+        DEPENDENCIES "${AX_DEPENDENCIES}"
+    )
 endfunction()