diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java
index 65c8fdb..2955ddc 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java
@@ -180,7 +180,7 @@
     }
 
     @Override
-    public Map getExecutionsAsMap()
+    public Map<String, PluginExecution>  getExecutionsAsMap()
     {
         throw new UnsupportedOperationException();
     }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java
index 696a0f5..40a82b7 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java
@@ -134,7 +134,7 @@
     }
 
     @Override
-    public Map getReportSetsAsMap()
+    public Map<String, ReportSet> getReportSetsAsMap()
     {
         throw new UnsupportedOperationException();
     }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java
index c7d723c..8896303 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java
@@ -104,7 +104,7 @@
     }
 
     @Override
-    public Map getReportPluginsAsMap()
+    public Map<String, ReportPlugin> getReportPluginsAsMap()
     {
         throw new UnsupportedOperationException();
     }
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
index 11fe6c6..ed68d2b 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/DefaultReleaseManagerTest.java
@@ -563,7 +563,6 @@
     }
 
     // MRELEASE-758: release:perform no longer removes release.properties
-    @SuppressWarnings( "unchecked" )
     public void testPerformWithDefaultClean()
         throws Exception
     {
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
index 2b0dff2..3e80107 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhaseTest.java
@@ -20,7 +20,6 @@
  */
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.anyString;
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java
index 570f9f4..c150589 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhaseTest.java
@@ -35,7 +35,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.maven.Maven;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
@@ -198,7 +197,7 @@
 
         when( scmProviderMock.add( isA( ScmRepository.class ),
                argThat( new IsScmFileSetEquals( fileSet ) ) ) ).thenReturn( new AddScmResult( "...",
-                              Collections.singletonList( new ScmFile( Maven.POMv4, ScmFileStatus.ADDED ) ) ) );
+                              Collections.singletonList( new ScmFile( "pom.xml", ScmFileStatus.ADDED ) ) ) );
 
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.class );
         stub.setScmProvider( scmProviderMock );
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RemoveReleasePomsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RemoveReleasePomsPhaseTest.java
index 964a5cf..ce83960 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RemoveReleasePomsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RemoveReleasePomsPhaseTest.java
@@ -35,7 +35,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.maven.Maven;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
@@ -86,7 +85,7 @@
         ScmProvider scmProviderMock = mock( ScmProvider.class );
         when( scmProviderMock.remove( isA( ScmRepository.class ), argThat( new IsScmFileSetEquals( fileSet ) ),
                                       isA( String.class ) ) ).thenReturn( new RemoveScmResult( "...",
-                                                                                               Collections.singletonList( new ScmFile( Maven.POMv4,
+                                                                                               Collections.singletonList( new ScmFile( "pom.xml",
                                                                                                                                        ScmFileStatus.DELETED ) ) ) );
 
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.class );
@@ -123,7 +122,7 @@
         ScmProvider scmProviderMock = mock( ScmProvider.class );
         when( scmProviderMock.remove( isA( ScmRepository.class ), argThat( new IsScmFileSetEquals( fileSet ) ),
                                       isA( String.class ) ) ).thenReturn( new RemoveScmResult( "...",
-                                                                                               Collections.singletonList( new ScmFile( Maven.POMv4,
+                                                                                               Collections.singletonList( new ScmFile( "pom.xml",
                                                                                                                                        ScmFileStatus.DELETED ) ) ) );
 
         ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.class );
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
index d3377ae..7388987 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
@@ -24,11 +24,9 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeTrue;
 
-import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.Os;
 import org.junit.Test;
 
@@ -224,27 +222,4 @@
 
     }
 
-    private static MavenProject createProject( String basedir )
-    {
-        return createProject( basedir, basedir );
-    }
-
-    private static MavenProject createProject( final String basedirPath, final String basedirCanonicalPath )
-    {
-        return new MavenProject()
-        {
-            @Override
-            public File getBasedir()
-            {
-                return new File( basedirPath )
-                {
-                    @Override
-                    public String getCanonicalPath()
-                    {
-                        return basedirCanonicalPath;
-                    }
-                };
-            }
-        };
-    }
 }
