diff --git a/cmake/Modules/FindPlantUML.cmake b/cmake/Modules/FindPlantUML.cmake
deleted file mode 100644
index 331c221c76..0000000
--- a/cmake/Modules/FindPlantUML.cmake
+++ /dev/null
@@ -1,60 +0,0 @@
-#-------------------------------------------------------------------------------
-# SPDX-License-Identifier: BSD-3-Clause
-# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
-#-------------------------------------------------------------------------------
-
-#FindPlantuml
-#-----------
-#PlantUML is a diagram generation tool. It can generate various UML and non-UML
-#diagrams. See: http://plantuml.com/
-#
-#This module checks PlantUML availability and checks if the Java runtime is
-#available.
-#For Windows PlantUML is distributed as a jar archive and thus there is no
-#standard install location where it could be searched for.
-#Most Linux distributions come with a proper PlantUML package which installs
-#a shell script to easy starting PlantUML, but the location of the .jar file
-#is hidden.
-#Thus there is no standard location to search for the .jar file and this module
-#depends on user input.
-#
-#This module has the following parameters:
-#   PLANTUML_JAR_PATH   = variable specifying where the PlantUML java archive
-#                         (plantuml.jar) can be found. If it is not defined,
-#                         the environment variable with the same name is used.
-#                         If both is missing, that is an error.
-#
-#This module defines the following variables:
-#   PLANTUML_VERSION        = The version reported by "plantuml.jar -version"
-#   PLANTUML_FOUND          = Was the .jar file found and sucesfuly executed.
-#
-
-#include(Common/Utils)
-
-find_package(Java 1.8 COMPONENTS Runtime)
-if(Java_Runtime_FOUND)
-	#Check if the jar file is at the user defined location.
-	#Prefer the cmake variable to the environment setting.
-	if (NOT DEFINED PLANTUML_JAR_PATH)
-		if (DEFINED ENV{PLANTUML_JAR_PATH})
-			set(PLANTUML_JAR_PATH "$ENV{PLANTUML_JAR_PATH}" CACHE STRING "PLANTUML location." )
-		endif()
-	endif()
-
-	if (NOT DEFINED PLANTUML_JAR_PATH)
-		message(STATUS "PLANTUML_JAR_PATH variable is missing, PlantUML jar location is unknown.")
-	else()
-		#Get plantuml version
-		execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" "-jar" "${PLANTUML_JAR_PATH}" "-version" OUTPUT_VARIABLE _PLANTUML_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
-		#Parse plantuml output
-		if(_PLANTUML_VERSION)
-			if(_PLANTUML_VERSION MATCHES ".*PlantUML version ([0-9.]+).*")
-				string(REGEX REPLACE ".*PlantUML version ([0-9.]+).*" "\\1" PLANTUML_VERSION "${_PLANTUML_VERSION}")
-			endif()
-		endif()
-	endif()
-endif()
-
-#Set "standard" find module return values
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(PlantUML REQUIRED_VARS PLANTUML_JAR_PATH PLANTUML_VERSION VERSION_VAR PLANTUML_VERSION)
diff --git a/cmake/Modules/FindPythonModules.cmake b/cmake/Modules/FindPythonModules.cmake
deleted file mode 100644
index 625bfec..0000000
--- a/cmake/Modules/FindPythonModules.cmake
+++ /dev/null
@@ -1,61 +0,0 @@
-#-------------------------------------------------------------------------------
-# SPDX-License-Identifier: BSD-3-Clause
-# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
-#-------------------------------------------------------------------------------
-
-#FindPythonModules
-#-----------
-#This module checks availability of Python modules.
-#
-#This module has the following parameters:
-#   PYTHON_EXECUTABLE - Location of python interpreter.
-#   COMPONENTS        - List of python modules to look for.
-#
-#This module defines the following variables:
-#   PY_XXX       - Cached string variable with the location of the module.
-#   PY_XXX_FOUND - Set if the module is available.
-#
-#   Where XXX is the upper case name of the module.
-#
-#Examples
-#   To look for m2r and report error if not found
-#       find_module(PythonModules COMPONENTS m2r)
-#       if (PY_M2R_FOUND)
-#           do something
-#       endif()
-#
-#   To look for m2r and do not report error if not found
-#       find_module(PythonModules OPTIONAL_COMPONENTS m2r)
-#       if (PY_M2R_FOUND)
-#           do something
-#       endif()
-
-if(NOT DEFINED PYTHON_EXECUTABLE)
-	message(FATAL_ERROR "FindPythonModules: mandatory parameter PYTHON_EXECUTABLE is missing.")
-endif()
-
-foreach(_mod ${PythonModules_FIND_COMPONENTS})
-	string(TOUPPER ${_mod} _mod_upper)
-	string(REPLACE "-" "_" _modname "${_mod}")
-	if (NOT PY_${_mod_upper})
-		#Execute python and try to include the module.
-		execute_process(
-			COMMAND ${PYTHON_EXECUTABLE} -c "import ${_modname}; print(${_modname}.__file__);"
-			RESULT_VARIABLE ${_mod}_status
-			OUTPUT_VARIABLE ${_mod}_path
-			ERROR_QUIET
-			OUTPUT_STRIP_TRAILING_WHITESPACE)
-		#If suceeded
-		if(NOT ${_mod}_status)
-			#Avoid trouble with directory separator on windows.
-			set("PY_${_mod_upper}" "${${_mod}_path}" CACHE STRING
-				"Location of Python module ${_mod}")
-		endif()
-	endif()
-	#Set "standard" find module return values
-	include(FindPackageHandleStandardArgs)
-	find_package_handle_standard_args(PY_${_mod_upper}
-		REQUIRED_VARS PY_${_mod_upper}
-		NAME_MISMATCHED
-		FAIL_MESSAGE "Can not find Python module ${_mod}")
-endforeach()
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index 0e3f1a6..1da7997 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -9,12 +9,11 @@
 
 find_package(Python3)
 find_package(Sphinx)
-find_package(PythonModules COMPONENTS sphinx-rtd-theme sphinxcontrib.plantuml)
 find_package(Git)
 
 set(SPHINXCFG_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/user_guide)
 
-if (SPHINX_FOUND AND PY_SPHINX-RTD-THEME_FOUND AND PY_SPHINXCONTRIB.PLANTUML AND GIT_FOUND)
+if (SPHINX_FOUND AND GIT_FOUND)
 
     file(GLOB_RECURSE SPHINXCFG_DOC_FILES ${CMAKE_CURRENT_SOURCE_DIR} *.rst conf.py)
 
diff --git a/docs/conf.py b/docs/conf.py
index b865e5b..f34fa81 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -18,7 +18,7 @@
 title = 'User Guide'
 
 try:
-  vregx = re.compile(r'(?P<RMM_VERSION>v.+?)'
+  vregx = re.compile(r'tf-rmm-(?P<RMM_VERSION>v.+?)'
                      r'(-[0-9]+-)?(?P<GIT_SHA>g[a-f0-9]{7,})?$')
   git_result = check_output("git describe --tags --always",
                             shell = True, encoding = 'UTF-8')
