Index: trunk/doc/manual/Makefile.kmk
===================================================================
--- trunk/doc/manual/Makefile.kmk	(revision 99156)
+++ trunk/doc/manual/Makefile.kmk	(revision 99157)
@@ -394,24 +394,4 @@
 
 
- ##
- # Create user_isomakercmd-man.xml
- #
- # @param    1  Language.
- # @param    2  the refentry xml base file name.
- # @param    3  the full refentry xml file path.
- define def_vbox_refentry_to_user_sect1
-  $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/user_$(2): $(3) \
-  		$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl \
-  		$$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \
-  		$$(VBOX_XML_ENTITIES) $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
-	$$(call MSG_TOOL,xsltproc docbook-refentry-to-manual-sect1.xsl,,$3,$$@)
-	$$(QUIET)$$(RM) -f -- "$$@"
-	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl $$<
- endef
-
- $(foreach lang, $(VBOX_MANUAL_ALL_LANGUAGES) \
-	,$(evalcall2 def_vbox_refentry_to_user_sect1,$(lang),isomakercmd-man.xml,$(PATH_ROOT)/src/VBox/Runtime/common/fs/isomakercmd-man.xml))
-
-
  #
  # Shared rules for LaTeX based PDF generation - Only used for SDK & Accessibility.
@@ -629,6 +609,5 @@
   	$$(addprefix $$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/, \
   	$$(VBOX_USER_MANUAL_DITA_SRC_FILES_$(1)) \
-  	$$(VBOX_USER_MANUAL_DITA_SRC_FILES_$(1)_FALLBACK) \
-  	topics/reference.dtd)
+  	$$(VBOX_USER_MANUAL_DITA_SRC_FILES_$(1)_FALLBACK) )
 
   ifneq ($$(VBOX_USER_MANUAL_DITA_SRC_FILES_$(1)),)
@@ -645,9 +624,4 @@
 	$$(QUIET)$$(INSTALL_STAGING) -m 0644 -- "$$<" "$$(@D)/"
   endif
-
-  # Create and empty reference.dtd file as docbook2dita converter mentions it in xml declaration and
-  # xlst parsing complains when it cannot find it.
-  $$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/topics/reference.dtd: | $$$$(dir $$$$@)
-	$$(QUIET)$$(TOUCH) -- "$$@"
 
  endef
@@ -693,28 +667,8 @@
 	$$(QUIET)$$(VBOX_BLD_PYTHON) "$$<" --output "$$@" @"$$@.lst"
 
-  # We must copy over the man_VBoxManage-dhcpserver-dhcpoptions.xml include
-  # file, so that xsltproc can easily find it when running docbook2dita.xsl.
-  $$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/topics/man_VBoxManage-dhcpserver-dhcpoptions.xml: \
-  		$$(qfirstfile , $$(qwildcard , $$(VBOX_PATH_MANUAL_SRC)/$(1)/man_VBoxManage-dhcpserver-dhcpoptions.xml) \
-  			$$(VBOX_PATH_MANUAL_SRC)/en_US/man_VBoxManage-dhcpserver-dhcpoptions.xml) | $$$$(dir $$$$@)
-	$$(QUIET)$$(INSTALL_STAGING) -m 0644 -- "$$<" "$$(@D)/"
-
   # Accumulated list of conversion output file names to be used as a
   # prerequisite in rules producing a version of the user manual.
-  VBOX_USER_MANUAL_CONVERTED_REFENTRY_DITA_FILES_$1 := \
-  	$$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/topics/user_isomakercmd-man.dita
-
-  # Unlike other refentry docbook files user_isomakercmd-man.xml is located
-  # in the output folder thus a special target for its conversion. Note that
-  # user_isomakercmd-man.xml does not have refsect hierarchy and hrefs to be pre/post
-  # processed. So we skip these steps for this file.
-  $$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/topics/user_isomakercmd-man.dita: \
-  		$$(VBOX_DITA_CONVERTER_PATH)/db2dita/docbook2dita.xsl \
-  		$$(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_isomakercmd-man.xml | $$$$(dir $$$$@)
-	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) \
-		--maxdepth 6000 \
-		--output "$$@" \
-		"$$<" \
-		$$(VBOX_PATH_MANUAL_OUTBASE)/$1/user_isomakercmd-man.xml
+  VBOX_USER_MANUAL_CONVERTED_REFENTRY_DITA_FILES_$1 :=
+
  endef # def_vbox_refentry_to_dita
 
@@ -722,14 +676,14 @@
  # @param 1    Language
  # @param 2    Filename w/o extension.
+ # @param 3    Alternative fallback filename (for isomakercmd-man.xml).
  define def_vbox_refentry_file_to_dita
   VBOX_USER_MANUAL_CONVERTED_REFENTRY_DITA_FILES_$1 += $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).dita
   $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).dita \
   + $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).xml: \
