diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
index 2e277f0..4614ccf 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
@@ -86,6 +86,40 @@
         }
     }
 
+    // Revise these three methods when MRESOLVER-233 is delivered
+    @Override
+    public Artifact setVersion( String version )
+    {
+         String current = getVersion();
+         if ( current.equals( version ) || ( version == null && current.length() <= 0 ) )
+         {
+             return this;
+         }
+        return new RelocatedArtifact( artifact, groupId, artifactId, version );
+    }
+
+    @Override
+    public Artifact setFile( File file )
+    {
+        File current = getFile();
+        if ( Objects.equals( current, file ) )
+        {
+             return this;
+        }
+        return new RelocatedArtifact( artifact.setFile( file ), groupId, artifactId, version );
+    }
+
+    @Override
+    public Artifact setProperties( Map<String, String> properties )
+    {
+        Map<String, String> current = getProperties();
+        if ( current.equals( properties ) || ( properties == null && current.isEmpty() ) )
+        {
+             return this;
+        }
+        return new RelocatedArtifact( artifact.setProperties( properties ), groupId, artifactId, version );
+    }
+
     public String getClassifier()
     {
         return artifact.getClassifier();
