diff --git a/src/main/java/org/eclipse/aether/ant/AntModelResolver.java b/src/main/java/org/eclipse/aether/ant/AntModelResolver.java
index 9bd70d6..c964feb 100644
--- a/src/main/java/org/eclipse/aether/ant/AntModelResolver.java
+++ b/src/main/java/org/eclipse/aether/ant/AntModelResolver.java
@@ -90,11 +90,11 @@
 
     static RemoteRepository convert( Repository repository )
     {
-        RemoteRepository result =
-            new RemoteRepository( repository.getId(), repository.getLayout(), repository.getUrl() );
-        result.setPolicy( true, convert( repository.getSnapshots() ) );
-        result.setPolicy( false, convert( repository.getReleases() ) );
-        return result;
+        RemoteRepository.Builder builder =
+            new RemoteRepository.Builder( repository.getId(), repository.getLayout(), repository.getUrl() );
+        builder.setSnapshotPolicy( convert( repository.getSnapshots() ) );
+        builder.setReleasePolicy( convert( repository.getReleases() ) );
+        return builder.build();
     }
 
     private static RepositoryPolicy convert( org.apache.maven.model.RepositoryPolicy policy )
diff --git a/src/main/java/org/eclipse/aether/ant/AntRepoSys.java b/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
index c20daf7..870e9c8 100644
--- a/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
+++ b/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
@@ -344,7 +344,7 @@
         for ( org.apache.maven.settings.Proxy proxy : settings.getProxies() )
         {
             AuthenticationBuilder auth = new AuthenticationBuilder();
-            auth.username( proxy.getUsername() ).password( proxy.getPassword() );
+            auth.addUsername( proxy.getUsername() ).addPassword( proxy.getPassword() );
             selector.add( new org.eclipse.aether.repository.Proxy( proxy.getProtocol(), proxy.getHost(),
                                                                    proxy.getPort(), auth.build() ),
                           proxy.getNonProxyHosts() );
@@ -397,8 +397,8 @@
         for ( Server server : settings.getServers() )
         {
             AuthenticationBuilder auth = new AuthenticationBuilder();
-            auth.username( server.getUsername() ).password( server.getPassword() );
-            auth.privateKey( server.getPrivateKey(), server.getPassphrase() );
+            auth.addUsername( server.getUsername() ).addPassword( server.getPassword() );
+            auth.addPrivateKey( server.getPrivateKey(), server.getPassphrase() );
             selector.add( server.getId(), auth.build() );
         }
 
diff --git a/src/main/java/org/eclipse/aether/ant/util/ConverterUtils.java b/src/main/java/org/eclipse/aether/ant/util/ConverterUtils.java
index 60cb465..823a87b 100644
--- a/src/main/java/org/eclipse/aether/ant/util/ConverterUtils.java
+++ b/src/main/java/org/eclipse/aether/ant/util/ConverterUtils.java
@@ -70,8 +70,8 @@
             return null;
         }
         AuthenticationBuilder authBuilder = new AuthenticationBuilder();
-        authBuilder.username( auth.getUsername() ).password( auth.getPassword() );
-        authBuilder.privateKey( auth.getPrivateKeyFile(), auth.getPassphrase() );
+        authBuilder.addUsername( auth.getUsername() ).addPassword( auth.getPassword() );
+        authBuilder.addPrivateKey( auth.getPrivateKeyFile(), auth.getPassphrase() );
         return authBuilder.build();
     }
 
@@ -91,9 +91,11 @@
                                                                        RepositorySystemSession session )
     {
         org.eclipse.aether.repository.RemoteRepository result = toRepository( repo );
-        result.setAuthentication( session.getAuthenticationSelector().getAuthentication( result ) );
-        result.setProxy( session.getProxySelector().getProxy( result ) );
-        return result;
+        org.eclipse.aether.repository.RemoteRepository.Builder builder =
+            new org.eclipse.aether.repository.RemoteRepository.Builder( result );
+        builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( result ) );
+        builder.setProxy( session.getProxySelector().getProxy( result ) );
+        return builder.build();
     }
 
     private static org.eclipse.aether.graph.Exclusion toExclusion( Exclusion exclusion )
@@ -173,17 +175,14 @@
 
     private static org.eclipse.aether.repository.RemoteRepository toRepository( RemoteRepository repo )
     {
-        org.eclipse.aether.repository.RemoteRepository result = new org.eclipse.aether.repository.RemoteRepository();
-        result.setId( repo.getId() );
-        result.setContentType( repo.getType() );
-        result.setUrl( repo.getUrl() );
-        result.setPolicy( true,
-                          toPolicy( repo.getSnapshotPolicy(), repo.isSnapshots(), repo.getUpdates(),
-                                    repo.getChecksums() ) );
-        result.setPolicy( false,
-                          toPolicy( repo.getReleasePolicy(), repo.isReleases(), repo.getUpdates(), repo.getChecksums() ) );
-        result.setAuthentication( toAuthentication( repo.getAuthentication() ) );
-        return result;
+        org.eclipse.aether.repository.RemoteRepository.Builder builder =
+            new org.eclipse.aether.repository.RemoteRepository.Builder( repo.getId(), repo.getType(), repo.getUrl() );
+        builder.setSnapshotPolicy( toPolicy( repo.getSnapshotPolicy(), repo.isSnapshots(), repo.getUpdates(),
+                                             repo.getChecksums() ) );
+        builder.setReleasePolicy( toPolicy( repo.getReleasePolicy(), repo.isReleases(), repo.getUpdates(),
+                                            repo.getChecksums() ) );
+        builder.setAuthentication( toAuthentication( repo.getAuthentication() ) );
+        return builder.build();
     }
 
     public static List<org.eclipse.aether.repository.RemoteRepository> toRepositories( Project project,