-  		$$(VBOX_DITA_CONVERTER_PATH)/db2dita/docbook2dita.xsl \
-  		$$(qfirstfile , $$(qwildcard , $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2).xml) $$(VBOX_PATH_MANUAL_SRC)/en_US/$(2).xml) \
-  		$$(VBOX_PATH_MANUAL_SRC)/mark_external_urls.xsl \
+  		$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-dita-pre.xsl \
+  		$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-dita.xsl \
   		$$(VBOX_PATH_MANUAL_SRC)/add_file_to_id_only_references.py \
   		$$(VBOX_USER_MANUAL_ID_MAPPING_FILE_$1) \
-  		$$(VBOX_PATH_MANUAL_OUTBASE)/$1/dita/topics/man_VBoxManage-dhcpserver-dhcpoptions.xml \
+  		$$(qfirstfile , $$(qwildcard , $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2).xml) $(3) $$(VBOX_PATH_MANUAL_SRC)/en_US/$(2).xml) \
   		$$(VBOX_XML_CATALOG) \
   		$$(VBOX_XML_CATALOG_DOCBOOK) \
@@ -738,14 +692,14 @@
   		$$(VBOX_VERSION_STAMP) \
   		| $$$$(dir $$$$@)
-	$$(call MSG_TOOL,xsltproc docbook2dita.xsl,,$$(firstword $$(filter %.xml,$$^)),$$@)
-	$$(QUIET)$$(RM) -f "$$@"
-	$$(QUIET)$$(VBOX_BLD_PYTHON) $$(VBOX_PATH_MANUAL_SRC)/refsect2_to_refsect1.py \
-		-i $$(qfirstfile , $$(qwildcard , $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2).xml) $$(VBOX_PATH_MANUAL_SRC)/en_US/$(2).xml) \
-		-o "$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).xml"
-	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --maxdepth 6000 --output "$$@" \
-		"$$(VBOX_DITA_CONVERTER_PATH)/db2dita/docbook2dita.xsl" \
+	$$(call MSG_TOOL,xsltproc docbook-refentry-to-manual-dita[-pre].xsl,,$$(firstword $$(filter %.xml,$$^)),$$@)
+	$$(QUIET)$$(RM) -f -- "$$@" "$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).xml"
+	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) \
+		--output "$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).xml" \
+ 		$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-dita-pre.xsl \
+		$$(qfirstfile , $$(qwildcard , $$(VBOX_PATH_MANUAL_SRC)/$(1)/$(2).xml) $(3) $$(VBOX_PATH_MANUAL_SRC)/en_US/$(2).xml)
+	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) \
+		--output "$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).dita" \
+ 		$$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-dita.xsl \
 		"$$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/dita/topics/$(2).xml"
-	$$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --maxdepth 6000 --output "$$@" \
-		"$$(VBOX_PATH_MANUAL_SRC)/mark_external_urls.xsl" "$$@"
 	$$(QUIET)$$(VBOX_BLD_PYTHON) $$(VBOX_PATH_MANUAL_SRC)/add_file_to_id_only_references.py \
 		--mapping-file "$$(VBOX_USER_MANUAL_ID_MAPPING_FILE_$1)" "$$@"
@@ -755,5 +709,9 @@
  	,$(evalcall2 def_vbox_refentry_to_dita,$(lang)) \
  	$(foreach file, $(basename $(VBOX_MANUAL_XML_REFENTRY_FILES) man_vboximg-mount man_VBoxHeadless) \
- 		,$(evalcall2 def_vbox_refentry_file_to_dita,$(lang),$(file))))
+ 		,$(evalcall2 def_vbox_refentry_file_to_dita,$(lang),$(file))) \
+ 	$(evalcall2 def_vbox_refentry_file_to_dita,$(lang),user_isomakercmd-man, \
+		$(PATH_ROOT)/src/VBox/Runtime/common/fs/isomakercmd-man.xml))
+
+ ## @todo Make use of docbook-refentry-to-manual-overview.xsl again (after dita conversion)?
 
 
@@ -811,5 +769,5 @@
 		"/i:$(VBOX_PATH_MANUAL_OUTBASE)/en_US/dita/UserManual.ditamap" \
 		"/transtype:xhtml" \
-        "/filter:$(VBOX_PATH_MANUAL_SRC)/en_US/dita/htmlhelp.ditaval" \
+		"/filter:$(VBOX_PATH_MANUAL_SRC)/en_US/dita/htmlhelp.ditaval" \
 		"/outdir:$(@D)" \
 		"/tempdir:$(VBOX_PATH_MANUAL_OUTBASE)/en_US/dita/temp_xhtml_chunks" \
Index: trunk/doc/manual/docbook-refentry-to-manual-dita.xsl
===================================================================
--- trunk/doc/manual/docbook-refentry-to-manual-dita.xsl	(revision 99156)
+++ trunk/doc/manual/docbook-refentry-to-manual-dita.xsl	(revision 99157)
@@ -567,4 +567,6 @@
     <xsl:attribute name="scope">external</xsl:attribute> <!-- Just assumes this is external. -->
     <xsl:attribute name="href"><xsl:value-of select="@url"/></xsl:attribute>
