diff --git a/src/reference/antora/modules/ROOT/pages/rabbitmq-amqp-client.adoc b/src/reference/antora/modules/ROOT/pages/rabbitmq-amqp-client.adoc
index a1e2fce8..ae3cbf15 100644
--- a/src/reference/antora/modules/ROOT/pages/rabbitmq-amqp-client.adoc
+++ b/src/reference/antora/modules/ROOT/pages/rabbitmq-amqp-client.adoc
@@ -5,4 +5,268 @@ Version 4.0 introduces `spring-rabbitmq-client` module for https://www.rabbitmq.
This artifact is based on the {rabbitmq-github}/rabbitmq-amqp-java-client[com.rabbitmq.client:amqp-client] library and therefore can work only with RabbitMQ and its AMQP 1.0 protocol support.
It cannot be used for any arbitrary AMQP 1.0 broker.
-For that purpose a https://qpid.apache.org/components/jms/index.html[JMS bridge] and respective {spring-framework-docs}/integration/jms.html[Spring JMS] integration is recommended so far.
\ No newline at end of file
+For that purpose a https://qpid.apache.org/components/jms/index.html[JMS bridge] and respective {spring-framework-docs}/integration/jms.html[Spring JMS] integration is recommended so far.
+
+This dependency has to be added to the project to be able to interact with RabbitMQ AMQP 1.0 support:
+
+.maven
+[source,xml,subs="+attributes"]
+----
+
+ org.springframework.amqp
+ spring-rabbitmq-client
+ {project-version}
+
+----
+
+.gradle
+[source,groovy,subs="+attributes"]
+----
+compile 'org.springframework.amqp:spring-rabbitmq-client:{project-version}'
+----
+
+The `spring-rabbit` (for AMQP 0.9.1 protocol) comes as a transitive dependency for reusing some common API in this new client, for example, exceptions, the `@RabbitListener` support.
+It is not necessary to use both functionality in the target project, but RabbitMQ allows both AMQP 0.9.1 and 1.0 co-exists.
+
+For more information about RabbitMQ AMQP 1.0 Java Client see its https://www.rabbitmq.com/client-libraries/amqp-client-libraries[documentation].
+
+[[amqp-client-environment]]
+== RabbitMQ AMQP 1.0 Environment
+
+The `com.rabbitmq.client.amqp.Environment` is the first thing which has to be added to the project for connection management and other common settings.
+It is an entry point to a node or a cluster of nodes.
+The environment allows creating connections.
+It can contain infrastructure-related configuration settings shared between connections, e.g. pools of threads, metrics and/or observation:
+
+[source,java]
+----
+@Bean
+Environment environment() {
+ return new AmqpEnvironmentBuilder()
+ .connectionSettings()
+ .port(5672)
+ .environmentBuilder()
+ .build();
+}
+----
+
+The same `Environment` instance can be used for connecting to different RabbitMQ brokers, then connection setting must be provided on specific connection.
+See below.
+
+[[amqp-client-connection-factory]]
+== AMQP Connection Factory
+
+The `org.springframework.amqp.rabbitmq.client.AmqpConnectionFactory` abstraction was introduced to manage `com.rabbitmq.client.amqp.Connection`.
+Don't confuse it with a `org.springframework.amqp.rabbit.connection.ConnectionFactory` which is only for AMQP 0.9.1 protocol.
+The `SingleAmqpConnectionFactory` implementation is present to manage one connection and its settings.
+The same `Connection` can be shared between many producers, consumers and management.
+The multi-plexing is handled by the link abstraction for AMQP 1.0 protocol implementation internally in the AMQP client library.
+The `Connection` has recovery capabilities and also handles topology.
+
+In most cases there is just enough to add this bean into the project:
+
+[source,java]
+----
+@Bean
+AmqpConnectionFactory connectionFactory(Environment environment) {
+ return new SingleAmqpConnectionFactory(environment);
+}
+----
+
+See `SingleAmqpConnectionFactory` setters for all connection-specific setting.
+
+[[amqp-client-topology]]
+== RabbitMQ Topology Management
+
+For topology management (exchanges, queues and binding between) from the application perspective, the `RabbitAmqpAdmin` is present, which is an implementation of existing `AmqpAdmin` interface:
+
+[source,java]
+----
+@Bean
+RabbitAmqpAdmin admin(AmqpConnectionFactory connectionFactory) {
+ return new RabbitAmqpAdmin(connectionFactory);
+}
+----
+
+The same bean definitions for `Exchange`, `Queue`, `Binding` and `Declarables` instances as described in the xref:amqp/broker-configuration.adoc[] has to be used to manage topology.
+The `RabbitAdmin` from `spring-rabbit` can also do that, but it happens against AMQP 0.9.1 connection, and since `RabbitAmqpAdmin` is based on the AMQP 1.0 connection, the topology recovery is handled smoothly from there, together with publishers and consumers recovery.
+
+The `RabbitAmqpAdmin` performs respective beans scanning in its `start()` lifecycle callback.
+The `initialize()`, as well-as all other RabbitMQ entities management methods can be called manually at runtime.
+Internally the `RabbitAmqpAdmin` uses `com.rabbitmq.client.amqp.Connection.management()` API to perform respective topology manipulations.
+
+[[amqp-client-template]]
+== `RabbitAmqpTemplate`
+
+The `RabbitAmqpTemplate` is an implementation of the `AsyncAmqpTemplate` and performs various send/receive operations with AMQP 1.0 protocol.
+Requires an `AmqpConnectionFactory` and can be configured with some defaults.
+Even if `com.rabbitmq.client:amqp-client` library comes with a `com.rabbitmq.client.amqp.Message`, the `RabbitAmqpTemplate` still exposes an API based on the well-known `org.springframework.amqp.core.Message` with all the supporting classes like `MessageProperties` and `MessageConverter` abstraction.
+The conversion to/from `com.rabbitmq.client.amqp.Message` is done internally in the `RabbitAmqpTemplate`.
+All the methods return a `CompletableFuture` to obtain operation results eventually.
+The operations with plain object require message body conversion and `SimpleMessageConverter` is used by default.
+See xref:amqp/message-converters.adoc[] for more information about conversions.
+
+Usually, just one bean like this is enough to perform all the possible template pattern operation:
+
+[source,java]
+----
+@Bean
+RabbitAmqpTemplate rabbitTemplate(AmqpConnectionFactory connectionFactory) {
+ return new RabbitAmqpTemplate(connectionFactory);
+}
+----
+
+It can be configured for some default exchange and routing key or just queue.
+The `RabbitAmqpTemplate` have a default queue for receive operation and another default queue for request-reply operation where temporary queue is created for the request by the client if not present.
+
+Here are some samples of `RabbitAmqpTemplate` operations:
+
+[source,java]
+----
+@Bean
+DirectExchange e1() {
+ return new DirectExchange("e1");
+}
+
+@Bean
+Queue q1() {
+ return QueueBuilder.durable("q1").deadLetterExchange("dlx1").build();
+}
+
+@Bean
+Binding b1() {
+ return BindingBuilder.bind(q1()).to(e1()).with("k1");
+}
+
+...
+
+@Test
+void defaultExchangeAndRoutingKey() {
+ this.rabbitAmqpTemplate.setExchange("e1");
+ this.rabbitAmqpTemplate.setRoutingKey("k1");
+ this.rabbitAmqpTemplate.setReceiveQueue("q1");
+
+ assertThat(this.rabbitAmqpTemplate.convertAndSend("test1"))
+ .succeedsWithin(Duration.ofSeconds(10));
+
+ assertThat(this.rabbitAmqpTemplate.receiveAndConvert())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo("test1");
+}
+----
+
+Here we declared an `e1` exchange, `q1` queue and bind it into that exchange with a `k1` routing key.
+Then we use a default setting for `RabbitAmqpTemplate` to publish messages to the mentioned exchange with the respective routing key and use `q1` as default queue for receiving operations.
+There are overloaded variants for those methods to send to specific exchange or queue (for send and receive).
+The `receiveAndConvert()` operations with a `ParameterizedTypeReference` requires a `SmartMessageConverter` to be injected into the `RabbitAmqpTemplate`.
+
+The next example demonstrate and RPC implementation with `RabbitAmqpTemplate` (assuming same RabbitMQ objects as in the previous example):
+
+[source,java]
+----
+@Test
+void verifyRpc() {
+ String testRequest = "rpc-request";
+ String testReply = "rpc-reply";
+
+ CompletableFuture