diff --git a/maven-release-manager/pom.xml b/maven-release-manager/pom.xml
index b8b26b5..6d970d7 100644
--- a/maven-release-manager/pom.xml
+++ b/maven-release-manager/pom.xml
@@ -200,7 +200,7 @@
       <plugin>
         <groupId>org.codehaus.modello</groupId>
         <artifactId>modello-maven-plugin</artifactId>
-        <version>1.7</version>
+        <version>1.9.1</version>
         <executions>
           <execution>
             <goals>
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
index 01f8952..6fd4cb6 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
@@ -241,7 +241,6 @@
     {
         Map<String, String> mappedVersions = getNextVersionMap( releaseDescriptor );
         Map<String, String> originalVersions = getOriginalVersionMap( releaseDescriptor, reactorProjects, simulate );
-        @SuppressWarnings( "unchecked" )
         Map<String, Map<String, String>> resolvedSnapshotDependencies =
             releaseDescriptor.getResolvedSnapshotDependencies();
         Model model = project.getModel();
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
index 0265dfe..fbb0749 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
@@ -425,7 +425,6 @@
         return releaseDescriptor.getOriginalVersions( reactorProjects );
     }
 
-    @SuppressWarnings( "unchecked" )
     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
     {
         return releaseDescriptor.getReleaseVersions();
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
index 7373c69..985b9cf 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
@@ -134,7 +134,7 @@
         {
             // Must get default version from mapped versions, as the project will be the incorrect snapshot
             String key = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
-            String releaseVersion = (String) releaseDescriptor.getReleaseVersions().get( key );
+            String releaseVersion = releaseDescriptor.getReleaseVersions().get( key );
             if ( releaseVersion == null )
             {
                 throw new ReleaseExecutionException( "Project tag cannot be selected if version is not yet mapped" );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
index 4ae295a..443d9fd 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
@@ -337,7 +337,7 @@
         String defaultVersion = releaseDescriptor.getDefaultDevelopmentVersion();
         if ( StringUtils.isEmpty( defaultVersion ) )
         {
-            defaultVersion = ( String ) releaseDescriptor.getDevelopmentVersions().get( projectId );
+            defaultVersion = releaseDescriptor.getDevelopmentVersions().get( projectId );
         }
         return defaultVersion;
     }
@@ -347,7 +347,7 @@
         String nextVersion = releaseDescriptor.getDefaultReleaseVersion();
         if ( StringUtils.isEmpty( nextVersion ) )
         {
-            nextVersion = ( String ) releaseDescriptor.getReleaseVersions().get( projectId );
+            nextVersion = releaseDescriptor.getReleaseVersions().get( projectId );
         }
         return nextVersion;
     }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
index 2a44539..2ed4376 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
@@ -67,7 +67,6 @@
         return releaseDescriptor.getOriginalVersions( reactorProjects );
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
     {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
index 0686230..1907e6a 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
@@ -250,7 +250,6 @@
         return releaseDescriptor.getOriginalVersions( reactorProjects );
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
     {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForDevelopmentPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForDevelopmentPhase.java
index 0bd27bc..01bd7ef 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForDevelopmentPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForDevelopmentPhase.java
@@ -59,7 +59,6 @@
             Scm scmRoot = modelTarget.getScm();
             if ( scmRoot != null )
             {
-                @SuppressWarnings( "unchecked" )
                 Map<String, Scm> originalScmInfo = releaseDescriptor.getOriginalScmInfo();
                 // check containsKey, not == null, as we store null as a value
                 if ( !originalScmInfo.containsKey( projectId ) )
@@ -96,7 +95,6 @@
         }
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
     protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
                                                          List<MavenProject> reactorProjects, boolean simulate )
@@ -106,7 +104,6 @@
             : releaseDescriptor.getReleaseVersions();
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
     {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
index 5ad3af5..6e2b47e 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
@@ -244,7 +244,6 @@
         return releaseDescriptor.getOriginalVersions( reactorProjects );
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
     {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/VersionInfo.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/VersionInfo.java
index 46ae13b..de2c994 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/VersionInfo.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/VersionInfo.java
@@ -20,7 +20,7 @@
  */
 
 /**
- * @todo this has an overlap with ArtifactVersion in maven-artifact - would be good to migrate this there.
+ * Represent the different version representations during the release-prepare phase
  */
 public interface VersionInfo
     extends Comparable<VersionInfo>
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index 3c5304b..c430cb1 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -162,42 +162,42 @@
           </description>
         </field>
         <!-- Maven Information -->
-        <field>
-          <name>releaseVersions</name>
-          <version>1.0.0+</version>
-          <type>Map</type>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <description>
-            A map of projects to versions to use when releasing the given projects.
-          </description>
-        </field>
-        <field>
-          <name>developmentVersions</name>
-          <version>1.0.0+</version>
-          <type>Map</type>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <description>
-            A map of projects to versions to use when moving the given projects back into development after release.
-          </description>
-        </field>
-        <field>
-          <name>resolvedSnapshotDependencies</name>
-          <version>1.0.0+</version>
-          <type>Map</type>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <description>
-            A map of resolved snapshot dependencies versions.
-          </description>
-        </field>
+<!--         <field> -->
+<!--           <name>releaseVersions</name> -->
+<!--           <version>1.0.0+</version> -->
+<!--           <type>Map</type> -->
+<!--           <association> -->
+<!--             <type>String</type> -->
+<!--             <multiplicity>*</multiplicity> -->
+<!--           </association> -->
+<!--           <description> -->
+<!--             A map of projects to versions to use when releasing the given projects. -->
+<!--           </description> -->
+<!--         </field> -->
+<!--         <field> -->
+<!--           <name>developmentVersions</name> -->
+<!--           <version>1.0.0+</version> -->
+<!--           <type>Map</type> -->
+<!--           <association> -->
+<!--             <type>String</type> -->
+<!--             <multiplicity>*</multiplicity> -->
+<!--           </association> -->
+<!--           <description> -->
+<!--             A map of projects to versions to use when moving the given projects back into development after release. -->
+<!--           </description> -->
+<!--         </field> -->
+<!--         <field> -->
+<!--           <name>resolvedSnapshotDependencies</name> -->
+<!--           <version>1.0.0+</version> -->
+<!--           <type>Map</type> -->
+<!--           <association> -->
+<!--             <type>String</type> -->
+<!--             <multiplicity>*</multiplicity> -->
+<!--           </association> -->
+<!--           <description> -->
+<!--             A map of resolved snapshot dependencies versions. -->
+<!--           </description> -->
+<!--         </field> -->
         <field>
           <name>updateDependencies</name>
           <version>1.0.0+</version>
@@ -217,18 +217,18 @@
             If set to true, this will set the property "performRelease" to true.
           </description>
         </field>
-        <field>
-          <name>originalScmInfo</name>
-          <version>1.0.0+</version>
-          <type>Map</type>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <description>
-            A map of projects to original SCM information.
-          </description>
-        </field>
+<!--         <field> -->
+<!--           <name>originalScmInfo</name> -->
+<!--           <version>1.0.0+</version> -->
+<!--           <type>Map</type> -->
+<!--           <association> -->
+<!--             <type>String</type> -->
+<!--             <multiplicity>*</multiplicity> -->
+<!--           </association> -->
+<!--           <description> -->
+<!--             A map of projects to original SCM information. -->
+<!--           </description> -->
+<!--         </field> -->
         <field>
           <name>workingDirectory</name>
           <version>1.0.0+</version>
@@ -532,6 +532,129 @@
     public static final String ORIGINAL_VERSION = "original";
 
     /**
+     * Field resolvedSnapshotDependencies.
+     */
+    private java.util.Map<String, java.util.Map<String, String>> resolvedSnapshotDependencies;
+
+    /**
+     * Field releaseVersions.
+     */
+    private java.util.Map<String, String> releaseVersions;
+
+    /**
+     * Field developmentVersions.
+     */
+    private java.util.Map<String, String> developmentVersions;
+    
+    /**
+     * Field originalScmInfo.
+     */
+    private java.util.Map<String, org.apache.maven.model.Scm> originalScmInfo;
+    
+    /**
+     * Method getResolvedSnapshotDependencies.
+     * 
+     * @return Map
+     */
+    public java.util.Map<String, java.util.Map<String, String>> getResolvedSnapshotDependencies()
+    {
+        if ( this.resolvedSnapshotDependencies == null )
+        {
+            this.resolvedSnapshotDependencies = new java.util.HashMap<>();
+        }
+
+        return this.resolvedSnapshotDependencies;
+    } //-- java.util.Map<String, java.util.Map<String, String>> getResolvedSnapshotDependencies()
+    
+    /**
+     * Set a map of resolved snapshot dependencies versions.
+     * 
+     * @param resolvedSnapshotDependencies
+     */
+    public void setResolvedSnapshotDependencies( java.util.Map<String, java.util.Map<String, String>> resolvedSnapshotDependencies )
+    {
+        this.resolvedSnapshotDependencies = resolvedSnapshotDependencies;
+    } //-- void setResolvedSnapshotDependencies( java.util.Map<String, java.util.Map<String, String>> )
+
+    /**
+     * Method getReleaseVersions.
+     * 
+     * @return Map
+     */
+    public java.util.Map<String, String> getReleaseVersions()
+    {
+        if ( this.releaseVersions == null )
+        {
+            this.releaseVersions = new java.util.HashMap<>();
+        }
+
+        return this.releaseVersions;
+    } //-- java.util.Map<String, String> getReleaseVersions()
+
+    /**
+     * Method addReleaseVersion.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addReleaseVersion( String key, String value )
+    {
+        getReleaseVersions().put( key, value );
+    } //-- void addReleaseVersion( String, String )
+
+    /**
+     * Method getDevelopmentVersions.
+     * 
+     * @return Map
+     */
+    public java.util.Map<String, String> getDevelopmentVersions()
+    {
+        if ( this.developmentVersions == null )
+        {
+            this.developmentVersions = new java.util.HashMap<>();
+        }
+
+        return this.developmentVersions;
+    } //-- java.util.Map<String, String> getDevelopmentVersions()
+
+    /**
+     * Method addDevelopmentVersion.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addDevelopmentVersion( String key, String value )
+    {
+        getDevelopmentVersions().put( key, value );
+    } //-- void addDevelopmentVersion( String, String )
+
+    /**
+     * Method getOriginalScmInfo.
+     * 
+     * @return Map
+     */
+    public java.util.Map<String, org.apache.maven.model.Scm> getOriginalScmInfo()
+    {
+        if ( this.originalScmInfo == null )
+        {
+            this.originalScmInfo = new java.util.HashMap<>();
+        }
+
+        return this.originalScmInfo;
+    } //-- java.util.Map<Object, String> getOriginalScmInfo()
+    
+    /**
+     * Method addOriginalScmInfo.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addOriginalScmInfo( String key, org.apache.maven.model.Scm value )
+    {
+        getOriginalScmInfo().put( key, value );
+    } //-- void addOriginalScmInfo( String, org.apache.maven.model.Scm )
+
+    /**
      * Map a given snapshot dependency to a specified version from when it is released.
      *
      */
@@ -546,7 +669,7 @@
             assert !resolvedSnapshotDependencies.containsKey( artifactName );
         }
 
-        java.util.Map versionsMap = new java.util.HashMap();
+        java.util.Map versionsMap = new java.util.HashMap<>();
 
         versionsMap.put( DEVELOPMENT_KEY, developmentVersion );
         versionsMap.put( RELEASE_KEY, releaseVersion );
@@ -563,7 +686,7 @@
     {
         if ( releaseVersions == null )
         {
-            releaseVersions = new java.util.HashMap();
+            releaseVersions = new java.util.HashMap<>();
         }
 
         releaseVersions.put( projectId, nextVersion );
@@ -579,7 +702,7 @@
     {
         if ( developmentVersions == null )
         {
-            developmentVersions = new java.util.HashMap();
+            developmentVersions = new java.util.HashMap<>();
         }
 
         developmentVersions.put( projectId, nextVersion );
@@ -595,7 +718,7 @@
     {
         if ( originalScmInfo == null )
         {
-            originalScmInfo = new java.util.HashMap();
+            originalScmInfo = new java.util.HashMap<>();
         }
         else
         {
@@ -621,7 +744,7 @@
     {
         if ( originalVersions == null )
         {
-            originalVersions = new java.util.HashMap();
+            originalVersions = new java.util.HashMap<>();
             for ( org.apache.maven.project.MavenProject project : reactorProjects )
             {
                 originalVersions.put( org.apache.maven.artifact.ArtifactUtils.versionlessKey( project.getGroupId(),
@@ -639,8 +762,8 @@
     {
         if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
         {
-            java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
-            return ( String ) versionMap.get( DEVELOPMENT_KEY );
+            java.util.Map<String, String> versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
+            return versionMap.get( DEVELOPMENT_KEY );
         }
         return null;
     }
@@ -653,8 +776,8 @@
     {
         if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
         {
-            java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
-            return ( String ) versionMap.get( RELEASE_KEY );
+            java.util.Map<String, String> versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
+            return versionMap.get( RELEASE_KEY );
         }
         return null;
     }
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
index fd9311e..ea85a18 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
@@ -262,7 +262,7 @@
         properties.put( "dependency." + dependencyKey + ".development", "1.3-SNAPSHOT" );
         ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
 
-        Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
+        Map<String, String> versionMap = descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
         assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
         assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
     }
@@ -277,10 +277,10 @@
         properties.put( "dependency." + devDependencyKey + ".development", "1.3-SNAPSHOT" );
         ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
 
-        Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
+        Map<String, String> versionMap = descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
         assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
 
-        versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( devDependencyKey );
+        versionMap = descriptor.getResolvedSnapshotDependencies().get( devDependencyKey );
         assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
     }
 
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 e10073f..879b0c1 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
@@ -507,7 +507,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.1-SNAPSHOT", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -551,7 +551,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0-SNAPSHOT", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -581,7 +581,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -611,7 +611,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -645,7 +645,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -689,13 +689,13 @@
         assertTrue( resolvedDependencies.containsKey( "external:artifactId2" ) );
 
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.1-SNAPSHOT", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
         assertEquals( "1.0", versionsMap.get( ReleaseDescriptor.RELEASE_KEY ) );
 
-        versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId2" );
+        versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "external:artifactId2" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.1-SNAPSHOT", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
@@ -1093,7 +1093,7 @@
 
         // validate
         @SuppressWarnings( "rawtypes" )
-        Map versionsMap = (Map) releaseDescriptor.getResolvedSnapshotDependencies().get( "groupId:parent-external" );
+        Map versionsMap = releaseDescriptor.getResolvedSnapshotDependencies().get( "groupId:parent-external" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0-test", versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY ) );
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
index 04d04b8..c67ef62 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
@@ -19,11 +19,7 @@
  * under the License.
  */
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.model.Scm;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -109,10 +105,8 @@
         config.setUpdateDependencies( updateDependencies );
         config.setProjectVersionPolicyId( projectVersionPolicyId );
 
-        Map<String, Scm> originalScmInfo = new HashMap<>();
-        originalScmInfo.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ),
-                             project.getScm() );
-        config.setOriginalScmInfo( originalScmInfo );
+        config.addOriginalScmInfo( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ),
+                                   project.getScm() );
 
         // Create a config containing values from the session properties (ie command line properties with cli).
         ReleaseDescriptor sysPropertiesConfig =
diff --git a/pom.xml b/pom.xml
index 962328f..815149c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,10 +98,6 @@
           <artifactId>apache-rat-plugin</artifactId>
           <configuration>
             <excludes combine.children="append">
-              <!--
-                This module is not yet included
-              -->
-              <exclude>maven-release-policies/maven-release-semver-policy/**/*.*</exclude>
               <exclude>.repository</exclude>
               <exclude>Jenkinsfile</exclude>
             </excludes>
