diff --git a/docs/modules/ROOT/pages/extensions/microprofile-health.adoc b/docs/modules/ROOT/pages/extensions/microprofile-health.adoc
new file mode 100644
index 0000000..111486b
--- /dev/null
+++ b/docs/modules/ROOT/pages/extensions/microprofile-health.adoc
@@ -0,0 +1,57 @@
+[[microprofile-health]]
+= MicroProfile Health Extension
+
+*Available as of Camel Quarkus version 0.21*
+
+The MicroProfile Health extension bridges the Camel health check API with MicroProfile Metrics & SmallRye Health.
+
+Maven users will need to add the following dependency to their `pom.xml` for this extension.
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-microprofile-health</artifactId>
+</dependency>
+------------------------------------------------------------
+
+== Usage
+
+You can register health checks for your applications with the https://camel.apache.org/manual/latest/health-check.html[Camel health check API].
+
+By default, classes extending `AbstractHealthCheck` are registered as both liveness and readiness checks. For finer control over whether
+a check is registered as a liveness or readiness check, you can extend either `AbstractCamelMicroProfileLivenessCheck` or `AbstractCamelMicroProfileReadinessCheck`.
+
+Any checks provided by your application are automatically discovered and bound to the Camel registry. They will be available via
+the Quarkus health endpoints `/health/live` and `/health/ready`.
+
+You can also provide custom `HealthCheckRepository` implementations and these are also automatically discovered and bound to the Camel registry for you.
+
+Refer to the https://quarkus.io/guides/health-guide[Quarkus health guide] for further information.
+
+=== Provided health checks
+
+Some checks are automatically registered for your application.
+
+==== Camel Context Health
+
+Inspects the Camel Context status and causes the health check status to be `DOWN` if the status is anything other than 'Started'.
+
+==== Camel Route Health
+
+Inspects the status of each route and causes the health check status to be `DOWN` if any route status is not 'Started'.
+
+=== Configuration
+
+The Camel MicroProfile Health extension exposes the following configuration properties.
+
+[cols="80,.^10,.^10"]
+|===
+|Configuration property |Type |Default
+
+|`quarkus.camel.health.enabled`
+
+ Set whether to enable Camel health checks
+|boolean
+|`true`
+|===
diff --git a/docs/modules/ROOT/pages/extensions/microprofile-metrics.adoc b/docs/modules/ROOT/pages/extensions/microprofile-metrics.adoc
new file mode 100644
index 0000000..4969915
--- /dev/null
+++ b/docs/modules/ROOT/pages/extensions/microprofile-metrics.adoc
@@ -0,0 +1,184 @@
+[[microprofile-metrics]]
+= MicroProfile Metrics Extension
+
+*Available as of Camel Quarkus version 0.21*
+
+The MicroProfile Metrics extension produces metrics and statistics related to the Camel Context, routes and message exchanges.
+
+Maven users will need to add the following dependency to their `pom.xml` for this extension.
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-microprofile-metrics</artifactId>
+</dependency>
+------------------------------------------------------------
+
+== Usage
+
+The https://camel.apache.org/components/latest/microprofile-metrics-component.html[microprofile-metrics] component automatically exposes a set of Camel application metrics. Some of these include:
+
+=== Camel Context metrics
+
+[cols="80,.^20]
+|===
+|Metric Name | Type
+
+|`camel.context.status`
+
+The status of the Camel Context represented by the `ServiceStatus` enum ordinal
+
+| Gauge
+
+|`camel.context.uptime`
+
+The Camel Context uptime in milliseconds
+
+| Gauge
+
+|`camel.context.exchanges.completed.total`
+
+The total number of completed exchanges
+
+| Counter
+
+|`camel.context.exchanges.failed.total`
+
+The total number of failed exchanges
+
+| Counter
+
+|`camel.context.exchanges.inflight.total`
+
+The total number of inflight exchanges
+
+| Gauge
+
+|`camel.context.exchanges.total`
+
+The total number of all exchanges
+
+| Counter
+
+|`camel.context.externalRedeliveries.total`
+
+The total number of all external redeliveries
+
+| Counter
+
+|`camel.context.failuresHandled.total`
+
+The total number of all failures handled
+
+| Counter
+
+|===
+
+=== Camel Route metrics
+
+[cols="80,.^20]
+|===
+|Metric Name | Type
+
+|`camel.route.count`
+
+The number of routes
+
+| Gauge
+
+|`camel.route.running.count`
+
+The number of running routes
+
+| Gauge
+
+|`camel.route.exchanges.completed.total`
+
+The total number of completed exchanges for the route
+
+| Counter
+
+|`camel.route.exchanges.failed.total`
+
+The total number of failed exchanges for the route
+
+| Counter
+
+|`camel.route.exchanges.inflight.total`
+
+The total number of inflight exchanges for the route
+
+| Gauge
+
+|`camel.route.exchanges.total`
+
+The total number of all exchanges for the route
+
+| Counter
+
+|`camel.route.externalRedeliveries.total`
+
+The total number of all external redeliveries for the route
+
+| Counter
+
+|`camel.route.failuresHandled.total`
+
+The total number of all failures handled for the route
+
+| Counter
+|===
+
+All metrics are tagged with the name of the Camel Context and the id of the route where applicable.
+
+You can also produce your own customized metrics in your Camel routes. For more information, refer to the https://camel.apache.org/components/latest/microprofile-metrics-component.html[microprofile-metrics] component documentation.
+
+Metrics are exposed to Quarkus as application metrics and they can be browsed at http://localhost:8080/metrics/application.
+
+
+=== Configuration
+
+The Camel MicroProfile Metrics extension exposes the following configuration properties.
+
+[cols="80,.^10,.^10"]
+|===
+|Configuration property |Type |Default
+
+|`quarkus.camel.metrics.enable-route-policy`
+
+Set whether to enable the `MicroProfileMetricsRoutePolicyFactory` for capturing metrics on route processing times
+|boolean
+|`true`
+
+
+|`quarkus.camel.metrics.enable-message-history`
+
+Set whether to enable the `MicroProfileMetricsMessageHistoryFactory` for capturing metrics on individual route node processing times.
+
+Depending on the number of configured route nodes, there is the potential to create a large volume of metrics. Therefore, this option is disabled by default.
+
+|boolean
+|`false`
+
+|`quarkus.camel.metrics.enable-exchange-event-notifier`
+
+Set whether to enable the `MicroProfileMetricsExchangeEventNotifier` for capturing metrics on exchange processing times.
+
+|boolean
+|`true`
+
+|`quarkus.camel.metrics.enable-route-event-notifier`
+
+Set whether to enable the `MicroProfileMetricsRouteEventNotifier` for capturing metrics on the total number of routes and total number of routes running.
+
+|boolean
+|`true`
+
+|`quarkus.camel.metrics.enable-camel-context-event-notifier`
+
+Set whether to enable the `MicroProfileMetricsCamelContextEventNotifier` for capturing metrics about the CamelContext, such as status and uptime.
+
+|boolean
+|`true`
+|===
diff --git a/docs/modules/ROOT/pages/extensions/opentracing.adoc b/docs/modules/ROOT/pages/extensions/opentracing.adoc
new file mode 100644
index 0000000..c925e17
--- /dev/null
+++ b/docs/modules/ROOT/pages/extensions/opentracing.adoc
@@ -0,0 +1,59 @@
+[[opentracing]]
+= OpenTracing Extension
+
+*Available as of Camel Quarkus version 0.21*
+
+The OpenTracing extension is used for tracing and timing incoming and outgoing Camel messages.
+
+Maven users will need to add the following dependency to their `pom.xml` for this extension.
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-opentracing</artifactId>
+</dependency>
+------------------------------------------------------------
+
+== Usage
+
+The extension automatically creates a Camel `OpenTracingTracer` and binds it to the Camel registry.
+
+In order to send the captured traces to a tracing system, you need to configure some properties within `application.properties` like those below.
+
+....
+quarkus.jaeger.service-name=my-service
+quarkus.jaeger.sampler-type=const
+quarkus.jaeger.sampler-param=1
+quarkus.jaeger.endpoint=http://localhost:14268/api/traces
+....
+
+Refer to the https://quarkus.io/guides/opentracing-guide#configuration-reference[Quarkus OpenTracing guide] for a full list of configuration options.
+
+Route endpoints can be excluded from tracing by configuring a property named `quarkus.camel.opentracing.exclude-patterns` in `application.properties`. For example:
+
+....
+# Exclude all direct & netty-http endpoints from tracing
+quarkus.camel.opentracing.exclude-patterns=direct:*,netty-http:*
+....
+
+=== Configuration
+
+The Camel OpenTracing extension exposes the following configuration properties.
+
+[cols="80,.^10,.^10"]
+|===
+|Configuration property |Type |Default
+
+|`quarkus.camel.opentracing.encoding`
+
+ Sets whether header keys need to be encoded
+|boolean
+|`false`
+
+|`quarkus.camel.opentracing.exclude-patterns`
+
+ Sets whether to disable tracing for endpoint URIs that match the given patterns
+|List<String>
+|
+|===
diff --git a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
index 09fa64b..a72534c 100644
--- a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
+++ b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc
@@ -45,7 +45,7 @@
 | link:https://camel.apache.org/components/latest/mail-component.html[Mail] (camel-quarkus-mail) +
 `imap:host:port` | 0.2 | To send or receive emails using imap/pop3 or smtp protocols.
 
-| link:https://camel.apache.org/components/latest/microprofile-metrics-component.html[MicroProfile Metrics] (camel-quarkus-microprofile-metrics) +
+| xref:extensions/microprofile-metrics.adoc[MicroProfile Metrics] (camel-quarkus-microprofile-metrics) +
 `microprofile-metrics:metricType:metricName` | 0.2 | Camel metrics exposed with Eclipse MicroProfile Metrics
 
 | link:https://camel.apache.org/components/latest/netty-http-component.html[Netty HTTP] (camel-quarkus-netty-http) +
@@ -142,8 +142,8 @@
 
 | (camel-quarkus-reactive-executor) | 0.2.1 | To use Quarkus reactive executor with Camel
 
-| (camel-quarkus-microprofile-health) | 0.2.1 | Integration with the Quarkus MicroProfile Health extension
+| xref:extensions/microprofile-health.adoc[camel-quarkus-microprofile-health]  | 0.2.1 | Integration with the Quarkus MicroProfile Health extension
 
-| (camel-quarkus-opentracing) | 0.2.1 | Distributed tracing using OpenTracing
+| xref:extensions/opentracing.adoc[camel-quarkus-opentracing]  | 0.2.1 | Distributed tracing using OpenTracing
 |===
 // others: END
diff --git a/extensions/readme.adoc b/extensions/readme.adoc
index d864076..e5a6ea0 100644
--- a/extensions/readme.adoc
+++ b/extensions/readme.adoc
@@ -44,7 +44,7 @@
 | link:https://camel.apache.org/components/latest/mail-component.html[Mail] (camel-quarkus-mail) +
 `imap:host:port` | 0.2 | To send or receive emails using imap/pop3 or smtp protocols.
 
-| link:https://camel.apache.org/components/latest/microprofile-metrics-component.html[MicroProfile Metrics] (camel-quarkus-microprofile-metrics) +
+| xref:extensions/microprofile-metrics.adoc[MicroProfile Metrics] (camel-quarkus-microprofile-metrics) +
 `microprofile-metrics:metricType:metricName` | 0.2 | Camel metrics exposed with Eclipse MicroProfile Metrics
 
 | link:https://camel.apache.org/components/latest/netty-http-component.html[Netty HTTP] (camel-quarkus-netty-http) +
@@ -144,9 +144,9 @@
 
 | (camel-quarkus-reactive-executor) | 0.2.1 | To use Quarkus reactive executor with Camel
 
-| (camel-quarkus-microprofile-health) | 0.2.1 | Integration with the Quarkus MicroProfile Health extension
+| xref:extensions/microprofile-health.adoc[camel-quarkus-microprofile-health]  | 0.2.1 | Integration with the Quarkus MicroProfile Health extension
 
-| (camel-quarkus-opentracing) | 0.2.1 | Distributed tracing using OpenTracing
+| xref:extensions/opentracing.adoc[camel-quarkus-opentracing]  | 0.2.1 | Distributed tracing using OpenTracing
 |===
 // others: END
 
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
index 705b8af..fbc058d 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
@@ -19,6 +19,8 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -95,6 +97,12 @@
     protected File readmeExtensionsDir;
 
     /**
+     * The website doc base directory
+     */
+    @Parameter(defaultValue = "${project.directory}/../../../docs/modules/ROOT/pages")
+    protected File websiteDocBaseDir;
+
+    /**
      * The website doc for extensions
      */
     @Parameter(defaultValue = "${project.directory}/../../../docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc")
@@ -660,6 +668,7 @@
         component.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
         component.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
         component.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+        component.setExtensionsDocPath(getExtensionsDocPath());
 
         return component;
     }
@@ -680,6 +689,7 @@
         dataFormat.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
         dataFormat.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
         dataFormat.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+        dataFormat.setExtensionsDocPath(getExtensionsDocPath());
 
         return dataFormat;
     }
