This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c097fd121d3aeceb28549a2fdcd7756504d6a4df
Author: Matthieu Baechler <[email protected]>
AuthorDate: Mon Feb 10 14:33:32 2020 +0100

    JAMES-3028 replace jcloud with S3-only implementation
---
 .../mail/CassandraMailboxMapperAclTest.java        |   4 +-
 .../smtp/cassandra-rabbitmq-object-storage/pom.xml |  18 +--
 .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java |   7 +-
 pom.xml                                            |  16 +-
 server/blob/blob-s3/pom.xml                        |   2 +-
 .../james/blob/objectstorage/aws/DockerAwsS3.java  |   8 +-
 .../objectstorage/aws/DockerAwsS3Container.java    |   4 +-
 ...{DockerAwsS3.java => DockerAwsS3Singleton.java} |  14 +-
 .../blob/objectstorage/aws/S3BlobStoreTest.java    |   2 +-
 .../objectstorage/aws/S3DumbBlobStoreTest.java     |   2 +-
 server/blob/pom.xml                                |   1 -
 .../guice/blob-s3-guice}/pom.xml                   |  60 +++----
 .../modules/objectstorage/S3BlobConfiguration.java | 179 +++++++++++++++++++++
 .../modules/objectstorage/S3BlobStoreModule.java   |  76 +++++++++
 .../aws/s3/AwsS3ConfigurationReader.java}          |  43 ++---
 .../aws/s3/AwsS3ConfigurationReaderTest.java       |  77 +++++++++
 .../objectstorage/aws/s3/DockerAwsS3TestRule.java  |  93 +++++++++++
 .../guice/cassandra-rabbitmq-guice/pom.xml         |  27 +---
 .../modules/blobstore/BlobStoreChoosingModule.java |   2 -
 .../modules/blobstore/BlobStoreConfiguration.java  |  10 +-
 .../modules/blobstore/BlobStoreModulesChooser.java |  15 +-
 .../james/modules/blobstore/NoopDumbBlobStore.java |  83 ----------
 .../james/CassandraRabbitMQAwsS3JmapTestRule.java  |   5 +-
 .../james/CassandraRabbitMQJamesServerFixture.java |   2 +-
 .../org/apache/james/WithCacheImmutableTest.java   |   2 +-
 .../james/WithDefaultAwsS3ImmutableTest.java       |  15 --
 .../james/WithDefaultSwiftImmutableTest.java       |  47 ------
 .../apache/james/WithDefaultSwiftMutableTest.java  |  31 ----
 .../james/WithEncryptedAwsS3ImmutableTest.java     |  48 ------
 .../james/WithEncryptedAwsS3MutableTest.java       |  32 ----
 .../james/WithEncryptedSwiftImmutableTest.java     |  49 ------
 .../james/WithEncryptedSwiftMutableTest.java       |  32 ----
 .../james/WithScanningSearchImmutableTest.java     |   2 +-
 .../james/modules/AwsS3BlobStoreExtension.java     |   8 +-
 .../BlobStoreCacheModulesChooserTest.java          |   4 +-
 .../blobstore/BlobStoreConfigurationTest.java      |  39 ++---
 .../blobstore/BlobStoreModulesChooserTest.java     |   2 +-
 ...eStrategyValidationEventSourcingSystemTest.java |  17 +-
 .../guice/cassandra-rabbitmq-ldap-guice/pom.xml    |  18 +--
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  |  23 +--
 server/container/guice/pom.xml                     |   2 +-
 .../pom.xml                                        |  22 +--
 .../pom.xml                                        |  18 +--
 .../rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java   |   2 +-
 .../RabbitMQAwsS3SpamAssassinContractTest.java     |   2 +-
 .../cucumber/awss3/CucumberAwsS3Singleton.java     |   2 -
 .../cucumber/awss3/RabbitMQAwsS3Stepdefs.java      |   8 +-
 .../pom.xml                                        |   4 +-
 .../distributed/DistributedAuthenticationTest.java |   2 +-
 .../distributed/DistributedEchoMethodTest.java     |   2 +-
 .../distributed/DistributedEmailGetMethodTest.java |   2 +-
 .../DistributedEmailQueryMethodTest.java           |   2 +-
 .../DistributedMailboxGetMethodTest.java           |   2 +-
 .../DistributedMailboxSetMethodTest.java           |   2 +-
 .../distributed/DistributedProvisioningTest.java   |   2 +-
 .../distributed/DistributedSessionRouteTest.java   |   4 +-
 .../DistributedVacationResponseGetMethodTest.java  |   2 +-
 .../DistributedVacationResponseSetMethodTest.java  |   2 +-
 .../distributed-webadmin-integration-test/pom.xml  |   4 +-
 .../rabbitmq/ConsistencyTasksIntegrationTest.java  |   4 +-
 .../rabbitmq/FixingGhostMailboxTest.java           |   2 +-
 .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java  |   4 +-
 .../RabbitMQEventDeadLettersIntegrationTest.java   |   2 +-
 ...stViewProjectionHealthCheckIntegrationTest.java |   2 +-
 .../rabbitmq/RabbitMQForwardIntegrationTest.java   |   2 +-
 .../rabbitmq/RabbitMQJwtFilterIntegrationTest.java |   2 +-
 ...RabbitMQReindexingWithEventDeadLettersTest.java |   5 +-
 .../RabbitMQUnauthorizedEndpointsTest.java         |   2 +-
 .../RabbitMQWebAdminServerIntegrationTest.java     |   4 +-
 ...dminServerTaskSerializationIntegrationTest.java |   2 +-
 ...RabbitMQDeletedMessageVaultIntegrationTest.java |   2 +-
 ...LinshareBlobExportMechanismIntegrationTest.java |   2 +-
 72 files changed, 603 insertions(+), 637 deletions(-)

diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
index 3e7fd66..119b715 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
@@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra.mail;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import 
org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
+import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.mailbox.cassandra.mail.utils.GuiceUtils;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
@@ -34,7 +35,8 @@ class CassandraMailboxMapperAclTest extends 
MailboxMapperACLTest {
     private static final CassandraModule MODULES = 
CassandraModule.aggregateModules(
         CassandraSchemaVersionModule.MODULE,
         CassandraAclModule.MODULE,
-        CassandraMailboxModule.MODULE);
+        CassandraMailboxModule.MODULE,
+        CassandraBlobModule.MODULE);
 
     @RegisterExtension
     static CassandraClusterExtension cassandraCluster = new 
CassandraClusterExtension(MODULES);
diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml 
b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
index d4ce24f..1207199 100644
--- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
+++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
@@ -49,29 +49,15 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git 
a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
 
b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
index 6ccde46..d97bbd7 100644
--- 
a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
+++ 
b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java
@@ -26,12 +26,12 @@ import org.apache.james.backends.cassandra.DockerCassandra;
 import 
org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration;
 import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton;
 import org.apache.james.blob.api.BlobStore;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.MetricableBlobStore;
-import org.apache.james.blob.objectstorage.ObjectStorageBlobStore;
+import org.apache.james.blob.objectstorage.aws.S3BlobStore;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.modules.TestRabbitMQModule;
 import org.apache.james.modules.mailbox.KeyspacesConfiguration;
-import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule;
 import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
 import 
org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType;
 import org.apache.james.modules.rabbitmq.RabbitMQModule;
@@ -56,10 +56,9 @@ public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory 
{
     private static Module BLOB_STORE_MODULE = new AbstractModule() {
         @Override
         protected void configure() {
-            install(new ObjectStorageDependenciesModule());
             bind(BlobStore.class)
                 
.annotatedWith(Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION))
-                .to(ObjectStorageBlobStore.class);
+                .to(S3BlobStore.class);
         }
     };
 
