diff --git a/Makefile b/Makefile
index ed5097b..a269271 100644
--- a/Makefile
+++ b/Makefile
@@ -119,15 +119,17 @@ pve-admin-guide.chunked: ${PVE_ADMIN_GUIDE_ADOCDEPENDS}
rm -rf pve-admin-guide.chunked
a2x -a docinfo -a docinfo1 -a icons -f chunked pve-admin-guide.adoc
+PVE_DOCBOOK_CONF=-b $(shell pwd)/asciidoc/pve-docbook -f asciidoc/asciidoc-pve.conf
+
pve-admin-guide.pdf: ${PVE_ADMIN_GUIDE_ADOCDEPENDS} docinfo.xml pve-admin-guide-docinfo.xml
inkscape -z -D --export-pdf=proxmox-logo.pdf images/proxmox-logo.svg
inkscape -z -D --export-pdf=proxmox-ci-header.pdf images/proxmox-ci-header.svg
grep ">Release ${DOCRELEASE}<" pve-admin-guide-docinfo.xml || (echo "wrong release in pve-admin-guide-docinfo.xml" && false);
- a2x -a docinfo -a docinfo1 -f pdf -L --dblatex-opts "-p ./asciidoc/pve-dblatex.xsl -s asciidoc/dblatex-custom.sty" pve-admin-guide.adoc
+ a2x -a docinfo -a docinfo1 -f pdf -L --asciidoc-opts="${PVE_DOCBOOK_CONF}" --dblatex-opts "-p ./asciidoc/pve-dblatex.xsl -s asciidoc/dblatex-custom.sty" pve-admin-guide.adoc
rm proxmox-logo.pdf proxmox-ci-header.pdf
pve-admin-guide.epub: ${PVE_ADMIN_GUIDE_ADOCDEPENDS}
- a2x -f epub pve-admin-guide.adoc
+ a2x -f epub --asciidoc-opts="${PVE_DOCBOOK_CONF}" pve-admin-guide.adoc
api-viewer/apidata.js: extractapi.pl
./extractapi.pl >$@
diff --git a/asciidoc/pve-docbook.conf b/asciidoc/pve-docbook.conf
new file mode 100644
index 0000000..044ea84
--- /dev/null
+++ b/asciidoc/pve-docbook.conf
@@ -0,0 +1,810 @@
+#
+# docbook45.conf
+#
+# Asciidoc DocBook 4.5 configuration file.
+#
+# modified for Proxmox VE docs
+# - add thumbnail attribute
+
+[miscellaneous]
+outfilesuffix=.xml
+# Printable page width and units.
+# Used to calculate DocBook CALS tables absolute column and table widths.
+pagewidth=425
+pageunits=*
+
+[attributes]
+basebackend=docbook
+basebackend-docbook=
+basebackend-docbook45=
+# For backward compatibility (docbook backend was renamed to docbook45 at 8.6.2)
+backend-docbook=
+# toc and numbered are set to maintain original default behavior.
+toc=
+numbered=
+
+[replacements2]
+# Line break markup. Custom processing instruction in fo.xsl.
+(?m)^(.*)\s\+$=\1
+
+[replacements]
+ifdef::asciidoc7compatible[]
+# Superscripts.
+\^(.+?)\^=\1
+# Subscripts.
+~(.+?)~=\1
+endif::asciidoc7compatible[]
+
+[ruler-blockmacro]
+# Uses custom processing instructions in fo.xsl and asciidoc-dblatex.xsl.
+
+
+[pagebreak-blockmacro]
+# Uses custom processing instructions in fo.xsl and asciidoc-dblatex.xsl.
+
+
+[blockdef-pass]
+latexmath-style=template="latexmathblock",subs=()
+
+[macros]
+# math macros.
+(?su)[\\]?(?Platexmath):(?P\S*?)\[(?P.*?)(?latexmath)::(?P\S*?)(\[(?P.*?)\])$=#[]
+
+[latexmath-inlinemacro]
+
+
+
+
+
+[latexmath-blockmacro]
+
+
+
+
+
+[latexmathblock]
+{title}
+{title%}
+
+
+{title#}
+{title%}
+
+[image-inlinemacro]
+
+
+
+
+ {alt={target}}
+
+
+[image-blockmacro]
+{title}
+{title%}{pgwide-option?}
+# DocBook XSL Stylesheets custom processing instructions.
+
+
+
+
+
+
+ {alt={target}}
+
+{title#}
+{title%}
+
+[indexterm-inlinemacro]
+# Index term.
+# Generate separate index entries for primary, secondary and tertiary
+# descriptions.
+# Primary only.
+{2%}
+{2%} {1}
+{2%}
+# Primary and secondary.
+{2#}{3%}
+{2#}{3%} {1}{2}
+{2#}{3%}
+{2#}{3%}
+{2#}{3%} {2}
+{2#}{3%}
+# Primary, secondary and tertiary.
+{3#}
+ {1}{2}{3}
+{3#}
+{3#}
+ {2}{3}
+{3#}
+{3#}
+ {3}
+{3#}
+
+[indexterm2-inlinemacro]
+# Index term.
+# Single entry index term that is visible in the primary text flow.
+{1}{1}
+
+[footnote-inlinemacro]
+# Footnote.
+{0}
+
+[footnoteref-inlinemacro]
+# Footnote reference.
+{2#}{2}
+{2%}
+
+[callout-inlinemacro]
+# Callout.
+
+
+# List tags.
+[listtags-bulleted]
+list={unbreakable-option? }{title?{title}}|
+item=|
+text=|
+
+[listtags-numbered]
+list={unbreakable-option? }{title?{title}}{start?}|
+item=|
+text=|
+
+[listtags-labeled]
+list={title?{title}}|
+entry=|
+label=
+term=|
+item=|
+text=|
+
+[listtags-horizontal]
+# Horizontal labeled list (implemented with two column table).
+# Hardwired column widths to 30%,70% because the current crop of PDF
+# generators do not auto calculate column widths.
+ list=<{title?table}{title!informaltable}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}{style? tabstyle="{style}"}{pgwide-option? pgwide="1"} frame="none" colsep="0" rowsep="0">{title?{title}}|<{title?/table}{title!/informaltable}>
+entry=|
+label=|
+term=|
+item=|
+text=|
+
+[listtags-callout]
+list={title?{title}}|
+item=|
+text=|
+
+[listtags-qanda]
+list={title?{title}}|
+entry=|
+label=|
+term=|
+item=|
+text=|
+
+[listtags-bibliography]
+list={title?{title}}|
+item=|
+text=|
+
+[listtags-glossary]
+list=
+entry=|
+label=
+term=|
+item=|
+text=|
+
+[tags]
+# Quoted text
+emphasis={1?}|{1?}
+strong={1?}|{1?}
+monospaced={1?}|{1?}
+singlequoted={lsquo}{1?}|{1?}{rsquo}
+doublequoted={ldquo}{1?}|{1?}{rdquo}
+unquoted={1?}|{1?}
+subscript={1?}|{1?}
+superscript={1?}|{1?}
+
+ifdef::deprecated-quotes[]
+# Override with deprecated quote attributes.
+emphasis={role?}|{role?}
+strong={role?}|{role?}
+monospaced={role?}|{role?}
+singlequoted={role?}{amp}#8216;|{amp}#8217;{role?}
+doublequoted={role?}{amp}#8220;|{amp}#8221;{role?}
+unquoted={role?}|{role?}
+subscript={role?}|{role?}
+superscript={role?}|{role?}
+endif::deprecated-quotes[]
+
+# Inline macros
+[http-inlinemacro]
+{0={name}:{target}}
+[https-inlinemacro]
+{0={name}:{target}}
+[ftp-inlinemacro]
+{0={name}:{target}}
+[file-inlinemacro]
+{0={name}:{target}}
+[irc-inlinemacro]
+{0={name}:{target}}
+[mailto-inlinemacro]
+{0={target}}
+[callto-inlinemacro]
+{0={target}}
+[link-inlinemacro]
+{0={target}}
+# anchor:id[text]
+[anchor-inlinemacro]
+
+# [[id,text]]
+[anchor2-inlinemacro]
+
+# [[[id]]]
+[anchor3-inlinemacro]
+[{1}]
+# xref:id[text]
+[xref-inlinemacro]
+{0}
+{2%}
+# <>
+[xref2-inlinemacro]
+{2}
+{2%}
+# // comment line
+[comment-inlinemacro]
+{showcomments#}{passtext}
+
+[comment-blockmacro]
+{showcomments#}{passtext}
+
+[literal-inlinemacro]
+# Inline literal.
+{passtext}
+
+# Special word macros
+[emphasizedwords]
+{words}
+[monospacedwords]
+{words}
+[strongwords]
+{words}
+
+# Paragraph substitution.
+[paragraph]
+{title}
+{thumbnail#}
+{thumbnail#}
+{thumbnail#}
+{thumbnail#}
+{thumbnail#} {alt={thumbnail}}
+{thumbnail#}
+{title%}
+|
+{title%}
+{title#}
+{empty}
+
+[admonitionparagraph]
+<{name}{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}>|{name}>
+
+# Delimited blocks.
+[literalblock]
+{title}
+{title#}
+{title%}
+|
+
+{title#}
+
+[listingblock]
+{title}
+{title#}
+{title%}
+|
+
+{title#}
+
+[sidebarblock-open]
+
+{title}
+
+[sidebarblock-close]
+
+
+[sidebarblock]
+template::[sidebarblock-open]
+|
+template::[sidebarblock-close]
+
+[sidebarparagraph]
+template::[sidebarblock-open]
+|
+template::[sidebarblock-close]
+
+[abstractblock-open]
+
+{title}
+
+[abstractblock-close]
+
+
+[abstractblock]
+template::[abstractblock-open]
+|
+template::[abstractblock-close]
+
+[abstractparagraph]
+template::[abstractblock-open]
+|
+template::[abstractblock-close]
+
+[openblock]
+|
+
+[partintroblock-open]
+
+{title}
+
+[partintroblock-close]
+
+
+[partintroblock]
+template::[partintroblock-open]
+|
+template::[partintroblock-close]
+
+[partintroparagraph]
+template::[partintroblock-open]
+|
+template::[partintroblock-close]
+
+[quote-open]
+# Common quote and verse element template.
+
+{title}
+# Include attribution only if either {attribution} or {citetitle} is defined.
+{attribution#}
+{attribution%}{citetitle#}
+{attribution}
+{citetitle}
+{attribution#}
+{attribution%}{citetitle#}
+
+[quote-close]
+