@@ -700,6 +710,7 @@
         language.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
         language.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
         language.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+        language.setExtensionsDocPath(getExtensionsDocPath());
 
         return language;
     }
@@ -718,8 +729,13 @@
         other.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
         other.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
         other.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+        other.setExtensionsDocPath(getExtensionsDocPath());
 
         return other;
     }
 
+    private Path getExtensionsDocPath() {
+        return Paths.get(websiteDocBaseDir.toString(), "extensions");
+    }
+
 }
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/AbstractModel.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/AbstractModel.java
new file mode 100644
index 0000000..aadcf82
--- /dev/null
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/AbstractModel.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.maven.model;
+
+import java.nio.file.Path;
+
+import org.apache.camel.quarkus.maven.StringHelper;
+import static org.apache.camel.quarkus.maven.StringHelper.cutLastZeroDigit;
+
+public abstract class AbstractModel {
+
+    private String kind;
+    private String name;
+    private String modelName;
+    private String title;
+    private String description;
+    private String firstVersion;
+    private String label;
+    private String deprecated;
+    private String deprecationNote;
+    private String javaType;
+    private String groupId;
+    private String artifactId;
+    private String version;
+    private Path extensionsDocPath;
+
+    public String getKind() {
+        return kind;
+    }
+
+    public void setKind(String kind) {
+        this.kind = kind;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getModelName() {
+        return modelName;
+    }
+
+    public void setModelName(String modelName) {
+        this.modelName = modelName;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getFirstVersion() {
+        return firstVersion;
+    }
+
+    public void setFirstVersion(String firstVersion) {
+        this.firstVersion = firstVersion;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getDeprecated() {
+        return deprecated;
+    }
+
+    public void setDeprecated(String deprecated) {
+        this.deprecated = deprecated;
+    }
+
+    public String getDeprecationNote() {
+        return deprecationNote;
+    }
+
+    public void setDeprecationNote(String deprecationNote) {
+        this.deprecationNote = deprecationNote;
+    }
+
+    public String getJavaType() {
+        return javaType;
+    }
+
+    public void setJavaType(String javaType) {
+        this.javaType = javaType;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getArtifactId() {
+        return artifactId;
+    }
+
+    public void setArtifactId(String artifactId) {
+        this.artifactId = artifactId;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getShortJavaType() {
+        return StringHelper.getClassShortName(javaType);
+    }
+
+    public boolean localDocExists() {
+        Path path = extensionsDocPath.resolve(getExtensionDocName());
+        return path.toFile().exists();
+    }
+
+    public Path getExtensionsDocPath() {
+        return extensionsDocPath;
+    }
+
+    public void setExtensionsDocPath(Path extensionsDocPath) {
+        this.extensionsDocPath = extensionsDocPath;
+    }
+
+    public String getLocalDocLink() {
+        return "xref:extensions/" + getExtensionDocName();
+    }
+
+    public String getExtensionDocName() {
+        return StringHelper.after(artifactId, "camel-quarkus-") + ".adoc";
+    }
+
+    public String getDocLink() {
+        if (localDocExists()) {
+            return getLocalDocLink();
+        }
+        return String.format("link:https://camel.apache.org/%s/latest/%s", getDocLinkSection(), getDocLinkDocument());
+    }
+
+    public String getFirstVersionShort() {
+        return cutLastZeroDigit(firstVersion);
+    }
+
+    abstract String getDocLinkSection();
+    abstract String getDocLinkDocument();
+
+}
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/ComponentModel.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/ComponentModel.java
index fb9dda6..ca52b64 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/ComponentModel.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/ComponentModel.java
@@ -16,37 +16,14 @@
  */
 package org.apache.camel.quarkus.maven.model;
 
-import org.apache.camel.quarkus.maven.StringHelper;
+public class ComponentModel extends AbstractModel {
 
-import static org.apache.camel.quarkus.maven.StringHelper.cutLastZeroDigit;
-
-public class ComponentModel {
-
-    private String kind;
     private String scheme;
     private String syntax;
     private String alternativeSyntax;
     private String alternativeSchemes;
-    private String title;
-    private String description;
-    private String firstVersion;
-    private String label;
-    private String deprecated;
-    private String deprecationNote;
     private String consumerOnly;
     private String producerOnly;
-    private String javaType;
-    private String groupId;
-    private String artifactId;
-    private String version;
-
-    public String getKind() {
-        return kind;
-    }
-
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
 
     public String getScheme() {
         return scheme;
@@ -80,54 +57,6 @@
         this.alternativeSchemes = alternativeSchemes;
     }
 
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getFirstVersion() {
-        return firstVersion;
-    }
-
-    public void setFirstVersion(String firstVersion) {
-        this.firstVersion = firstVersion;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public String getDeprecated() {
-        return deprecated;
-    }
-
-    public void setDeprecated(String deprecated) {
-        this.deprecated = deprecated;
-    }
-
-    public String getDeprecationNote() {
-        return deprecationNote;
-    }
-
-    public void setDeprecationNote(String deprecationNote) {
-        this.deprecationNote = deprecationNote;
-    }
-
     public String getConsumerOnly() {
         return consumerOnly;
     }
@@ -144,47 +73,14 @@
         this.producerOnly = producerOnly;
     }
 
-    public String getJavaType() {
-        return javaType;
+    @Override
+    String getDocLinkSection() {
+        return "components";
     }
 
-    public void setJavaType(String javaType) {
-        this.javaType = javaType;
+    @Override
+    String getDocLinkDocument() {
+        return scheme + "-component.html";
     }
 
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public String getShortJavaType() {
-        return StringHelper.getClassShortName(javaType);
-    }
-
-    public String getDocLink() {
-        return "https://camel.apache.org/components/latest/" + scheme + "-component.html";
-    }
-
-    public String getFirstVersionShort() {
-        return cutLastZeroDigit(firstVersion);
-    }
 }
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/DataFormatModel.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/DataFormatModel.java
index 340fa5c..16d83d2 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/DataFormatModel.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/DataFormatModel.java
@@ -16,140 +16,16 @@
  */
 package org.apache.camel.quarkus.maven.model;
 
-import org.apache.camel.quarkus.maven.StringHelper;
+public class DataFormatModel extends AbstractModel {
 
-import static org.apache.camel.quarkus.maven.StringHelper.cutLastZeroDigit;
-
-public class DataFormatModel {
-
-    private String kind;
-    private String name;
-    private String modelName;
-    private String title;
-    private String description;
-    private String firstVersion;
-    private String label;
-    private String deprecated;
-    private String deprecationNote;
-    private String javaType;
-    private String groupId;
-    private String artifactId;
-    private String version;
-
-    public String getKind() {
-        return kind;
+    @Override
+    String getDocLinkSection() {
+        return "components";
     }
 
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getModelName() {
-        return modelName;
-    }
-
-    public void setModelName(String modelName) {
-        this.modelName = modelName;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getFirstVersion() {
-        return firstVersion;
-    }
-
-    public void setFirstVersion(String firstVersion) {
-        this.firstVersion = firstVersion;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public String getDeprecated() {
-        return deprecated;
-    }
-
-    public void setDeprecated(String deprecated) {
-        this.deprecated = deprecated;
-    }
-
-    public String getDeprecationNote() {
-        return deprecationNote;
-    }
-
-    public void setDeprecationNote(String deprecationNote) {
-        this.deprecationNote = deprecationNote;
-    }
-
-    public String getJavaType() {
-        return javaType;
-    }
-
-    public void setJavaType(String javaType) {
-        this.javaType = javaType;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public String getShortJavaType() {
-        return StringHelper.getClassShortName(javaType);
-    }
-
-    public String getDocLink() {
-        return "https://camel.apache.org/components/latest/" + name + "-dataformat.html";
-    }
-
-    public String getFirstVersionShort() {
-        return cutLastZeroDigit(firstVersion);
+    @Override
+    String getDocLinkDocument() {
+        return getName() + "-dataformat.html";
     }
 
 }
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/LanguageModel.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/LanguageModel.java
index 9d3ea32..c72dfab 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/LanguageModel.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/LanguageModel.java
@@ -16,140 +16,16 @@
  */
 package org.apache.camel.quarkus.maven.model;
 
-import org.apache.camel.quarkus.maven.StringHelper;
+public class LanguageModel extends AbstractModel {
 
-import static org.apache.camel.quarkus.maven.StringHelper.cutLastZeroDigit;
-
-public class LanguageModel {
-
-    private String kind;
-    private String name;
-    private String modelName;
-    private String title;
-    private String description;
-    private String firstVersion;
-    private String label;
-    private String deprecated;
-    private String deprecationNote;
-    private String javaType;
-    private String groupId;
-    private String artifactId;
-    private String version;
-
-    public String getKind() {
-        return kind;
+    @Override
+    String getDocLinkSection() {
+        return "components";
     }
 
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getModelName() {
-        return modelName;
-    }
-
-    public void setModelName(String modelName) {
-        this.modelName = modelName;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getFirstVersion() {
-        return firstVersion;
-    }
-
-    public void setFirstVersion(String firstVersion) {
-        this.firstVersion = firstVersion;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public String getDeprecated() {
-        return deprecated;
-    }
-
-    public void setDeprecated(String deprecated) {
-        this.deprecated = deprecated;
-    }
-
-    public String getDeprecationNote() {
-        return deprecationNote;
-    }
-
-    public void setDeprecationNote(String deprecationNote) {
-        this.deprecationNote = deprecationNote;
-    }
-
-    public String getJavaType() {
-        return javaType;
-    }
-
-    public void setJavaType(String javaType) {
-        this.javaType = javaType;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    public String getShortJavaType() {
-        return StringHelper.getClassShortName(javaType);
-    }
-
-    public String getDocLink() {
-        return "https://camel.apache.org/components/latest/" + name + "-language.html";
-    }
-
-    public String getFirstVersionShort() {
-        return cutLastZeroDigit(firstVersion);
+    @Override
+    String getDocLinkDocument() {
+        return getName() + "-language.html";
     }
 
 }
diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/OtherModel.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/OtherModel.java
index 3ca3f55..ea213da 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/OtherModel.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/model/OtherModel.java
@@ -16,130 +16,19 @@
  */
 package org.apache.camel.quarkus.maven.model;
 
-import org.apache.camel.quarkus.maven.StringHelper;
-
-import static org.apache.camel.quarkus.maven.StringHelper.cutLastZeroDigit;
-
-public class OtherModel {
-
-    private String kind;
-    private String name;
-    private String title;
-    private String description;
-    private String firstVersion;
-    private String label;
-    private String deprecated;
-    private String deprecationNote;
-    private String groupId;
-    private String artifactId;
-    private String version;
-    private String javaType;
-
-    public String getJavaType() {
-        return javaType;
-    }
-
-    public void setJavaType(String javaType) {
-        this.javaType = javaType;
-    }
-
-    public String getKind() {
-        return kind;
-    }
-
-    public void setKind(String kind) {
-        this.kind = kind;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getFirstVersion() {
-        return firstVersion;
-    }
-
-    public void setFirstVersion(String firstVersion) {
-        this.firstVersion = firstVersion;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public String getDeprecated() {
-        return deprecated;
-    }
-
-    public void setDeprecated(String deprecated) {
-        this.deprecated = deprecated;
-    }
-
-    public String getDeprecationNote() {
-        return deprecationNote;
-    }
-
-    public void setDeprecationNote(String deprecationNote) {
-        this.deprecationNote = deprecationNote;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    public void setArtifactId(String artifactId) {
-        this.artifactId = artifactId;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
+public class OtherModel extends AbstractModel {
 
     public String getDocLink() {
-        return "https://camel.apache.org/components/latest/" + name + ".html";
+        return localDocExists() ? getLocalDocLink() : null;
     }
 
-    public String getFirstVersionShort() {
-        return cutLastZeroDigit(firstVersion);
+    @Override
+    String getDocLinkSection() {
+        return null;
     }
 
-    public String getShortJavaType() {
-        return StringHelper.getClassShortName(javaType);
+    @Override
+    String getDocLinkDocument() {
+        return null;
     }
 }
diff --git a/tooling/maven/package-maven-plugin/src/main/resources/readme-components.mvel b/tooling/maven/package-maven-plugin/src/main/resources/readme-components.mvel
index 3f21644..4904ef1 100644
--- a/tooling/maven/package-maven-plugin/src/main/resources/readme-components.mvel
+++ b/tooling/maven/package-maven-plugin/src/main/resources/readme-components.mvel
@@ -6,7 +6,7 @@
 |===
 | Component | Since | Description
 @foreach{row : components}
-| link:@{row.docLink}[@{row.title}] (@{row.artifactId}) +
+| @{row.docLink}[@{row.title}] (@{row.artifactId}) +
 `@{row.syntax}` | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
 @end{}
 |===
diff --git a/tooling/maven/package-maven-plugin/src/main/resources/readme-dataformats.mvel b/tooling/maven/package-maven-plugin/src/main/resources/readme-dataformats.mvel
index d024aa4..e436114 100644
--- a/tooling/maven/package-maven-plugin/src/main/resources/readme-dataformats.mvel
+++ b/tooling/maven/package-maven-plugin/src/main/resources/readme-dataformats.mvel
@@ -6,7 +6,7 @@
 |===
 | Data Format | Since | Description
 @foreach{row : dataformats}
-| link:@{row.docLink}[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
+| @{row.docLink}[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
 @end{}|===
 
 @end{}
\ No newline at end of file
diff --git a/tooling/maven/package-maven-plugin/src/main/resources/readme-languages.mvel b/tooling/maven/package-maven-plugin/src/main/resources/readme-languages.mvel
index ec6f269..28df02b 100644
--- a/tooling/maven/package-maven-plugin/src/main/resources/readme-languages.mvel
+++ b/tooling/maven/package-maven-plugin/src/main/resources/readme-languages.mvel
@@ -6,7 +6,7 @@
 |===
 | Language | Since | Description
 @foreach{row : languages}
-| link:@{row.docLink}[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
+| @{row.docLink}[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
 @end{}|===
 
 @end{}
\ No newline at end of file
diff --git a/tooling/maven/package-maven-plugin/src/main/resources/readme-others.mvel b/tooling/maven/package-maven-plugin/src/main/resources/readme-others.mvel
index 5c5840d..e873d89 100644
--- a/tooling/maven/package-maven-plugin/src/main/resources/readme-others.mvel
+++ b/tooling/maven/package-maven-plugin/src/main/resources/readme-others.mvel
@@ -6,7 +6,7 @@
 |===
 | Extension | Since | Description
 @foreach{row : others}
-| (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
+|@if{row.docLink != null} @{row.docLink}[@{row.artifactId}] @else{} (@{row.artifactId})@end{} | @{row.firstVersionShort} | @if{row.deprecated == "true"}*deprecated* @end{}@{util.escape(row.description)}
 @end{}|===
 
 @end{}
\ No newline at end of file