diff --git a/pom.xml b/pom.xml
index 4d148b9..d237cd3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1165,34 +1165,34 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-memory-guice</artifactId>
+                <artifactId>blob-memory</artifactId>
                 <version>${project.version}</version>
+                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-objectstorage</artifactId>
+                <artifactId>blob-memory-guice</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-objectstorage</artifactId>
+                <artifactId>blob-s3</artifactId>
                 <version>${project.version}</version>
-                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-objectstorage-guice</artifactId>
+                <artifactId>blob-s3</artifactId>
                 <version>${project.version}</version>
+                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-objectstorage-guice</artifactId>
+                <artifactId>blob-s3-guice</artifactId>
                 <version>${project.version}</version>
-                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>blob-memory</artifactId>
+                <artifactId>blob-s3-guice</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
diff --git a/server/blob/blob-s3/pom.xml b/server/blob/blob-s3/pom.xml
index 6c9dc6d..0d49b94 100644
--- a/server/blob/blob-s3/pom.xml
+++ b/server/blob/blob-s3/pom.xml
@@ -27,7 +27,7 @@
     <parent>
         <artifactId>james-server-blob</artifactId>
         <groupId>org.apache.james</groupId>
-        <version>3.5.0-SNAPSHOT</version>
+        <version>3.6.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
index 98202df..8ed3b39 100644
--- 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
+++ 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
@@ -23,9 +23,15 @@ import java.net.URI;
 
 public class DockerAwsS3 {
     private final URI awsS3Endpoint;
+    private final Region region;
 
-    public DockerAwsS3(URI awsS3Endpoint) {
+    public DockerAwsS3(URI awsS3Endpoint, Region region) {
         this.awsS3Endpoint = awsS3Endpoint;
+        this.region = region;
+    }
+
+    public Region region() {
+        return region;
     }
 
     public URI awsS3Endpoint() {
diff --git 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
index ff566d2..5e2d690 100644
--- 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
+++ 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
@@ -27,12 +27,12 @@ import org.testcontainers.containers.wait.strategy.Wait;
 
 public class DockerAwsS3Container {
 
-    public static final Region REGION = 
Region.of(software.amazon.awssdk.regions.Region.EU_WEST_1.id());
 
     private static final String AWS_S3_DOCKER_IMAGE = 
"zenko/cloudserver:8.2.3";
     private static final int AWS_S3_PORT = 8000;
     private static final int ONE_TIME = 1;
 
+    public static final Region REGION = 
Region.of(software.amazon.awssdk.regions.Region.EU_WEST_1.id());
     public static final String ACCESS_KEY_ID = "newAccessKey";
     public static final String SECRET_ACCESS_KEY = "newSecretKey";
 
@@ -53,7 +53,7 @@ public class DockerAwsS3Container {
     public void start() {
         awsS3Container.start();
 
-        dockerAwsS3 = new DockerAwsS3(URI.create("http://"; + 
getHost().asString() + "/"));
+        dockerAwsS3 = new DockerAwsS3(URI.create("http://"; + 
getHost().asString() + "/"), REGION);
     }
 
     public void stop() {
diff --git 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java
similarity index 83%
copy from 
server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
copy to 
server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java
index 98202df..c5b9975 100644
--- 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
+++ 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java
@@ -19,17 +19,13 @@
 
 package org.apache.james.blob.objectstorage.aws;
 
-import java.net.URI;
+public class DockerAwsS3Singleton {
 
-public class DockerAwsS3 {
-    private final URI awsS3Endpoint;
+    public static final DockerAwsS3Container singleton = new 
DockerAwsS3Container();
 
-    public DockerAwsS3(URI awsS3Endpoint) {
-        this.awsS3Endpoint = awsS3Endpoint;
+    static {
+        singleton.start();
     }
 
-    public URI awsS3Endpoint() {
-        return awsS3Endpoint;
-    }
+    // Cleanup will be performed by test namespace resource reaper
 }
-
diff --git 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java
 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java
index aea81d4..25f4464 100644
--- 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java
+++ 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java
@@ -43,7 +43,7 @@ class S3BlobStoreTest implements BlobStoreContract {
             .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY)
             .build();
 
-        s3DumbBlobStore = new S3DumbBlobStore(configuration, 
DockerAwsS3Container.REGION);
+        s3DumbBlobStore = new S3DumbBlobStore(configuration, 
dockerAwsS3.dockerAwsS3().region());
         testee = new S3BlobStore(s3DumbBlobStore, new HashBlobId.Factory(), 
BucketName.DEFAULT);
     }
 
diff --git 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java
 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java
index 93ea6af..49bd95e 100644
--- 
a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java
+++ 
b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java
@@ -38,7 +38,7 @@ public class S3DumbBlobStoreTest implements 
DumbBlobStoreContract {
             .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY)
             .build();
 
-        testee = new S3DumbBlobStore(configuration, 
DockerAwsS3Container.REGION);
+        testee = new S3DumbBlobStore(configuration, 
dockerAwsS3.dockerAwsS3().region());
     }
 
     @AfterEach
diff --git a/server/blob/pom.xml b/server/blob/pom.xml
index d10760c..8a51689 100644
--- a/server/blob/pom.xml
+++ b/server/blob/pom.xml
@@ -41,7 +41,6 @@
         <module>blob-export-file</module>
         <module>blob-gc</module>
         <module>blob-memory</module>
-        <module>blob-objectstorage</module>
         <module>blob-s3</module>
 
         <module>mail-store</module>
diff --git a/server/blob/blob-s3/pom.xml 
b/server/container/guice/blob-s3-guice/pom.xml
similarity index 61%
copy from server/blob/blob-s3/pom.xml
copy to server/container/guice/blob-s3-guice/pom.xml
index 6c9dc6d..7d064f4 100644
--- a/server/blob/blob-s3/pom.xml
+++ b/server/container/guice/blob-s3-guice/pom.xml
@@ -18,78 +18,62 @@
     under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
 
-    <properties>
-        <s3-sdk.version>2.10.41</s3-sdk.version>
-    </properties>
+    <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <artifactId>james-server-blob</artifactId>
         <groupId>org.apache.james</groupId>
-        <version>3.5.0-SNAPSHOT</version>
+        <artifactId>james-server-guice</artifactId>
+        <version>3.6.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>blob-s3</artifactId>
+    <artifactId>blob-s3-guice</artifactId>
     <packaging>jar</packaging>
 
-    <name>Apache James :: Server :: Blob :: S3</name>
+    <name>Apache James :: Server :: Blob S3 - guice injection</name>
+    <description>An advanced email server - S3 based Blob Store 
bindings</description>
 
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-api</artifactId>
+            <artifactId>blob-api-guice</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>blob-s3</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-api</artifactId>
+            <artifactId>blob-s3</artifactId>
+            <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-core</artifactId>
+            <artifactId>james-server-guice-common</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-util</artifactId>
+            <artifactId>james-server-guice-configuration</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>testing-base</artifactId>
+            <artifactId>james-server-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.annotation</groupId>
-            <artifactId>javax.annotation-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.projectreactor.addons</groupId>
-            <artifactId>reactor-extra</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>testing-base</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
             <artifactId>testcontainers</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>software.amazon.awssdk</groupId>
-            <artifactId>netty-nio-client</artifactId>
-            <version>${s3-sdk.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>software.amazon.awssdk</groupId>
-            <artifactId>s3</artifactId>
-            <version>${s3-sdk.version}</version>
-        </dependency>
     </dependencies>
-</project>
+</project>
\ No newline at end of file
diff --git 
a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java
 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java
new file mode 100644
index 0000000..7410276
--- /dev/null
+++ 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java
@@ -0,0 +1,179 @@
+/****************************************************************
+ * 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.james.modules.objectstorage;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.configuration2.Configuration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.james.blob.api.BucketName;
+import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration;
+import org.apache.james.blob.objectstorage.aws.Region;
+import org.apache.james.modules.objectstorage.aws.s3.AwsS3ConfigurationReader;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
+
+public class S3BlobConfiguration {
+
+    private static final String OBJECTSTORAGE_NAMESPACE = 
"objectstorage.namespace";
+    private static final String OBJECTSTORAGE_BUCKET_PREFIX = 
"objectstorage.bucketPrefix";
+    private static final String OBJECTSTORAGE_S3_REGION = 
"objectstorage.s3.region";
+
+    static final String DEFAULT_BUCKET_PREFIX = "";
+
+    public static S3BlobConfiguration from(Configuration configuration) throws 
ConfigurationException {
+        Optional<String> namespace = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_NAMESPACE, null));
+        Optional<String> bucketPrefix = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_BUCKET_PREFIX, null));
+        Region region = 
Optional.ofNullable(configuration.getString(OBJECTSTORAGE_S3_REGION, null))
+            .map(Region::of)
+            .orElseThrow(() -> new ConfigurationException("require a region (" 
+ OBJECTSTORAGE_S3_REGION + " key)"));
+
+        return builder()
+            .authConfiguration(authConfiguration(configuration))
+            .region(region)
+            .defaultBucketName(namespace.map(BucketName::of))
+            .bucketPrefix(bucketPrefix)
+            .build();
+    }
+
+    private static AwsS3AuthConfiguration authConfiguration(Configuration 
configuration) throws ConfigurationException {
+        return AwsS3ConfigurationReader.from(configuration);
+    }
+
+    public static Builder.RequireAuthConfiguration builder() {
+        return authConfiguration -> region -> new 
Builder.ReadyToBuild(authConfiguration, region);
+    }
+
+    public interface Builder {
+
+        @FunctionalInterface
+        interface RequireAuthConfiguration {
+            RequireRegion authConfiguration(AwsS3AuthConfiguration 
authConfiguration);
+        }
+
+        @FunctionalInterface
+        interface RequireRegion {
+            ReadyToBuild region(Region region);
+        }
+
+        class ReadyToBuild {
+
+            private final AwsS3AuthConfiguration specificAuthConfiguration;
+
+            private Optional<BucketName> defaultBucketName;
+            private Optional<String> bucketPrefix;
+            private Region region;
+
+            public ReadyToBuild(AwsS3AuthConfiguration 
specificAuthConfiguration, Region region) {
+                this.specificAuthConfiguration = specificAuthConfiguration;
+                this.region = region;
+                this.defaultBucketName = Optional.empty();
+                this.bucketPrefix = Optional.empty();
+            }
+
+            public ReadyToBuild defaultBucketName(Optional<BucketName> 
defaultBucketName) {
+                this.defaultBucketName = defaultBucketName;
+                return this;
+            }
+
+            public ReadyToBuild defaultBucketName(BucketName 
defaultBucketName) {
+                this.defaultBucketName = Optional.of(defaultBucketName);
+                return this;
+            }
+
+            public ReadyToBuild bucketPrefix(Optional<String> bucketPrefix) {
+                this.bucketPrefix = bucketPrefix;
+                return this;
+            }
+
+            public ReadyToBuild bucketPrefix(String bucketPrefix) {
+                this.bucketPrefix = Optional.ofNullable(bucketPrefix);
+                return this;
+            }
+
+            public S3BlobConfiguration build() {
+                return new S3BlobConfiguration(bucketPrefix, 
defaultBucketName, region, specificAuthConfiguration);
+            }
+        }
+
+    }
+
+    private final Region region;
+    private final AwsS3AuthConfiguration specificAuthConfiguration;
+    private final Optional<BucketName> namespace;
+    private final Optional<String> bucketPrefix;
+
+    @VisibleForTesting
+    S3BlobConfiguration(Optional<String> bucketPrefix,
+                        Optional<BucketName> namespace,
+                        Region region,
+                        AwsS3AuthConfiguration specificAuthConfiguration) {
+        this.bucketPrefix = bucketPrefix;
+        this.namespace = namespace;
+        this.region = region;
+        this.specificAuthConfiguration = specificAuthConfiguration;
+    }
+
+    public Optional<BucketName> getNamespace() {
+        return namespace;
+    }
+
+    public AwsS3AuthConfiguration getSpecificAuthConfiguration() {
+        return specificAuthConfiguration;
+    }
+
+    public Optional<String> getBucketPrefix() {
+        return bucketPrefix;
+    }
+
+    public Region getRegion() {
+        return region;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof S3BlobConfiguration) {
+            S3BlobConfiguration that = (S3BlobConfiguration) o;
+
+            return Objects.equals(this.namespace, that.namespace)
+                && Objects.equals(this.bucketPrefix, that.bucketPrefix)
+                && Objects.equals(this.region, that.region)
+                && Objects.equals(this.specificAuthConfiguration, 
that.specificAuthConfiguration);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(namespace, bucketPrefix, 
specificAuthConfiguration);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("namespace", namespace)
+            .add("bucketPrefix", bucketPrefix)
+            .add("region", region)
+            .add("specificAuthConfiguration", specificAuthConfiguration)
+            .toString();
+    }
+}
diff --git 
a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java
 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java
new file mode 100644
index 0000000..fe000e1
--- /dev/null
+++ 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.james.modules.objectstorage;
+
+import java.io.FileNotFoundException;
+
+import javax.inject.Singleton;
+
+import org.apache.commons.configuration2.Configuration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.james.blob.api.BlobId;
+import org.apache.james.blob.api.BucketName;
+import org.apache.james.blob.api.HashBlobId;
+import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration;
+import org.apache.james.blob.objectstorage.aws.Region;
+import org.apache.james.modules.mailbox.ConfigurationComponent;
+import org.apache.james.utils.PropertiesProvider;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Scopes;
+
+public class S3BlobStoreModule extends AbstractModule {
+
+    @Override
+    protected void configure() {
+        
bind(BlobId.Factory.class).to(HashBlobId.Factory.class).in(Scopes.SINGLETON);
+    }
+
+    @Provides
+    @Singleton
+    private S3BlobConfiguration 
getObjectStorageConfiguration(PropertiesProvider propertiesProvider) throws 
ConfigurationException {
+        try {
+            Configuration configuration = 
propertiesProvider.getConfigurations(ConfigurationComponent.NAMES);
+            return S3BlobConfiguration.from(configuration);
+        } catch (FileNotFoundException e) {
+            throw new ConfigurationException(ConfigurationComponent.NAME + " 
configuration was not found");
+        }
+    }
+
+    @Provides
+    @Singleton
+    private AwsS3AuthConfiguration awsS3AuthConfiguration(S3BlobConfiguration 
s3BlobConfiguration) {
+        return s3BlobConfiguration.getSpecificAuthConfiguration();
+    }
+
+    @Provides
+    @Singleton
+    private BucketName defaultBucket(S3BlobConfiguration s3BlobConfiguration) {
+        return s3BlobConfiguration.getNamespace().orElse(BucketName.DEFAULT);
+    }
+
+    @Provides
+    @Singleton
+    private Region region(S3BlobConfiguration s3BlobConfiguration) {
+        return s3BlobConfiguration.getRegion();
+    }
+
+}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java
 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
similarity index 54%
rename from 
server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java
rename to 
server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
index 3d5fec1..387e922 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java
+++ 
b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
@@ -17,39 +17,24 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.modules;
+package org.apache.james.modules.objectstorage.aws.s3;
 
-import org.apache.james.GuiceModuleTestExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
-import org.junit.jupiter.api.extension.ExtensionContext;
+import org.apache.commons.configuration2.Configuration;
+import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration;
 
-import com.google.inject.Module;
+public class AwsS3ConfigurationReader {
 
-public class SwiftBlobStoreExtension implements GuiceModuleTestExtension {
+    static final String OBJECTSTORAGE_ENDPOINT = "objectstorage.s3.endPoint";
+    static final String OBJECTSTORAGE_ACCESKEYID = 
"objectstorage.s3.accessKeyId";
+    static final String OBJECTSTORAGE_SECRETKEY = "objectstorage.s3.secretKey";
 
-    private final DockerSwiftTestRule swiftRule;
+    public static AwsS3AuthConfiguration from(Configuration configuration) {
 
-    public SwiftBlobStoreExtension() {
-        this.swiftRule = new DockerSwiftTestRule();
-    }
-
-    public SwiftBlobStoreExtension(PayloadCodecFactory payloadCodecFactory) {
-        this.swiftRule = new DockerSwiftTestRule(payloadCodecFactory);
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext extensionContext) {
-        swiftRule.start();
-    }
-
-    @Override
-    public void afterAll(ExtensionContext extensionContext) {
-        swiftRule.stop();
-    }
-
-    @Override
-    public Module getModule() {
-        return swiftRule.getModule();
+        return AwsS3AuthConfiguration.builder()
+                .endpoint(configuration.getString(OBJECTSTORAGE_ENDPOINT))
+                .accessKeyId(configuration.getString(OBJECTSTORAGE_ACCESKEYID))
+                .secretKey(configuration.getString(OBJECTSTORAGE_SECRETKEY))
+                .build();
     }
 }
+
diff --git 
a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
 
b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
new file mode 100644
index 0000000..c1225d7
--- /dev/null
+++ 
b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
@@ -0,0 +1,77 @@
+/****************************************************************
+ * 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.james.modules.objectstorage.aws.s3;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.apache.commons.configuration2.Configuration;
+import org.apache.commons.configuration2.PropertiesConfiguration;
+import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration;
+import org.junit.jupiter.api.Test;
+
+class AwsS3ConfigurationReaderTest {
+
+    @Test
+    void fromShouldThrowWhenEndpointIsNull() {
+        Configuration configuration = new PropertiesConfiguration();
+        assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+            .isInstanceOf(NullPointerException.class)
+            .hasMessage("'endpoint' is mandatory");
+    }
+
+    @Test
+    void fromShouldThrowWhenAccessKeyIdIsNull() {
+        Configuration configuration = new PropertiesConfiguration();
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, 
"myEndpoint");
+        assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+            .isInstanceOf(NullPointerException.class)
+            .hasMessage("'accessKeyId' is mandatory");
+    }
+
+    @Test
+    void fromShouldThrowWhenSecretKeyIsNull() {
+        Configuration configuration = new PropertiesConfiguration();
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, 
"myEndpoint");
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, 
"myAccessKeyId");
+        assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+            .isInstanceOf(NullPointerException.class)
+            .hasMessage("'secretKey' is mandatory");
+    }
+
+    @Test
+    void fromShouldWork() {
+        Configuration configuration = new PropertiesConfiguration();
+        String endpoint = "myEndpoint";
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, 
endpoint);
+        String accessKeyId = "myAccessKeyId";
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, 
accessKeyId);
+        String secretKey = "mySecretKey";
+        
configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_SECRETKEY, 
secretKey);
+
+        AwsS3AuthConfiguration expected = AwsS3AuthConfiguration.builder()
+            .endpoint(endpoint)
+            .accessKeyId(accessKeyId)
+            .secretKey(secretKey)
+            .build();
+        AwsS3AuthConfiguration authConfiguration = 
AwsS3ConfigurationReader.from(configuration);
+        assertThat(authConfiguration).isEqualTo(expected);
+    }
+}
\ No newline at end of file
diff --git 
a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
 
b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
new file mode 100644
index 0000000..f156cf6
--- /dev/null
+++ 
b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -0,0 +1,93 @@
+/****************************************************************
+ * 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.james.modules.objectstorage.aws.s3;
+
+import java.util.UUID;
+
+import org.apache.james.GuiceModuleTestRule;
+import org.apache.james.blob.api.BucketName;
+import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration;
+import org.apache.james.blob.objectstorage.aws.DockerAwsS3Container;
+import org.apache.james.blob.objectstorage.aws.DockerAwsS3Singleton;
+import org.apache.james.blob.objectstorage.aws.Region;
+import org.apache.james.modules.objectstorage.S3BlobConfiguration;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import com.google.inject.Module;
+
+public class DockerAwsS3TestRule implements GuiceModuleTestRule {
+
+    public DockerAwsS3TestRule() {
+    }
+
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                ensureAwsS3started();
+                base.evaluate();
+            }
+        };
+    }
+
+    private void ensureAwsS3started() {
+        DockerAwsS3Singleton.singleton.dockerAwsS3();
+    }
+
+    @Override
+    public void await() {
+    }
+
+    @Override
+    public Module getModule() {
+        BucketName defaultBucketName = 
BucketName.of(UUID.randomUUID().toString());
+        AwsS3AuthConfiguration authConfiguration = 
AwsS3AuthConfiguration.builder()
+            .endpoint(DockerAwsS3Singleton.singleton.getEndpoint())
+            .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
+            .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY)
+            .build();
+
+        Region region = DockerAwsS3Container.REGION;
+        S3BlobConfiguration configuration = S3BlobConfiguration.builder()
+            .authConfiguration(authConfiguration)
+            .region(region)
+            .defaultBucketName(defaultBucketName)
+            .bucketPrefix(UUID.randomUUID().toString())
+            .build();
+
+        return binder -> {
+            binder.bind(BucketName.class).toInstance(defaultBucketName);
+            binder.bind(Region.class).toInstance(region);
+            
binder.bind(AwsS3AuthConfiguration.class).toInstance(authConfiguration);
+            binder.bind(S3BlobConfiguration.class).toInstance(configuration);
+        };
+    }
+
+    public void start() {
+        ensureAwsS3started();
+    }
+
+    public void stop() {
+        //nothing to stop
+    }
+}
+
diff --git a/server/container/guice/cassandra-rabbitmq-guice/pom.xml 
b/server/container/guice/cassandra-rabbitmq-guice/pom.xml
index 3fc2aa9..e2d503a 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/pom.xml
+++ b/server/container/guice/cassandra-rabbitmq-guice/pom.xml
@@ -85,40 +85,19 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
+            <artifactId>blob-s3-guice</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
index 99e9ea2..27c3231 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
@@ -21,7 +21,6 @@ package org.apache.james.modules.blobstore;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
-import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
@@ -29,7 +28,6 @@ import com.google.inject.multibindings.Multibinder;
 public class BlobStoreChoosingModule extends AbstractModule {
     @Override
     protected void configure() {
-        install(new ObjectStorageDependenciesModule());
 
         Multibinder<CassandraModule> cassandraDataDefinitions = 
Multibinder.newSetBinder(binder(), CassandraModule.class);
         
cassandraDataDefinitions.addBinding().toInstance(CassandraBlobModule.MODULE);
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
index be9a220..215c4f9 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
@@ -51,8 +51,8 @@ public class BlobStoreConfiguration {
             return implementation(BlobStoreImplName.CASSANDRA);
         }
 
-        default RequireCache objectStorage() {
-            return implementation(BlobStoreImplName.OBJECTSTORAGE);
+        default RequireCache s3() {
+            return implementation(BlobStoreImplName.S3);
         }
     }
 
@@ -88,7 +88,7 @@ public class BlobStoreConfiguration {
 
     public enum BlobStoreImplName {
         CASSANDRA("cassandra"),
-        OBJECTSTORAGE("objectstorage");
+        S3("s3");
 
         static String supportedImplNames() {
             return Stream.of(BlobStoreImplName.values())
@@ -170,6 +170,10 @@ public class BlobStoreConfiguration {
             .disableCache();
     }
 
+    public static RequireCache s3() {
+        return builder().s3();
+    }
+
     private final BlobStoreImplName implementation;
     private final boolean cacheEnabled;
     private final StorageStrategy storageStrategy;
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
index b37e0ab..770cffa 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
@@ -25,7 +25,8 @@ import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.DumbBlobStore;
 import org.apache.james.blob.cassandra.CassandraDumbBlobStore;
 import org.apache.james.blob.cassandra.cache.CachedBlobStore;
-import org.apache.james.blob.objectstorage.ObjectStorageBlobStore;
+import org.apache.james.blob.objectstorage.aws.S3BlobStore;
+import org.apache.james.blob.objectstorage.aws.S3DumbBlobStore;
 import org.apache.james.eventsourcing.Event;
 import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO;
 import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
@@ -33,7 +34,7 @@ import org.apache.james.lifecycle.api.StartUpCheck;
 import 
org.apache.james.modules.blobstore.validation.EventsourcingStorageStrategy;
 import org.apache.james.modules.blobstore.validation.StorageStrategyModule;
 import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule;
-import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule;
+import org.apache.james.modules.objectstorage.S3BlobStoreModule;
 import org.apache.james.server.blob.deduplication.DeDuplicationBlobStore;
 import org.apache.james.server.blob.deduplication.PassThroughBlobStore;
 import org.apache.james.server.blob.deduplication.StorageStrategy;
@@ -60,11 +61,13 @@ public class BlobStoreModulesChooser {
     static class ObjectStorageDumdBlobStoreDeclarationModule extends 
AbstractModule {
         @Override
         protected void configure() {
-            install(new ObjectStorageDependenciesModule());
-            bind(DumbBlobStore.class).to(NoopDumbBlobStore.class);
+            install(new S3BlobStoreModule());
+
+            bind(DumbBlobStore.class).to(S3DumbBlobStore.class);
+
             bind(BlobStore.class)
                 .annotatedWith(Names.named(CachedBlobStore.BACKEND))
-                .to(ObjectStorageBlobStore.class);
+                .to(S3BlobStore.class);
         }
     }
 
@@ -107,7 +110,7 @@ public class BlobStoreModulesChooser {
         switch (implementation) {
             case CASSANDRA:
                 return new CassandraDumbBlobStoreDeclarationModule();
-            case OBJECTSTORAGE:
+            case S3:
                 return new ObjectStorageDumdBlobStoreDeclarationModule();
             default:
                 throw new RuntimeException("Unsupported blobStore 
implementation " + implementation);
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java
deleted file mode 100644
index 9ebc084..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************
- * 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.james.modules.blobstore;
-
-import java.io.InputStream;
-
-import javax.inject.Inject;
-
-import org.apache.commons.lang3.NotImplementedException;
-import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.api.BucketName;
-import org.apache.james.blob.api.DumbBlobStore;
-import org.apache.james.blob.api.ObjectNotFoundException;
-import org.apache.james.blob.api.ObjectStoreIOException;
-import org.apache.james.blob.objectstorage.ObjectStorageBlobStore;
-import org.reactivestreams.Publisher;
-
-import com.google.common.io.ByteSource;
-
-
-/**
- * This class is a workaround while waiting for a real DumbBlobStore to be 
extracted from ObjectStorageBlobStore
- */
-public class NoopDumbBlobStore implements DumbBlobStore {
-    private final ObjectStorageBlobStore objectStorageBlobStore;
-
-    @Inject
-    public NoopDumbBlobStore(ObjectStorageBlobStore objectStorageBlobStore) {
-        this.objectStorageBlobStore = objectStorageBlobStore;
-    }
-
-    @Override
-    public InputStream read(BucketName bucketName, BlobId blobId) throws 
ObjectStoreIOException, ObjectNotFoundException {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public Publisher<byte[]> readBytes(BucketName bucketName, BlobId blobId) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public Publisher<Void> save(BucketName bucketName, BlobId blobId, byte[] 
data) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public Publisher<Void> save(BucketName bucketName, BlobId blobId, 
InputStream inputStream) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public Publisher<Void> save(BucketName bucketName, BlobId blobId, 
ByteSource content) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public Publisher<Void> delete(BucketName bucketName, BlobId blobId) {
-        return objectStorageBlobStore.deleteEffectively(bucketName, blobId);
-    }
-
-    @Override
-    public Publisher<Void> deleteBucket(BucketName bucketName) {
-        throw new NotImplementedException("Not implemented");
-    }
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
index 9986b37..6b86dbf 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
@@ -41,7 +41,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements 
TestRule {
     private final TemporaryFolder temporaryFolder;
 
     public static CassandraRabbitMQAwsS3JmapTestRule defaultTestRule() {
-        return new CassandraRabbitMQAwsS3JmapTestRule(new 
DockerAwsS3TestRule());
+        return new CassandraRabbitMQAwsS3JmapTestRule();
     }
 
     private final GuiceModuleTestRule guiceModuleTestRule;
@@ -63,7 +63,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements 
TestRule {
             .workingDirectory(temporaryFolder.newFolder())
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -71,6 +71,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements 
TestRule {
 
         return CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new 
TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON))
+            .overrideWith(new DockerAwsS3TestRule().getModule())
             .overrideWith(new TestJMAPServerModule())
             .overrideWith(new 
TestDockerESMetricReporterModule(dockerElasticSearchRule.getDockerEs().getHttpHost()))
             .overrideWith(guiceModuleTestRule.getModule())
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
index 2027540..1219646 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
@@ -34,7 +34,7 @@ public class CassandraRabbitMQJamesServerFixture {
                 .workingDirectory(tmpDir)
                 .configurationFromClasspath()
                 .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
                 .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
index 889b46e..194367c 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
@@ -39,7 +39,7 @@ class WithCacheImmutableTest implements 
JmapJamesServerContract, JamesServerCont
                 .workingDirectory(tmpDir)
                 .configurationFromClasspath()
                 .blobStore(BlobStoreConfiguration.builder()
-                        .objectStorage()
+                        .s3()
                         .enableCache()
                         .deduplication())
                 .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
index 0a6db6f..3c272fa 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
@@ -19,14 +19,8 @@
 
 package org.apache.james;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.blob.objectstorage.DefaultPayloadCodec;
-import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
-import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class WithDefaultAwsS3ImmutableTest implements JmapJamesServerContract, 
JamesServerContract {
@@ -35,13 +29,4 @@ public class WithDefaultAwsS3ImmutableTest implements 
JmapJamesServerContract, J
         .extension(new AwsS3BlobStoreExtension())
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
-
-    @Test
-    void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) {
-        PayloadCodec payloadCodec = 
jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class)
-            .getAwsS3PayloadCodec();
-
-        assertThat(payloadCodec)
-            .isInstanceOf(DefaultPayloadCodec.class);
-    }
 }
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
deleted file mode 100644
index 8d651f4..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************
- * 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.james;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.blob.objectstorage.DefaultPayloadCodec;
-import org.apache.james.blob.objectstorage.PayloadCodec;
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithDefaultSwiftImmutableTest implements JmapJamesServerContract, 
JamesServerContract {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new SwiftBlobStoreExtension())
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
-        .build();
-
-    @Test
-    void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) {
-        PayloadCodec payloadCodec = 
jamesServer.getProbe(DockerSwiftTestRule.TestSwiftBlobStoreProbe.class)
-            .getSwiftPayloadCodec();
-
-        assertThat(payloadCodec)
-            .isInstanceOf(DefaultPayloadCodec.class);
-    }
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
deleted file mode 100644
index fe4ae75..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.james;
-
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithDefaultSwiftMutableTest implements MailsShouldBeWellReceived {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new SwiftBlobStoreExtension())
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
-        .build();
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
deleted file mode 100644
index d733079..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************
- * 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.james;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.blob.objectstorage.AESPayloadCodec;
-import org.apache.james.blob.objectstorage.PayloadCodec;
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.modules.AwsS3BlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithEncryptedAwsS3ImmutableTest implements 
JmapJamesServerContract, JamesServerContract {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
-        .build();
-
-    @Test
-    void 
encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer
 jamesServer) {
-        PayloadCodec payloadCodec = 
jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class)
-            .getAwsS3PayloadCodec();
-
-        assertThat(payloadCodec)
-            .isInstanceOf(AESPayloadCodec.class);
-    }
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
deleted file mode 100644
index 361e575..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.james;
-
-import org.apache.james.modules.AwsS3BlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithEncryptedAwsS3MutableTest implements 
MailsShouldBeWellReceived {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
-        .build();
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
deleted file mode 100644
index f0cf7ac..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************
- * 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.james;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.blob.objectstorage.AESPayloadCodec;
-import org.apache.james.blob.objectstorage.PayloadCodec;
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithEncryptedSwiftImmutableTest implements 
JmapJamesServerContract, JamesServerContract {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256))
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
-        .build();
-
-    @Test
-    void 
encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer
 jamesServer) {
-        PayloadCodec payloadCodec = 
jamesServer.getProbe(DockerSwiftTestRule.TestSwiftBlobStoreProbe.class)
-            .getSwiftPayloadCodec();
-
-        assertThat(payloadCodec)
-            .isInstanceOf(AESPayloadCodec.class);
-    }
-
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
deleted file mode 100644
index 7f45b8e..0000000
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.james;
-
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class WithEncryptedSwiftMutableTest implements 
MailsShouldBeWellReceived {
-    @RegisterExtension
-    static JamesServerExtension jamesServerExtension = 
CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-        .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256))
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
-        .build();
-}
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
index 45896b2..cddaa97 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
@@ -33,7 +33,7 @@ class WithScanningSearchImmutableTest implements 
JmapJamesServerContract, JamesS
                 .workingDirectory(tmpDir)
                 .configurationFromClasspath()
                 .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
                 .searchConfiguration(SearchConfiguration.scanning())
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
index 4b09ce6..3d7ebf5 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
@@ -20,12 +20,12 @@
 package org.apache.james.modules;
 
 import org.apache.james.GuiceModuleTestExtension;
-import org.apache.james.blob.objectstorage.DockerAwsS3Singleton;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
+import org.apache.james.blob.objectstorage.aws.DockerAwsS3Singleton;
 import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
 import com.google.inject.Module;
+import com.google.inject.util.Modules;
 
 public class AwsS3BlobStoreExtension implements GuiceModuleTestExtension {
 
@@ -35,10 +35,6 @@ public class AwsS3BlobStoreExtension implements 
GuiceModuleTestExtension {
         this.awsS3TestRule = new DockerAwsS3TestRule();
     }
 
-    public AwsS3BlobStoreExtension(PayloadCodecFactory payloadCodecFactory) {
-        this.awsS3TestRule = new DockerAwsS3TestRule(payloadCodecFactory);
-    }
-
     @Override
     public void beforeAll(ExtensionContext extensionContext) {
         ensureAwsS3started();
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
index 03fc807..2452d41 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
@@ -28,7 +28,7 @@ class BlobStoreCacheModulesChooserTest {
     @Test
     void chooseModulesShouldReturnCacheDisabledModuleWhenCacheDisabled() {
         
assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication()))
             .hasSize(1)
@@ -39,7 +39,7 @@ class BlobStoreCacheModulesChooserTest {
     @Test
     void 
chooseModulesShouldReturnCacheEnabledAndCassandraCacheModulesWhenCacheEnabled() 
{
         
assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .enableCache()
                 .deduplication()))
             .hasSize(2)
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
index 731d6a7..2625a3c 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
@@ -33,7 +33,7 @@ import nl.jqno.equalsverifier.EqualsVerifier;
 
 class BlobStoreConfigurationTest {
 
-    private static final String OBJECT_STORAGE = "objectstorage";
+    private static final String S3 = "s3";
     private static final String CASSANDRA = "cassandra";
 
     @Test
@@ -92,9 +92,9 @@ class BlobStoreConfigurationTest {
     }
 
     @Test
-    void 
provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsObjectStorage()
 throws Exception {
+    void 
provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsS3()
 throws Exception {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("deduplication.enable", "true");
         FakePropertiesProvider propertyProvider = 
FakePropertiesProvider.builder()
             .register(ConfigurationComponent.NAME, configuration)
@@ -102,7 +102,7 @@ class BlobStoreConfigurationTest {
 
         assertThat(parse(propertyProvider))
             .isEqualTo(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication());
     }
@@ -129,7 +129,7 @@ class BlobStoreConfigurationTest {
 
         assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration))
             .isInstanceOf(IllegalStateException.class)
-            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, objectstorage");
+            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, s3");
     }
 
     @Test
@@ -139,7 +139,7 @@ class BlobStoreConfigurationTest {
 
         assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration))
             .isInstanceOf(IllegalStateException.class)
-            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, objectstorage");
+            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, s3");
     }
 
     @Test
@@ -149,7 +149,7 @@ class BlobStoreConfigurationTest {
 
         assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration))
             .isInstanceOf(IllegalStateException.class)
-            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, objectstorage");
+            .hasMessage("implementation property is missing please use one of 
supported values in: cassandra, s3");
     }
 
     @Test
@@ -159,7 +159,7 @@ class BlobStoreConfigurationTest {
 
         assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration))
             .isInstanceOf(IllegalArgumentException.class)
-            .hasMessage("un_supported is not a valid name of BlobStores, 
please use one of supported values in: cassandra, objectstorage");
+            .hasMessage("un_supported is not a valid name of BlobStores, 
please use one of supported values in: cassandra, s3");
     }
 
     @Test
@@ -176,28 +176,29 @@ class BlobStoreConfigurationTest {
     }
 
     @Test
-    void fromShouldReturnConfigurationWhenBlobStoreImplIsObjectStorage() {
+    void fromShouldReturnConfigurationWhenBlobStoreImplIsS3() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", OBJECT_STORAGE);
+        configuration.addProperty("implementation", S3);
         configuration.addProperty("deduplication.enable", "true");
+
         assertThat(
             BlobStoreConfiguration.from(configuration)
                 .getImplementation()
                 .getName())
-            .isEqualTo(OBJECT_STORAGE);
+            .isEqualTo(S3);
     }
 
     @Test
     void 
fromShouldReturnConfigurationWhenBlobStoreImplIsSupportedAndCaseInsensitive() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", "OBjecTStorAGE");
+        configuration.addProperty("implementation", "CAssAnDrA");
         configuration.addProperty("deduplication.enable", "true");
 
         assertThat(
             BlobStoreConfiguration.from(configuration)
                 .getImplementation()
                 .getName())
-            .isEqualTo(OBJECT_STORAGE);
+            .isEqualTo(CASSANDRA);
     }
 
     @Test
@@ -216,7 +217,7 @@ class BlobStoreConfigurationTest {
     @Test
     void cacheEnabledShouldBeTrueWhenSpecified() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("cache.enable", true);
         configuration.addProperty("deduplication.enable", "true");
 
@@ -227,7 +228,7 @@ class BlobStoreConfigurationTest {
     @Test
     void cacheEnabledShouldBeFalseWhenSpecified() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("cache.enable", false);
         configuration.addProperty("deduplication.enable", "true");
 
@@ -238,7 +239,7 @@ class BlobStoreConfigurationTest {
     @Test
     void cacheEnabledShouldDefaultToFalse() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("deduplication.enable", "true");
 
         assertThat(BlobStoreConfiguration.from(configuration).cacheEnabled())
@@ -248,7 +249,7 @@ class BlobStoreConfigurationTest {
     @Test
     void storageStrategyShouldBePassthroughWhenDeduplicationDisabled() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("deduplication.enable", "false");
 
         
assertThat(BlobStoreConfiguration.from(configuration).storageStrategy())
@@ -258,7 +259,7 @@ class BlobStoreConfigurationTest {
     @Test
     void storageStrategyShouldBeDeduplicationWhenDeduplicationEnabled() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
         configuration.addProperty("deduplication.enable", "true");
 
         
assertThat(BlobStoreConfiguration.from(configuration).storageStrategy())
@@ -268,7 +269,7 @@ class BlobStoreConfigurationTest {
     @Test
     void buildingConfigurationShouldThrowWhenDeduplicationPropertieIsOmitted() 
{
         PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName());
+        configuration.addProperty("implementation", 
BlobStoreConfiguration.BlobStoreImplName.S3.getName());
 
         assertThatThrownBy(() -> 
BlobStoreConfiguration.from(configuration)).isInstanceOf(IllegalStateException.class)
                 .hasMessage("deduplication.enable property is missing please 
use one of the supported values in: true, false\n" +
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
index 65735b5..ad21dd9 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
@@ -28,7 +28,7 @@ class BlobStoreModulesChooserTest {
     @Test
     void 
provideBlobStoreShouldReturnObjectStoreBlobStoreWhenObjectStoreConfigured() {
         
assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication()))
             .first()
diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
index 04a4753..ed64f5e 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
@@ -25,6 +25,7 @@ import org.apache.james.eventsourcing.eventstore.History;
 import org.apache.james.eventsourcing.eventstore.memory.InMemoryEventStore;
 import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
+import 
org.apache.james.modules.blobstore.BlobStoreConfiguration.BlobStoreImplName;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -42,7 +43,7 @@ public class StorageStrategyValidationEventSourcingSystemTest 
{
 
     @Test
     void startingForTheFirstTimeShouldSucceedWhenPassThrough() {
-        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .passthrough());
 
@@ -51,7 +52,7 @@ public class StorageStrategyValidationEventSourcingSystemTest 
{
 
     @Test
     void startingForTheFirstTimeShouldSucceedWhenDeduplication() {
-        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .deduplication());
 
@@ -60,11 +61,11 @@ public class 
StorageStrategyValidationEventSourcingSystemTest {
 
     @Test
     void startingShouldSucceedWhenTurningOnDeduplication() {
-        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .passthrough());
 
-        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .deduplication());
 
@@ -73,11 +74,11 @@ public class 
StorageStrategyValidationEventSourcingSystemTest {
 
     @Test
     void startingShouldFailWhenTurningOffDeduplication() {
-        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .deduplication());
 
-        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        StartUpCheck.CheckResult checkResult = 
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .passthrough());
 
@@ -86,10 +87,10 @@ public class 
StorageStrategyValidationEventSourcingSystemTest {
 
     @Test
     void validatingSeveralTimeTheSameStrategyShouldNotAddEventsToTheHistory() {
-        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .deduplication());
-        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE)
+        
testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
             .deduplication());
 
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml 
b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
index 9767973..588ae50 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
@@ -51,29 +51,15 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git 
a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
 
b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
index be9e201..997de9e 100644
--- 
a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
+++ 
b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
@@ -30,7 +30,6 @@ import org.apache.commons.net.imap.IMAPClient;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
-import org.apache.james.modules.SwiftBlobStoreExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
@@ -55,25 +54,11 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
 
     @Nested
     @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-    class WithSwift implements ContractSuite {
-        @RegisterExtension
-        JamesServerExtension testExtension = 
baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder()
-                    .objectStorage()
-                    .disableCache()
-                    .deduplication())
-            .extension(new SwiftBlobStoreExtension())
-            .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
-            .build();
-    }
-
-    @Nested
-    @TestInstance(TestInstance.Lifecycle.PER_CLASS)
     class WithAwsS3 implements ContractSuite {
         @RegisterExtension
-        JamesServerExtension testExtension = 
baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder()
-                    .objectStorage()
-                    .disableCache()
-                    .deduplication())
+        JamesServerExtension testExtension = 
baseJamesServerExtensionBuilder(BlobStoreConfiguration.s3()
+                .disableCache()
+                .passthrough())
             .extension(new AwsS3BlobStoreExtension())
             .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
@@ -81,7 +66,7 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
 
     @Nested
     @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-    class WithoutSwiftOrAwsS3 implements ContractSuite {
+    class WithCassandra implements ContractSuite {
         @RegisterExtension
         JamesServerExtension testExtension = 
baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder()
                 .cassandra()
diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml
index cbae105..1e37151 100644
--- a/server/container/guice/pom.xml
+++ b/server/container/guice/pom.xml
@@ -37,7 +37,7 @@
         <module>blob-api-guice</module>
         <module>blob-export-guice</module>
         <module>blob-memory-guice</module>
-        <module>blob-objectstorage-guice</module>
+        <module>blob-s3-guice</module>
         <module>cassandra-guice</module>
         <module>cassandra-ldap-guice</module>
         <module>cassandra-rabbitmq-guice</module>
diff --git 
a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
 
b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
index 5b3bfc1..ccb1b97 100644
--- 
a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
+++ 
b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
@@ -88,34 +88,20 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3</artifactId>
+            <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
-            <type>test-jar</type>
+            <artifactId>blob-s3-guice</artifactId>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
index 3098f81..682a117 100644
--- 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
+++ 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
@@ -53,29 +53,15 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
-            <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.inject.extensions</groupId>
-                    <artifactId>guice-multibindings</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
index cecf617..512cc61 100644
--- 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
+++ 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
@@ -43,7 +43,7 @@ public class RabbitMQAwsS3SendMDNMethodTest extends 
SendMDNMethodTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
index 97a9793..e68eb91 100644
--- 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
+++ 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
@@ -42,7 +42,7 @@ class RabbitMQAwsS3SpamAssassinContractTest implements 
SpamAssassinContract {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java
 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java
index 0ea2135..e581eca 100644
--- 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java
+++ 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java
@@ -18,12 +18,10 @@
  ****************************************************************/
 package org.apache.james.jmap.rabbitmq.cucumber.awss3;
 
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
 import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
 
 public class CucumberAwsS3Singleton {
 
     public static DockerAwsS3TestRule awsS3Server = new DockerAwsS3TestRule();
-    public static DockerAwsS3TestRule encryptedAwsS3Server = new 
DockerAwsS3TestRule(PayloadCodecFactory.AES256);
 }
 
diff --git 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
index e588f66..c549a76 100644
--- 
a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
+++ 
b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
@@ -57,7 +57,7 @@ public class RabbitMQAwsS3Stepdefs {
     private final DockerCassandraRule cassandraServer = 
CucumberCassandraSingleton.cassandraServer;
     private final DockerElasticSearchRule elasticSearch = 
CucumberElasticSearchSingleton.elasticSearch;
     private final DockerRabbitMQRule rabbitMQServer = 
CucumberRabbitMQSingleton.rabbitMQServer;
-    private final DockerAwsS3TestRule swiftServer = 
CucumberAwsS3Singleton.awsS3Server;
+    private final DockerAwsS3TestRule awsS3Server = 
CucumberAwsS3Singleton.awsS3Server;
 
     @Inject
     private RabbitMQAwsS3Stepdefs(MainStepdefs mainStepdefs, ImapStepdefs 
imapStepdefs) {
@@ -69,7 +69,7 @@ public class RabbitMQAwsS3Stepdefs {
     public void init() throws Exception {
         cassandraServer.start();
         rabbitMQServer.start();
-        swiftServer.start();
+        awsS3Server.start();
         elasticSearch.start();
 
         temporaryFolder.create();
@@ -78,7 +78,7 @@ public class RabbitMQAwsS3Stepdefs {
             .workingDirectory(temporaryFolder.newFolder())
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -88,7 +88,7 @@ public class RabbitMQAwsS3Stepdefs {
             .overrideWith(new TestJMAPServerModule())
                 .overrideWith(new 
TestDockerESMetricReporterModule(elasticSearch.getDockerEs().getHttpHost()))
                 .overrideWith(new 
TestRabbitMQModule(rabbitMQServer.dockerRabbitMQ()))
-                .overrideWith(swiftServer.getModule())
+                .overrideWith(awsS3Server.getModule())
                 .overrideWith(elasticSearch.getModule())
                 .overrideWith(cassandraServer.getModule())
                 .overrideWith(binder -> Multibinder.newSetBinder(binder, 
CleanupTasksPerformer.CleanupTask.class).addBinding().to(CassandraTruncateTableTask.class))
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
index 0e79ba2..c1092ac 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
@@ -52,7 +52,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
             <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
@@ -65,7 +65,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
             <!-- JCloud switch relies on incompatible guice 3.3.0 for 
multibindings -->
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
index 91e8dda..7d9767e 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
@@ -40,7 +40,7 @@ class DistributedAuthenticationTest implements 
AuthenticationContract {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
index 79ff634..80f0194 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
@@ -41,7 +41,7 @@ public class DistributedEchoMethodTest implements 
EchoMethodContract {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
index d6797a5..01af00e 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
@@ -45,7 +45,7 @@ public class DistributedEmailGetMethodTest implements 
EmailGetMethodContract {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .disableCache()
                 .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
index 71ce9f4..9f6c24f 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
@@ -41,7 +41,7 @@ public class DistributedEmailQueryMethodTest implements 
EmailQueryMethodContract
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
index 2ccd522..5de500d 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
@@ -43,7 +43,7 @@ public class DistributedMailboxGetMethodTest implements 
MailboxGetMethodContract
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
index 44d55ac..da6dbde 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
@@ -43,7 +43,7 @@ public class DistributedMailboxSetMethodTest implements 
MailboxSetMethodContract
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
index f86bad6..b278584 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
@@ -39,7 +39,7 @@ public class DistributedProvisioningTest implements 
ProvisioningContract {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .disableCache()
                 .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
index 70d6410..ae801b8 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
@@ -39,9 +39,7 @@ public class DistributedSessionRouteTest implements 
SessionRoutesContract {
         CassandraRabbitMQJamesConfiguration.builder()
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
-            .blobStore(BlobStoreConfiguration
-                .builder()
-                .objectStorage()
+            .blobStore(BlobStoreConfiguration.s3()
                 .disableCache()
                 .passthrough())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
index 0219a41..b318e97 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
@@ -39,7 +39,7 @@ public class DistributedVacationResponseGetMethodTest 
implements VacationRespons
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .disableCache()
                 .deduplication())
             .build())
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
index f6e314f..57a746a 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
@@ -39,7 +39,7 @@ public class DistributedVacationResponseSetMethodTest 
implements VacationRespons
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .disableCache()
                 .deduplication())
             .build())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
index 6904304..8d603f2 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
@@ -53,13 +53,13 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage</artifactId>
+            <artifactId>blob-s3</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>blob-objectstorage-guice</artifactId>
+            <artifactId>blob-s3-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
index bdcfa96..e197c56 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
@@ -129,7 +129,7 @@ class ConsistencyTasksIntegrationTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -542,4 +542,4 @@ class ConsistencyTasksIntegrationTest {
 
         assertThat(testIMAPClient.readFirstMessage()).contains(MESSAGE);
     }
-}
\ No newline at end of file
+}
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
index 603e008..f370286 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
@@ -117,7 +117,7 @@ class FixingGhostMailboxTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
index 0ce6b26..31f367f 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
@@ -45,7 +45,7 @@ class RabbitMQAuthorizedEndpointsTest extends 
AuthorizedEndpointsTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -59,4 +59,4 @@ class RabbitMQAuthorizedEndpointsTest extends 
AuthorizedEndpointsTest {
             .overrideWith(new WebadminIntegrationTestModule()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
-}
\ No newline at end of file
+}
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
index a58794b..840f226 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
@@ -207,7 +207,7 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
index 3ecfa00..187e89c 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
@@ -41,7 +41,7 @@ class RabbitMQFastViewProjectionHealthCheckIntegrationTest 
extends FastViewProje
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
index cdf1848..dbeaae4 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
@@ -41,7 +41,7 @@ class RabbitMQForwardIntegrationTest extends 
ForwardIntegrationTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
index 1a96a6a..a96b4a3 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
@@ -43,7 +43,7 @@ class RabbitMQJwtFilterIntegrationTest extends 
JwtFilterIntegrationTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
index 8bbb952..11ed8a6 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
@@ -49,7 +49,6 @@ import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
 import org.apache.james.util.Port;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
@@ -88,7 +87,7 @@ class RabbitMQReindexingWithEventDeadLettersTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -96,7 +95,7 @@ class RabbitMQReindexingWithEventDeadLettersTest {
         .extension(dockerElasticSearch)
         .extension(new CassandraExtension())
         .extension(new RabbitMQExtension())
-        .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
+        .extension(new AwsS3BlobStoreExtension())
         .server(configuration -> 
CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
             .overrideWith(new WebadminIntegrationTestModule())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
index 29cf1d1..45c8fc5 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
@@ -71,7 +71,7 @@ class RabbitMQUnauthorizedEndpointsTest extends 
UnauthorizedEndpointsTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                .objectStorage()
+                .s3()
                 .disableCache()
                 .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
index 5f8a1fa..f410212 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
@@ -65,7 +65,7 @@ class RabbitMQWebAdminServerIntegrationTest extends 
WebAdminServerIntegrationTes
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
@@ -251,4 +251,4 @@ class RabbitMQWebAdminServerIntegrationTest extends 
WebAdminServerIntegrationTes
             .body(containsString("\"tags\":[\"Cassandra Mappings 
Operations\"]"))
             .body(containsString("{\"name\":\"MessageIdReIndexing\"}"));
     }
-}
\ No newline at end of file
+}
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index 6ef4410..84b1c7e 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -104,7 +104,7 @@ class 
RabbitMQWebAdminServerTaskSerializationIntegrationTest {
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
index df878ac..82a3123 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
@@ -50,7 +50,7 @@ class RabbitMQDeletedMessageVaultIntegrationTest extends 
DeletedMessageVaultInte
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
index bdd5521..1a7f13f 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
@@ -45,7 +45,7 @@ class RabbitMQLinshareBlobExportMechanismIntegrationTest 
extends LinshareBlobExp
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
+                    .s3()
                     .disableCache()
                     .deduplication())
             .searchConfiguration(SearchConfiguration.elasticSearch())


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to