+    <xsl:attribute name="format">html</xsl:attribute>
+    <xsl:if test="not(starts-with(@url, 'http'))"><xsl:message terminate="yes">ulink url is not http: <xsl:value-of select="@url"/></xsl:message></xsl:if>
   </xsl:element>
 </xsl:template>
Index: trunk/doc/manual/mark_external_urls.xsl
===================================================================
--- trunk/doc/manual/mark_external_urls.xsl	(revision 99156)
+++ 	(revision )
@@ -1,52 +1,0 @@
-<!--
-    mark_external_urls.xsl:
-        - When href attribute of a xref element has http in its value
-        then add scope="external" attribute to that element. This attribute
-        tells dita pdf output java stuff not to retrieve and parse those documents.
--->
-<!--
-    Copyright (C) 2006-2023 Oracle and/or its affiliates.
-
-    This file is part of VirtualBox base platform packages, as
-    available from https://www.virtualbox.org.
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License
-    as published by the Free Software Foundation, in version 3 of the
-    License.
-
-    This program is distributed in the hope that it will be useful, but
-    WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, see <https://www.gnu.org/licenses>.
-
-    SPDX-License-Identifier: GPL-3.0-only
--->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:output method="xml" indent="yes" omit-xml-declaration="no" standalone="no"/>
-    <xsl:output  encoding='UTF-8'    doctype-public="-//OASIS//DTD DITA Reference//EN"  doctype-system="reference.dtd"/>
-
-    <xsl:template match="node()|@*">
-        <xsl:copy>
-            <xsl:apply-templates select="node()|@*"/>
-        </xsl:copy>
-    </xsl:template>
-
-    <xsl:template match="xref">
-        <xsl:choose>
-            <xsl:when test="contains(@href, 'http')">
-                <xsl:copy>
-                    <xsl:attribute name="scope">external</xsl:attribute>
-                    <xsl:attribute name="format">html</xsl:attribute>
-                    <xsl:apply-templates select="@*|node()"/>
-                </xsl:copy>
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:copy-of select="."/>
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-</xsl:stylesheet>
Index: trunk/doc/manual/refsect2_to_refsect1.py
===================================================================
--- trunk/doc/manual/refsect2_to_refsect1.py	(revision 99156)
+++ 	(revision )
@@ -1,103 +1,0 @@
-#!/usr/bin/env python3
-import glob
-import getopt
-import os
-import sys
-import shutil
-import logging
-
-"""
-    correct_references.py:
-        This script scans all .dita files found in the as-argument-passed folder
-        and creates a dictionary of topic id and file names. This is done since
-        DITA expects href targets in the form of filename#topic-id. Then all the
-        href targets found in man_VBoxManage... files are prefixed with files names.
-"""
-
-__copyright__ = \
-"""
-Copyright (C) 2009-2023 Oracle and/or its affiliates.
-
-This file is part of VirtualBox base platform packages, as
-available from https://www.virtualbox.org.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation, in version 3 of the
-License.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, see <https://www.gnu.org/licenses>.
-
-SPDX-License-Identifier: GPL-3.0-only
-"""
-
-def replaceRefsect2(file_content):
-    new_content = []
-    """
-        * Add a refsect1 before the first refsect2,
-        * convert refsect2 to refsect1,
-        * remove the </refsect1> which comes after a </refsect2>
-    """
-    first_refsect2 = False
-    # remove lines that consist of new line only
-    file_content = [line for line in file_content if line != "\n"]
-    new_content.append(file_content[0])
-    for current, next in  zip(file_content, file_content[1:]):
-
-        if "<refsect2" in next:
-            if not first_refsect2:
-                first_refsect2 = True
-                new_content.append("</refsect1>")
-                new_content.append("\n")
-            new_content.append(next.replace("<refsect2", "<refsect1"))
-        elif "</refsect2>" in next:
-            new_content.append("</refsect1>")
-            new_content.append("\n")
-        elif not ("</refsect1>" in next and "</refsect2>" in current):
-            new_content.append(next)
-    return new_content
-
-
-def usage(arg):
-    print('refsect2_to_refsect1.py -i <input_file> -o <output_file>')
-    sys.exit(arg)
-
-def main():
-    input_file = ''
-    output_file = ''
-    try:
-        opts, args = getopt.getopt(sys.argv[1:],"hi:o:")
-    except getopt.GetoptError as err:
-        print(err)
-        usage(2)
-    for opt, arg in opts:
-        if opt == '-h':
-            usage(0)
-        elif opt in ("-i"):
-            input_file = arg
-        elif opt in ("-o"):
-            output_file = arg
-
-    if not input_file:
-        logging.error('No input file is provided. Exiting')
-        usage(2)
-    if not output_file:
-        logging.error('No output file is provided. Exiting')
-        usage(2)
-
-    file_handle = open(input_file, 'r', encoding="utf-8")
-    file_content = file_handle.readlines()
-    new_file_content = replaceRefsect2(file_content)
-    file_handle.close()
-    file_handle = open(output_file , 'w', encoding="utf-8")
-    file_handle.write("".join(new_file_content))
-    file_handle.close()
-
-if __name__ == "__main__":
-    main()
