You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2018/02/10 16:02:53 UTC

[maven-release] 05/21: Prepare proper merging of ReleaseDescriptors

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

rfscholte pushed a commit to branch MRELEASE-998
in repository https://gitbox.apache.org/repos/asf/maven-release.git

commit 1fbe9db740e4d602b250c4c39a10c6afbb48378f
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jan 26 20:46:00 2018 +0100

    Prepare proper merging of ReleaseDescriptors
---
 .../shared/release/DefaultReleaseManager.java      |   2 +
 .../config/PropertiesReleaseDescriptorStore.java   |  10 +-
 .../release/config/ReleaseDescriptorBuilder.java   |  47 ++-
 .../maven/shared/release/config/ReleaseUtils.java  |  78 ++--
 .../release/phase/AbstractRewritePomsPhase.java    | 119 +++---
 .../phase/CheckDependencySnapshotsPhase.java       |  62 ++-
 .../release/phase/GenerateReleasePomsPhase.java    |  58 ++-
 .../shared/release/phase/InputVariablesPhase.java  |   2 +-
 .../shared/release/phase/MapVersionsPhase.java     |   4 +-
 .../release/phase/RewritePomVersionsPhase.java     |  15 +-
 .../release/phase/RewritePomsForBranchPhase.java   |  25 +-
 .../phase/RewritePomsForDevelopmentPhase.java      |  26 +-
 .../release/phase/RewritePomsForReleasePhase.java  |  25 +-
 .../src/main/mdo/release-descriptor.mdo            |  65 +++-
 .../PropertiesReleaseDescriptorStoreTest.java      | 136 +++----
 .../shared/release/config/ReleaseUtilsTest.java    |  16 +-
 .../release/phase/AbstractReleaseTestCase.java     |  11 +
 .../AbstractRewritingReleasePhaseTestCase.java     |   6 +
 .../phase/CheckDependencySnapshotsPhaseTest.java   |  94 ++---
 .../phase/MapDevelopmentVersionPhaseIT.java        |   2 +-
 .../shared/release/phase/MapVersionsPhaseTest.java | 420 ++++++++++-----------
 .../maven/plugins/release/AbstractReleaseMojo.java |  33 +-
 .../maven/plugins/release/BranchReleaseMojo.java   |  20 +-
 .../maven/plugins/release/PrepareReleaseMojo.java  |  20 +-
 .../maven/plugins/release/UpdateVersionsMojo.java  |  20 +-
 .../plugins/release/PerformReleaseMojoTest.java    |  51 ++-
 .../plugins/release/PrepareReleaseMojoTest.java    |   4 +-
 .../plugins/release/StageReleaseMojoTest.java      |   2 +-
 .../stubs/FlatMultiModuleMavenProjectStub.java     |  19 +-
 .../plugins/release/stubs/MavenProjectStub.java    |  18 +
 .../resources/mojos/perform/perform-with-args.xml  |   3 +
 .../mojos/perform/perform-with-flat-structure.xml  |   3 +
 .../mojos/perform/perform-with-multiline-goals.xml |   3 +
 .../resources/mojos/perform/perform-with-scm.xml   |   3 +
 .../mojos/perform/perform-without-site.xml         |   3 +
 .../src/test/resources/mojos/perform/perform.xml   |   3 +
 .../src/test/resources/mojos/prepare/prepare.xml   |   3 +
 .../src/test/resources/mojos/stage/stage.xml       |   3 +
 38 files changed, 765 insertions(+), 669 deletions(-)

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
index ad93daa..cdbfa96 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
@@ -109,6 +109,8 @@ public class DefaultReleaseManager
         {
             config = prepareRequest.getReleaseDescriptor();
         }
+        
+        
 
         Strategy releaseStrategy = getStrategy( config.getReleaseStrategyId() );
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
index a013226..1b6695e 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
@@ -92,8 +92,10 @@ public class PropertiesReleaseDescriptorStore
                 "Error reading properties file '" + file.getName() + "': " + e.getMessage(), e );
         }
 
-        ReleaseDescriptor releaseDescriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties, builder );
 
+        ReleaseDescriptor releaseDescriptor = builder.build();
         if ( mergeDescriptor != null )
         {
             releaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
@@ -290,11 +292,11 @@ public class PropertiesReleaseDescriptorStore
         }
     }
 
-    private void processResolvedDependencies( Properties prop, Map<String, DependencyVersions> resolvedDependencies )
+    private void processResolvedDependencies( Properties prop, Map<String, ReleaseStageVersions> resolvedDependencies )
     {
-        for ( Map.Entry<String, DependencyVersions> currentEntry : resolvedDependencies.entrySet() )
+        for ( Map.Entry<String, ReleaseStageVersions> currentEntry : resolvedDependencies.entrySet() )
         {
-            DependencyVersions versionMap = currentEntry.getValue();
+            ReleaseStageVersions versionMap = currentEntry.getValue();
             
             prop.setProperty( "dependency." + currentEntry.getKey() + ".release",
                               versionMap.getRelease() );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
index 8b1ed6f..30a273f 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
@@ -19,9 +19,11 @@ package org.apache.maven.shared.release.config;
  * under the License.
  */
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.maven.model.Scm;
+import org.apache.maven.project.MavenProject;
 
 /**
  * 
@@ -30,11 +32,47 @@ import org.apache.maven.model.Scm;
  */
 public class ReleaseDescriptorBuilder
 {
-    private final ReleaseDescriptor releaseDescriptor;
+    /**
+     * Hides inner logic of the release descriptor
+     * 
+     * @author Robert Scholte
+     *
+     */
+    private static final class BuilderReleaseDescriptor extends ReleaseDescriptor implements ReleaseDescriptorNew
+    {
+        @Override
+        public void putDependencyReleaseVersion( String artifactKey, String version )
+        {
+            
+        }
+
+        @Override
+        public void putDependencyDevelopmentVersion( String artifactKey, String version )
+        {
+            // TODO Auto-generated method stub
+            
+        }
+
+        @Override
+        public void putProjectReleaseVersion( String projectId, String nextVersion )
+        {
+            // TODO Auto-generated method stub
+            
+        }
+
+        @Override
+        public void putProjectDevelopmentVersion( String projectId, String nextVersion )
+        {
+            // TODO Auto-generated method stub
+            
+        }
+    }
+    
+    private final BuilderReleaseDescriptor releaseDescriptor;
     
     public ReleaseDescriptorBuilder()
     {
-        this.releaseDescriptor = new ReleaseDescriptor();
+        this.releaseDescriptor = new BuilderReleaseDescriptor();
     }
 
     public ReleaseDescriptorBuilder addCheckModificationExclude( String string )
@@ -360,9 +398,8 @@ public class ReleaseDescriptorBuilder
         return releaseDescriptor;
     }
 
-    public void mapReleaseVersion( String string, String string2 )
+    public void putOriginalVersion( String projectKey, String version )
     {
-        // TODO Auto-generated method stub
-        
+        releaseDescriptor.getOriginalVersions( Collections.<MavenProject>emptyList() ).put( projectKey, version );
     }
 }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
index bd7da30..578d2b2 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
@@ -19,6 +19,7 @@ package org.apache.maven.shared.release.config;
  * under the License.
  */
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -26,6 +27,7 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
 
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.release.scm.IdentifiedScm;
 
 /**
@@ -112,6 +114,10 @@ public class ReleaseUtils
         {
             mergeInto.getDevelopmentVersions().putAll( toBeMerged.getDevelopmentVersions() );
         }
+        
+        mergeInto.getOriginalVersions( Collections.<MavenProject>emptyList() ).
+            putAll( toBeMerged.getOriginalVersions( Collections.<MavenProject>emptyList() ) );
+        
         // These must be overridden, as they are not stored
         mergeInto.setWorkingDirectory(
             mergeOverride( mergeInto.getWorkingDirectory(), toBeMerged.getWorkingDirectory() ) );
@@ -146,41 +152,40 @@ public class ReleaseUtils
         return mergeValue != defaultValue ? mergeValue : thisValue;
     }
 
-    public static ReleaseDescriptor copyPropertiesToReleaseDescriptor( Properties properties )
+    public static void copyPropertiesToReleaseDescriptor( Properties properties, ReleaseDescriptorBuilder builder )
     {
-        ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
-        releaseDescriptor.setCompletedPhase( properties.getProperty( "completedPhase" ) );
-        releaseDescriptor.setCommitByProject( Boolean.parseBoolean( properties.getProperty( "commitByProject" ) ) );
-        releaseDescriptor.setScmId( properties.getProperty( "scm.id" ) );
-        releaseDescriptor.setScmSourceUrl( properties.getProperty( "scm.url" ) );
-        releaseDescriptor.setScmUsername( properties.getProperty( "scm.username" ) );
-        releaseDescriptor.setScmPassword( properties.getProperty( "scm.password" ) );
-        releaseDescriptor.setScmPrivateKey( properties.getProperty( "scm.privateKey" ) );
-        releaseDescriptor.setScmPrivateKeyPassPhrase( properties.getProperty( "scm.passphrase" ) );
-        releaseDescriptor.setScmTagBase( properties.getProperty( "scm.tagBase" ) );
-        releaseDescriptor.setScmTagNameFormat( properties.getProperty( "scm.tagNameFormat" ) );
-        releaseDescriptor.setScmBranchBase( properties.getProperty( "scm.branchBase" ) );
-        releaseDescriptor.setScmReleaseLabel( properties.getProperty( "scm.tag" ) );
-        releaseDescriptor.setScmCommentPrefix( properties.getProperty( "scm.commentPrefix" ) );
-        releaseDescriptor.setAdditionalArguments( properties.getProperty( "exec.additionalArguments" ) );
-        releaseDescriptor.setPomFileName( properties.getProperty( "exec.pomFileName" ) );
-        releaseDescriptor.setPreparationGoals( properties.getProperty( "preparationGoals" ) );
-        releaseDescriptor.setCompletionGoals( properties.getProperty( "completionGoals" ) );
-        releaseDescriptor.setProjectVersionPolicyId( properties.getProperty( "projectVersionPolicyId" ) );
-        releaseDescriptor.setProjectNamingPolicyId( properties.getProperty( "projectNamingPolicyId" ) );
-        releaseDescriptor.setReleaseStrategyId( properties.getProperty( "releaseStrategyId" ) );
+        builder.setCompletedPhase( properties.getProperty( "completedPhase" ) );
+        builder.setCommitByProject( Boolean.parseBoolean( properties.getProperty( "commitByProject" ) ) );
+        builder.setScmId( properties.getProperty( "scm.id" ) );
+        builder.setScmSourceUrl( properties.getProperty( "scm.url" ) );
+        builder.setScmUsername( properties.getProperty( "scm.username" ) );
+        builder.setScmPassword( properties.getProperty( "scm.password" ) );
+        builder.setScmPrivateKey( properties.getProperty( "scm.privateKey" ) );
+        builder.setScmPrivateKeyPassPhrase( properties.getProperty( "scm.passphrase" ) );
+        builder.setScmTagBase( properties.getProperty( "scm.tagBase" ) );
+        builder.setScmTagNameFormat( properties.getProperty( "scm.tagNameFormat" ) );
+        builder.setScmBranchBase( properties.getProperty( "scm.branchBase" ) );
+        builder.setScmReleaseLabel( properties.getProperty( "scm.tag" ) );
+        builder.setScmCommentPrefix( properties.getProperty( "scm.commentPrefix" ) );
+        builder.setAdditionalArguments( properties.getProperty( "exec.additionalArguments" ) );
+        builder.setPomFileName( properties.getProperty( "exec.pomFileName" ) );
+        builder.setPreparationGoals( properties.getProperty( "preparationGoals" ) );
+        builder.setCompletionGoals( properties.getProperty( "completionGoals" ) );
+        builder.setProjectVersionPolicyId( properties.getProperty( "projectVersionPolicyId" ) );
+        builder.setProjectNamingPolicyId( properties.getProperty( "projectNamingPolicyId" ) );
+        builder.setReleaseStrategyId( properties.getProperty( "releaseStrategyId" ) );
         String snapshotReleasePluginAllowedStr = properties.getProperty( "exec.snapshotReleasePluginAllowed" );
-        releaseDescriptor.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null
+        builder.setSnapshotReleasePluginAllowed( snapshotReleasePluginAllowedStr == null
                                                                ? false
                                                                : Boolean.valueOf(
                                                                    snapshotReleasePluginAllowedStr ).booleanValue() );
         String remoteTaggingStr = properties.getProperty( "remoteTagging" );
-        releaseDescriptor.setRemoteTagging(
+        builder.setRemoteTagging(
             remoteTaggingStr == null ? false : Boolean.valueOf( remoteTaggingStr ).booleanValue() );
         String pushChanges = properties.getProperty( "pushChanges" );
-        releaseDescriptor.setPushChanges( pushChanges == null ? true : Boolean.valueOf( pushChanges ).booleanValue() );
+        builder.setPushChanges( pushChanges == null ? true : Boolean.valueOf( pushChanges ).booleanValue() );
 
-        loadResolvedDependencies( properties, releaseDescriptor );
+        loadResolvedDependencies( properties, builder );
 
         // boolean properties are not written to the properties file because the value from the caller is always used
 
@@ -189,12 +194,12 @@ public class ReleaseUtils
             String property = (String) i.next();
             if ( property.startsWith( "project.rel." ) )
             {
-                releaseDescriptor.addReleaseVersion( property.substring( "project.rel.".length() ),
+                builder.addReleaseVersion( property.substring( "project.rel.".length() ),
                                                      properties.getProperty( property ) );
             }
             else if ( property.startsWith( "project.dev." ) )
             {
-                releaseDescriptor.addDevelopmentVersion( property.substring( "project.dev.".length() ),
+                builder.addDevelopmentVersion( property.substring( "project.dev.".length() ),
                                                          properties.getProperty( property ) );
             }
             else if ( property.startsWith( "project.scm." ) )
@@ -204,11 +209,11 @@ public class ReleaseUtils
                 {
                     String key = property.substring( "project.scm.".length(), index );
 
-                    if ( !releaseDescriptor.getOriginalScmInfo().containsKey( key ) )
+                    if ( !builder.build().getOriginalScmInfo().containsKey( key ) )
                     {
                         if ( properties.getProperty( "project.scm." + key + ".empty" ) != null )
                         {
-                            releaseDescriptor.addOriginalScmInfo( key, null );
+                            builder.addOriginalScmInfo( key, null );
                         }
                         else
                         {
@@ -220,18 +225,17 @@ public class ReleaseUtils
                             scm.setTag( properties.getProperty( "project.scm." + key + ".tag" ) );
                             scm.setId( properties.getProperty( "project.scm." + key + ".id" ) );
 
-                            releaseDescriptor.addOriginalScmInfo( key, scm );
+                            builder.addOriginalScmInfo( key, scm );
                         }
                     }
                 }
             }
         }
-        return releaseDescriptor;
     }
 
-    private static void loadResolvedDependencies( Properties prop, ReleaseDescriptor descriptor )
+    private static void loadResolvedDependencies( Properties prop, ReleaseDescriptorBuilder builder )
     {
-        Map<String, DependencyVersions> resolvedDependencies = new HashMap<>();
+        Map<String, ReleaseStageVersions> resolvedDependencies = new HashMap<>();
 
         Set entries = prop.entrySet();
         Iterator<Entry<String, String>> iterator = entries.iterator();
@@ -245,7 +249,7 @@ public class ReleaseUtils
 
             if ( propertyName.startsWith( "dependency." ) )
             {
-                DependencyVersions versionMap = new DependencyVersions();
+                ReleaseStageVersions versionMap = new ReleaseStageVersions();
                 String artifactVersionlessKey;
                 int startIndex = "dependency.".length();
                 int endIndex;
@@ -275,7 +279,7 @@ public class ReleaseUtils
                 }
                 else
                 {
-                    versionMap = new DependencyVersions();
+                    versionMap = new ReleaseStageVersions();
                     resolvedDependencies.put( artifactVersionlessKey, versionMap );
                 }
 
@@ -290,7 +294,7 @@ public class ReleaseUtils
             }
         }
 
-        descriptor.setResolvedSnapshotDependencies( resolvedDependencies );
+        builder.build().setResolvedSnapshotDependencies( resolvedDependencies );
     }
 
 }
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 5221e4e..d7414fb 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
@@ -47,7 +47,6 @@ import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.apache.maven.shared.release.scm.IdentifiedScm;
@@ -240,51 +239,42 @@ public abstract class AbstractRewritePomsPhase
                                     ReleaseResult result, boolean simulate )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        Map<String, String> mappedVersions = getNextVersionMap( releaseDescriptor );
-        Map<String, String> originalVersions = getOriginalVersionMap( releaseDescriptor, reactorProjects, simulate );
-        Map<String, DependencyVersions> resolvedSnapshotDependencies =
-            releaseDescriptor.getResolvedSnapshotDependencies();
         Model model = project.getModel();
 
         Properties properties = modelTarget.getProperties();
 
-        String parentVersion = rewriteParent( project, modelTarget, mappedVersions,
-                                              resolvedSnapshotDependencies, originalVersions );
+        String parentVersion = rewriteParent( project, modelTarget, releaseDescriptor, simulate );
 
         String projectId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
 
-        rewriteVersion( modelTarget, mappedVersions, projectId, project, parentVersion );
+        rewriteVersion( modelTarget, releaseDescriptor, projectId, project, parentVersion );
 
         Build buildTarget = modelTarget.getBuild();
         if ( buildTarget != null )
         {
             // profile.build.extensions doesn't exist, so only rewrite project.build.extensions
-            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getExtensions() ), mappedVersions,
-                                     resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                     releaseDescriptor );
+            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getExtensions() ), 
+                                     model, properties, result, releaseDescriptor, simulate );
 
-            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getPlugins() ), mappedVersions,
-                                     resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                     releaseDescriptor );
+            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getPlugins() ), 
+                                     model, properties, result, releaseDescriptor, simulate );
 
             for ( Plugin plugin : buildTarget.getPlugins() )
             {
                 rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ),
-                                         mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
-                                         properties, result, releaseDescriptor );
+                                         model, properties,
+                                         result, releaseDescriptor, simulate );
             }
 
             if ( buildTarget.getPluginManagement() != null )
             {
-                rewriteArtifactVersions( toMavenCoordinates( buildTarget.getPluginManagement().getPlugins() ),
-                                         mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
-                                         properties, result, releaseDescriptor );
+                rewriteArtifactVersions( toMavenCoordinates( buildTarget.getPluginManagement().getPlugins() ), model,
+                                         properties, result, releaseDescriptor, simulate );
 
                 for ( Plugin plugin : buildTarget.getPluginManagement().getPlugins() )
                 {
-                    rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ), mappedVersions,
-                                             resolvedSnapshotDependencies, originalVersions, model, properties,
-                                             result, releaseDescriptor );
+                    rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ), model, properties, result,
+                                             releaseDescriptor, simulate );
                 }
             }
         }
@@ -294,28 +284,24 @@ public abstract class AbstractRewritePomsPhase
             BuildBase profileBuild = profile.getBuild();
             if ( profileBuild != null )
             {
-                rewriteArtifactVersions( toMavenCoordinates( profileBuild.getPlugins() ), mappedVersions,
-                                         resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                         releaseDescriptor );
+                rewriteArtifactVersions( toMavenCoordinates( profileBuild.getPlugins() ), model, properties, result,
+                                         releaseDescriptor, simulate );
 
                 for ( Plugin plugin : profileBuild.getPlugins() )
                 {
-                    rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ),
-                                             mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
-                                             properties, result, releaseDescriptor );
+                    rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ), model, properties, result,
+                                             releaseDescriptor, simulate );
                 }
 
                 if ( profileBuild.getPluginManagement() != null )
                 {
                     rewriteArtifactVersions( toMavenCoordinates( profileBuild.getPluginManagement().getPlugins() ),
-                                             mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
-                                             properties, result, releaseDescriptor );
+                                             model, properties, result, releaseDescriptor, simulate );
 
                     for ( Plugin plugin : profileBuild.getPluginManagement().getPlugins() )
                     {
-                        rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ), mappedVersions,
-                                                 resolvedSnapshotDependencies, originalVersions, model, properties,
-                                                 result, releaseDescriptor );
+                        rewriteArtifactVersions( toMavenCoordinates( plugin.getDependencies() ), model, properties,
+                                                 result, releaseDescriptor, simulate );
                     }
                 }
             }
@@ -327,22 +313,19 @@ public abstract class AbstractRewritePomsPhase
 
         for ( ModelBase modelBase : modelBases )
         {
-            rewriteArtifactVersions( toMavenCoordinates( modelBase.getDependencies() ), mappedVersions,
-                                     resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                     releaseDescriptor );
+            rewriteArtifactVersions( toMavenCoordinates( modelBase.getDependencies() ), model, properties, result,
+                                     releaseDescriptor, simulate );
 
             if ( modelBase.getDependencyManagement() != null )
             {
                 rewriteArtifactVersions( toMavenCoordinates( modelBase.getDependencyManagement().getDependencies() ),
-                                         mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
-                                         properties, result, releaseDescriptor );
+                                         model, properties, result, releaseDescriptor, simulate );
             }
 
             if ( modelBase.getReporting() != null )
             {
-                rewriteArtifactVersions( toMavenCoordinates( modelBase.getReporting().getPlugins() ), mappedVersions,
-                                         resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                         releaseDescriptor );
+                rewriteArtifactVersions( toMavenCoordinates( modelBase.getReporting().getPlugins() ), model, properties,
+                                         result, releaseDescriptor, simulate );
             }
         }
 
@@ -361,11 +344,11 @@ public abstract class AbstractRewritePomsPhase
                       commonBasedir );
     }
 
-    private void rewriteVersion( Model modelTarget, Map<String, String> mappedVersions, String projectId,
+    private void rewriteVersion( Model modelTarget, ReleaseDescriptor releaseDescriptor, String projectId,
                                  MavenProject project, String parentVersion )
         throws ReleaseFailureException
     {
-        String version = mappedVersions.get( projectId );
+        String version = getNextVersion( releaseDescriptor, projectId );
         if ( version == null )
         {
             throw new ReleaseFailureException( "Version for '" + project.getName() + "' was not mapped" );
@@ -374,9 +357,8 @@ public abstract class AbstractRewritePomsPhase
         modelTarget.setVersion( version );
     }
 
-    private String rewriteParent( MavenProject project, Model targetModel, Map<String, String> mappedVersions,
-                                  Map<String, DependencyVersions> resolvedSnapshotDependencies,
-                                  Map<String, String> originalVersions )
+    private String rewriteParent( MavenProject project, Model targetModel, 
+                                  ReleaseDescriptor releaseDescriptor, boolean simulate )
         throws ReleaseFailureException
     {
         String parentVersion = null;
@@ -384,15 +366,16 @@ public abstract class AbstractRewritePomsPhase
         {
             MavenProject parent = project.getParent();
             String key = ArtifactUtils.versionlessKey( parent.getGroupId(), parent.getArtifactId() );
-            parentVersion = mappedVersions.get( key );
+            parentVersion = getNextVersion( releaseDescriptor, key );
             if ( parentVersion == null )
             {
                 //MRELEASE-317
-                parentVersion = getResolvedSnapshotVersion( key, resolvedSnapshotDependencies );
+                parentVersion = getResolvedSnapshotVersion( key, releaseDescriptor );
             }
             if ( parentVersion == null )
             {
-                if ( parent.getVersion().equals( originalVersions.get( key ) ) )
+                String original = getOriginalVersion( releaseDescriptor, key, simulate );
+                if ( parent.getVersion().equals( original ) )
                 {
                     throw new ReleaseFailureException( "Version for parent '" + parent.getName() + "' was not mapped" );
                 }
@@ -405,11 +388,9 @@ public abstract class AbstractRewritePomsPhase
         return parentVersion;
     }
 
-    private void rewriteArtifactVersions( Collection<MavenCoordinate> elements, Map<String, String> mappedVersions,
-                                          Map<String, DependencyVersions> resolvedSnapshotDependencies,
-                                          Map<String, String> originalVersions, Model projectModel,
+    private void rewriteArtifactVersions( Collection<MavenCoordinate> elements, Model projectModel,
                                           Properties properties, ReleaseResult result,
-                                          ReleaseDescriptor releaseDescriptor )
+                                          ReleaseDescriptor releaseDescriptor, boolean simulate )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( elements == null )
@@ -450,12 +431,12 @@ public abstract class AbstractRewritePomsPhase
             String artifactId = ReleaseUtil.interpolate( rawArtifactId, projectModel );
 
             String key = ArtifactUtils.versionlessKey( groupId, artifactId );
-            String resolvedSnapshotVersion = getResolvedSnapshotVersion( key, resolvedSnapshotDependencies );
-            String mappedVersion = mappedVersions.get( key );
-            String originalVersion = originalVersions.get( key );
+            String resolvedSnapshotVersion = getResolvedSnapshotVersion( key, releaseDescriptor );
+            String mappedVersion = getNextVersion( releaseDescriptor, key );
+            String originalVersion = getOriginalVersion( releaseDescriptor, key, simulate );
             if ( originalVersion == null )
             {
-                originalVersion = getOriginalResolvedSnapshotVersion( key, resolvedSnapshotDependencies );
+                originalVersion = getOriginalResolvedSnapshotVersion( key, releaseDescriptor );
             }
 
             // MRELEASE-220
@@ -479,7 +460,7 @@ public abstract class AbstractRewritePomsPhase
                     if ( expression.startsWith( "project." ) || expression.startsWith( "pom." )
                         || "version".equals( expression ) )
                     {
-                        if ( !mappedVersion.equals( mappedVersions.get( projectId ) ) )
+                        if ( !mappedVersion.equals( getNextVersion( releaseDescriptor, projectId ) ) )
                         {
                             logInfo( result, "  Updating " + artifactId + " to " + mappedVersion );
                             coordinate.setVersion( mappedVersion );
@@ -580,13 +561,12 @@ public abstract class AbstractRewritePomsPhase
 
 
     protected abstract String getResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                          Map<String, DependencyVersions> resolvedSnapshots );
+                                                          ReleaseDescriptor releaseDscriptor );
 
-    protected abstract Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                                  List<MavenProject> reactorProjects,
-                                                                  boolean simulate );
+    protected abstract String getOriginalVersion( ReleaseDescriptor releaseDescriptor, String projectKey,
+                                                  boolean simulate );
 
-    protected abstract Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor );
+    protected abstract String getNextVersion( ReleaseDescriptor releaseDescriptor, String key );
 
     protected abstract void transformScm( MavenProject project, Model modelTarget, ReleaseDescriptor releaseDescriptor,
                                           String projectId, ScmRepository scmRepository,
@@ -604,18 +584,9 @@ public abstract class AbstractRewritePomsPhase
     }
 
     protected String getOriginalResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                         Map<String, DependencyVersions> resolvedSnapshots )
+                                                         ReleaseDescriptor releaseDescriptor )
     {
-        DependencyVersions versionsMap = resolvedSnapshots.get( artifactVersionlessKey );
-
-        if ( versionsMap != null )
-        {
-            return versionsMap.getOriginal();
-        }
-        else
-        {
-            return null;
-        }
+        return releaseDescriptor.getDependencyOriginalVersion( artifactVersionlessKey );
     }
 
     protected Scm buildScm( MavenProject project )
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
index a1f5ce4..913a13f 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
@@ -36,8 +36,8 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.config.ReleaseStageVersions;
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.apache.maven.shared.release.versions.DefaultVersionInfo;
 import org.apache.maven.shared.release.versions.VersionInfo;
@@ -100,11 +100,9 @@ public class CheckDependencySnapshotsPhase
         {
             logInfo( result, "Checking dependencies and plugins for snapshots ..." );
 
-            Map<String, String> originalVersions = releaseDescriptor.getOriginalVersions( reactorProjects );
-
             for ( MavenProject project : reactorProjects )
             {
-                checkProject( project, originalVersions, releaseDescriptor );
+                checkProject( project, releaseDescriptor );
             }
         }
         else
@@ -116,35 +114,34 @@ public class CheckDependencySnapshotsPhase
         return result;
     }
 
-    private void checkProject( MavenProject project, Map<String, String> originalVersions,
-                               ReleaseDescriptor releaseDescriptor )
+    private void checkProject( MavenProject project, ReleaseDescriptor releaseDescriptor )
         throws ReleaseFailureException, ReleaseExecutionException
     {
         Map<String, Artifact> artifactMap = ArtifactUtils.artifactMapByVersionlessId( project.getArtifacts() );
 
         if ( project.getParentArtifact() != null )
         {
-            if ( checkArtifact( project.getParentArtifact(), originalVersions, artifactMap, releaseDescriptor ) )
+            if ( checkArtifact( project.getParentArtifact(), artifactMap, releaseDescriptor ) )
             {
                 usedSnapshotDependencies.add( project.getParentArtifact() );
             }
         }
 
         Set<Artifact> dependencyArtifacts = project.getArtifacts();
-        checkDependencies( originalVersions, releaseDescriptor, artifactMap, dependencyArtifacts );
+        checkDependencies( releaseDescriptor, artifactMap, dependencyArtifacts );
 
         //@todo check dependencyManagement
 
         Set<Artifact> pluginArtifacts = project.getPluginArtifacts();
-        checkPlugins( originalVersions, releaseDescriptor, artifactMap, pluginArtifacts );
+        checkPlugins( releaseDescriptor, artifactMap, pluginArtifacts );
 
         //@todo check pluginManagement
 
         Set<Artifact> reportArtifacts = project.getReportArtifacts();
-        checkReports( originalVersions, releaseDescriptor, artifactMap, reportArtifacts );
+        checkReports( releaseDescriptor, artifactMap, reportArtifacts );
 
         Set<Artifact> extensionArtifacts = project.getExtensionArtifacts();
-        checkExtensions( originalVersions, releaseDescriptor, artifactMap, extensionArtifacts );
+        checkExtensions( releaseDescriptor, artifactMap, extensionArtifacts );
 
         //@todo check profiles
 
@@ -174,13 +171,13 @@ public class CheckDependencySnapshotsPhase
         }
     }
 
-    private void checkPlugins( Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor,
+    private void checkPlugins( ReleaseDescriptor releaseDescriptor,
                                Map<String, Artifact> artifactMap, Set<Artifact> pluginArtifacts )
         throws ReleaseExecutionException
     {
         for ( Artifact artifact : pluginArtifacts )
         {
-            if ( checkArtifact( artifact, originalVersions, artifactMap, releaseDescriptor ) )
+            if ( checkArtifact( artifact, artifactMap, releaseDescriptor ) )
             {
                 boolean addToFailures;
 
@@ -243,24 +240,25 @@ public class CheckDependencySnapshotsPhase
         }
     }
 
-    private void checkDependencies( Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor,
-                                    Map<String, Artifact> artifactMap, Set<Artifact> dependencyArtifacts )
+    private void checkDependencies( ReleaseDescriptor releaseDescriptor,
+                                    Map<String, Artifact> artifactMap, 
+                                    Set<Artifact> dependencyArtifacts )
     {
         for ( Artifact artifact : dependencyArtifacts )
         {
-            if ( checkArtifact( artifact, originalVersions, artifactMap, releaseDescriptor ) )
+            if ( checkArtifact( artifact, artifactMap, releaseDescriptor ) )
             {
                 usedSnapshotDependencies.add( getArtifactFromMap( artifact, artifactMap ) );
             }
         }
     }
 
-    private void checkReports( Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor,
+    private void checkReports( ReleaseDescriptor releaseDescriptor,
                                Map<String, Artifact> artifactMap, Set<Artifact> reportArtifacts )
     {
         for ( Artifact artifact : reportArtifacts )
         {
-            if ( checkArtifact( artifact, originalVersions, artifactMap, releaseDescriptor ) )
+            if ( checkArtifact( artifact, artifactMap, releaseDescriptor ) )
             {
                 //snapshotDependencies.add( artifact );
                 usedSnapshotReports.add( artifact );
@@ -268,25 +266,25 @@ public class CheckDependencySnapshotsPhase
         }
     }
 
-    private void checkExtensions( Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor,
+    private void checkExtensions( ReleaseDescriptor releaseDescriptor,
                                   Map<String, Artifact> artifactMap, Set<Artifact> extensionArtifacts )
     {
         for ( Artifact artifact : extensionArtifacts )
         {
-            if ( checkArtifact( artifact, originalVersions, artifactMap, releaseDescriptor ) )
+            if ( checkArtifact( artifact, artifactMap, releaseDescriptor ) )
             {
                 usedSnapshotExtensions.add( artifact );
             }
         }
     }
 
-    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions,
+    private static boolean checkArtifact( Artifact artifact,
                                           Map<String, Artifact> artifactMapByVersionlessId,
                                           ReleaseDescriptor releaseDescriptor )
     {
         Artifact checkArtifact = getArtifactFromMap( artifact, artifactMapByVersionlessId );
 
-        return checkArtifact( checkArtifact, originalVersions, releaseDescriptor );
+        return checkArtifact( checkArtifact, releaseDescriptor );
     }
 
     private static Artifact getArtifactFromMap( Artifact artifact, Map<String, Artifact> artifactMapByVersionlessId )
@@ -301,16 +299,14 @@ public class CheckDependencySnapshotsPhase
         return checkArtifact;
     }
 
-    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions,
-                                          ReleaseDescriptor releaseDescriptor )
+    private static boolean checkArtifact( Artifact artifact, ReleaseDescriptor releaseDescriptor )
     {
-        String versionlessArtifactKey = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
-
+        String versionlessKey = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+        
         // We are only looking at dependencies external to the project - ignore anything found in the reactor as
         // it's version will be updated
-        boolean result =
-            artifact.isSnapshot()
-            && !artifact.getBaseVersion().equals( originalVersions.get( versionlessArtifactKey ) );
+        boolean result = artifact.isSnapshot()
+                && !artifact.getBaseVersion().equals( releaseDescriptor.getProjectOriginalVersion( versionlessKey ) );
 
         // If we have a snapshot but allowTimestampedSnapshots is true, accept the artifact if the version
         // indicates that it is a timestamped snapshot.
@@ -369,7 +365,7 @@ public class CheckDependencySnapshotsPhase
 
             if ( resolveSnapshot.toLowerCase( Locale.ENGLISH ).startsWith( "y" ) )
             {
-                Map<String, DependencyVersions> resolvedSnapshots = null;
+                Map<String, ReleaseStageVersions> resolvedSnapshots = null;
                 
                 if ( resolveSnapshotType == null )
                 {
@@ -420,10 +416,10 @@ public class CheckDependencySnapshotsPhase
         }
     }
 
-    private Map<String, DependencyVersions> processSnapshot( Set<Artifact> snapshotSet )
+    private Map<String, ReleaseStageVersions> processSnapshot( Set<Artifact> snapshotSet )
         throws PrompterException, VersionParseException
     {
-        Map<String, DependencyVersions> resolvedSnapshots = new HashMap<>();
+        Map<String, ReleaseStageVersions> resolvedSnapshots = new HashMap<>();
         Iterator<Artifact> iterator = snapshotSet.iterator();
 
         while ( iterator.hasNext() )
@@ -431,7 +427,7 @@ public class CheckDependencySnapshotsPhase
             Artifact currentArtifact = iterator.next();
             String versionlessKey = ArtifactUtils.versionlessKey( currentArtifact );
 
-            DependencyVersions versionMap = new DependencyVersions();
+            ReleaseStageVersions versionMap = new ReleaseStageVersions();
             VersionInfo versionInfo = new DefaultVersionInfo( currentArtifact.getBaseVersion() );
             versionMap.setOriginal( versionInfo.toString() );
 
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 fbb0749..455f9b4 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
@@ -216,9 +216,6 @@ public class GenerateReleasePomsPhase
                                       ReleaseResult result )
         throws ReleaseFailureException, ReleaseExecutionException
     {
-        Map<String, String> originalVersions = getOriginalVersionMap( releaseDescriptor, reactorProjects );
-        Map<String, String> mappedVersions = getNextVersionMap( releaseDescriptor );
-
         MavenProject releaseProject = project.clone();
         Model releaseModel = releaseProject.getModel();
 
@@ -232,7 +229,7 @@ public class GenerateReleasePomsPhase
         // update project version
         String projectVersion = releaseModel.getVersion();
         String releaseVersion =
-            getNextVersion( mappedVersions, project.getGroupId(), project.getArtifactId(), projectVersion );
+            getNextVersion( releaseDescriptor, project.getGroupId(), project.getArtifactId(), projectVersion );
         releaseModel.setVersion( releaseVersion );
 
         String originalFinalName = releaseModel.getBuild().getFinalName();
@@ -283,17 +280,17 @@ public class GenerateReleasePomsPhase
         }
 
         // rewrite dependencies
-        releaseModel.setDependencies( createReleaseDependencies( originalVersions, mappedVersions, releaseProject ) );
+        releaseModel.setDependencies( createReleaseDependencies( releaseDescriptor, releaseProject ) );
 
         // rewrite plugins
-        releaseModel.getBuild().setPlugins( createReleasePlugins( originalVersions, mappedVersions, releaseProject ) );
+        releaseModel.getBuild().setPlugins( createReleasePlugins( releaseDescriptor, releaseProject ) );
 
         // rewrite reports
-        releaseModel.getReporting().setPlugins( createReleaseReportPlugins( originalVersions, mappedVersions,
+        releaseModel.getReporting().setPlugins( createReleaseReportPlugins( releaseDescriptor, 
                                                                             releaseProject ) );
 
         // rewrite extensions
-        releaseModel.getBuild().setExtensions( createReleaseExtensions( originalVersions, mappedVersions,
+        releaseModel.getBuild().setExtensions( createReleaseExtensions( releaseDescriptor, 
                                                                         releaseProject ) );
 
         unalignFromBaseDirectory( releaseModel, project.getBasedir() );
@@ -419,18 +416,7 @@ public class GenerateReleasePomsPhase
         return execute( releaseDescriptor, releaseEnvironment, reactorProjects, true );
     }
 
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                         List<MavenProject> reactorProjects )
-    {
-        return releaseDescriptor.getOriginalVersions( reactorProjects );
-    }
-
-    protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
-    {
-        return releaseDescriptor.getReleaseVersions();
-    }
-
-    private String getNextVersion( Map<String, String> mappedVersions, String groupId, String artifactId,
+    private String getNextVersion( ReleaseDescriptor releaseDescriptor, String groupId, String artifactId,
                                    String version )
         throws ReleaseFailureException
     {
@@ -438,7 +424,7 @@ public class GenerateReleasePomsPhase
 
         String id = ArtifactUtils.versionlessKey( groupId, artifactId );
 
-        String nextVersion = mappedVersions.get( id );
+        String nextVersion = releaseDescriptor.getProjectReleaseVersion( id );
 
         if ( nextVersion == null )
         {
@@ -489,8 +475,8 @@ public class GenerateReleasePomsPhase
         return releaseScm;
     }
 
-    private List<Dependency> createReleaseDependencies( Map<String, String> originalVersions,
-                                                        Map<String, String> mappedVersions, MavenProject project )
+    private List<Dependency> createReleaseDependencies( ReleaseDescriptor releaseDescriptor,
+                                                        MavenProject project )
         throws ReleaseFailureException
     {
         Set<Artifact> artifacts = project.getArtifacts();
@@ -513,7 +499,7 @@ public class GenerateReleasePomsPhase
                 releaseDependency.setGroupId( artifact.getGroupId() );
                 releaseDependency.setArtifactId( artifact.getArtifactId() );
 
-                String version = getReleaseVersion( originalVersions, mappedVersions, artifact );
+                String version = getReleaseVersion( releaseDescriptor, artifact );
 
                 releaseDependency.setVersion( version );
                 releaseDependency.setType( artifact.getType() );
@@ -527,14 +513,14 @@ public class GenerateReleasePomsPhase
         return releaseDependencies;
     }
 
-    private String getReleaseVersion( Map<String, String> originalVersions, Map<String, String> mappedVersions,
+    private String getReleaseVersion( ReleaseDescriptor releaseDescriptor,
                                       Artifact artifact )
         throws ReleaseFailureException
     {
         String key = ArtifactUtils.versionlessKey( artifact );
 
-        String originalVersion = originalVersions.get( key );
-        String mappedVersion = mappedVersions.get( key );
+        String originalVersion = releaseDescriptor.getProjectOriginalVersion( key );
+        String mappedVersion = releaseDescriptor.getProjectReleaseVersion( key );
 
         String version = artifact.getVersion();
 
@@ -560,8 +546,8 @@ public class GenerateReleasePomsPhase
         return version;
     }
 
-    private List<Plugin> createReleasePlugins( Map<String, String> originalVersions,
-                                               Map<String, String> mappedVersions, MavenProject project )
+    private List<Plugin> createReleasePlugins( ReleaseDescriptor releaseDescriptor,
+                                               MavenProject project )
         throws ReleaseFailureException
     {
         List<Plugin> releasePlugins = null;
@@ -583,7 +569,7 @@ public class GenerateReleasePomsPhase
                 {
                     String id = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
                     Artifact artifact = artifactsById.get( id );
-                    String version = getReleaseVersion( originalVersions, mappedVersions, artifact );
+                    String version = getReleaseVersion( releaseDescriptor, artifact );
 
                     Plugin releasePlugin = new Plugin();
                     releasePlugin.setGroupId( plugin.getGroupId() );
@@ -607,8 +593,8 @@ public class GenerateReleasePomsPhase
         return releasePlugins;
     }
 
-    private List<ReportPlugin> createReleaseReportPlugins( Map<String, String> originalVersions,
-                                                           Map<String, String> mappedVersions, MavenProject project )
+    private List<ReportPlugin> createReleaseReportPlugins( ReleaseDescriptor releaseDescriptor,
+                                                           MavenProject project )
         throws ReleaseFailureException
     {
         List<ReportPlugin> releaseReportPlugins = null;
@@ -629,7 +615,7 @@ public class GenerateReleasePomsPhase
                 {
                     String id = ArtifactUtils.versionlessKey( reportPlugin.getGroupId(), reportPlugin.getArtifactId() );
                     Artifact artifact = artifactsById.get( id );
-                    String version = getReleaseVersion( originalVersions, mappedVersions, artifact );
+                    String version = getReleaseVersion( releaseDescriptor, artifact );
 
                     ReportPlugin releaseReportPlugin = new ReportPlugin();
                     releaseReportPlugin.setGroupId( reportPlugin.getGroupId() );
@@ -647,8 +633,8 @@ public class GenerateReleasePomsPhase
         return releaseReportPlugins;
     }
 
-    private List<Extension> createReleaseExtensions( Map<String, String> originalVersions,
-                                                     Map<String, String> mappedVersions, MavenProject project )
+    private List<Extension> createReleaseExtensions( ReleaseDescriptor releaseDescriptor,
+                                                     MavenProject project )
         throws ReleaseFailureException
     {
         List<Extension> releaseExtensions = null;
@@ -668,7 +654,7 @@ public class GenerateReleasePomsPhase
                 {
                     String id = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
                     Artifact artifact = project.getExtensionArtifactMap().get( id );
-                    String version = getReleaseVersion( originalVersions, mappedVersions, artifact );
+                    String version = getReleaseVersion( releaseDescriptor, artifact );
 
                     Extension releaseExtension = new Extension();
                     releaseExtension.setGroupId( extension.getGroupId() );
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 985b9cf..c155e3c 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 @@ public class InputVariablesPhase
         {
             // 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 = releaseDescriptor.getReleaseVersions().get( key );
+            String releaseVersion = releaseDescriptor.getProjectReleaseVersion( 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 cde5bf0..1b585ab 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
@@ -333,7 +333,7 @@ public class MapVersionsPhase
         String defaultVersion = releaseDescriptor.getDefaultDevelopmentVersion();
         if ( StringUtils.isEmpty( defaultVersion ) )
         {
-            defaultVersion = releaseDescriptor.getDevelopmentVersions().get( projectId );
+            defaultVersion = releaseDescriptor.getProjectDevelopmentVersion( projectId );
         }
         return defaultVersion;
     }
@@ -343,7 +343,7 @@ public class MapVersionsPhase
         String nextVersion = releaseDescriptor.getDefaultReleaseVersion();
         if ( StringUtils.isEmpty( nextVersion ) )
         {
-            nextVersion = releaseDescriptor.getReleaseVersions().get( projectId );
+            nextVersion = releaseDescriptor.getProjectReleaseVersion( 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 56638be..0ef834e 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
@@ -19,15 +19,11 @@ package org.apache.maven.shared.release.phase;
  * under the License.
  */
 
-import java.util.List;
-import java.util.Map;
-
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.codehaus.plexus.component.annotations.Component;
 
@@ -62,21 +58,20 @@ public class RewritePomVersionsPhase
     }
 
     @Override
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                         List<MavenProject> reactorProjects, boolean simulate )
+    protected String getOriginalVersion( ReleaseDescriptor releaseDescriptor, String projectKey, boolean simulate )
     {
-        return releaseDescriptor.getOriginalVersions( reactorProjects );
+        return releaseDescriptor.getProjectOriginalVersion( projectKey );
     }
 
     @Override
-    protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
+    protected String getNextVersion( ReleaseDescriptor releaseDescriptor, String key )
     {
-        return releaseDescriptor.getDevelopmentVersions();
+        return releaseDescriptor.getProjectDevelopmentVersion( key );
     }
 
     @Override
     protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                 Map<String, DependencyVersions> resolvedSnapshotsMap )
+                                                 ReleaseDescriptor resolvedSnapshotsMap )
     {
         // Only update the pom version, not the dependency versions
         return null;
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 8d64599..371383e 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
@@ -20,8 +20,6 @@ package org.apache.maven.shared.release.phase;
  */
 
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.model.Model;
@@ -30,7 +28,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.scm.ScmTranslator;
 import org.apache.maven.shared.release.util.ReleaseUtil;
@@ -245,31 +242,21 @@ public class RewritePomsForBranchPhase
     }
 
     @Override
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                         List<MavenProject> reactorProjects, boolean simulate )
+    protected String getOriginalVersion( ReleaseDescriptor releaseDescriptor, String projectKey, boolean simulate )
     {
-        return releaseDescriptor.getOriginalVersions( reactorProjects );
+        return releaseDescriptor.getProjectOriginalVersion( projectKey );
     }
 
     @Override
-    protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
+    protected String getNextVersion( ReleaseDescriptor releaseDescriptor, String key )
     {
-        return releaseDescriptor.getReleaseVersions();
+        return releaseDescriptor.getProjectReleaseVersion( key );
     }
 
     @Override
     protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                 Map<String, DependencyVersions> resolvedSnapshotsMap )
+                                                 ReleaseDescriptor releaseDescriptor )
     {
-        DependencyVersions versionsMap = resolvedSnapshotsMap.get( artifactVersionlessKey );
-
-        if ( versionsMap != null )
-        {
-            return versionsMap.getRelease();
-        }
-        else
-        {
-            return null;
-        }
+        return releaseDescriptor.getDependencyReleaseVersion( artifactVersionlessKey );
     }
 }
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 a6d21d9..d65d283 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
@@ -19,7 +19,6 @@ package org.apache.maven.shared.release.phase;
  * under the License.
  */
 
-import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.model.Model;
@@ -28,7 +27,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.scm.ScmTranslator;
 import org.codehaus.plexus.component.annotations.Component;
@@ -97,33 +95,23 @@ public class RewritePomsForDevelopmentPhase
     }
 
     @Override
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                         List<MavenProject> reactorProjects, boolean simulate )
+    protected String getOriginalVersion( ReleaseDescriptor releaseDescriptor, String projectKey, boolean simulate )
     {
         return simulate
-            ? releaseDescriptor.getOriginalVersions( reactorProjects )
-            : releaseDescriptor.getReleaseVersions();
+                        ? releaseDescriptor.getProjectOriginalVersion( projectKey )
+                        : releaseDescriptor.getProjectReleaseVersion( projectKey );
     }
 
     @Override
-    protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
+    protected String getNextVersion( ReleaseDescriptor releaseDescriptor, String key )
     {
-        return releaseDescriptor.getDevelopmentVersions();
+        return releaseDescriptor.getProjectDevelopmentVersion( key );
     }
 
     @Override
     protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                 Map<String, DependencyVersions> resolvedSnapshotsMap )
+                                                 ReleaseDescriptor releaseDescriptor )
     {
-        DependencyVersions versionsMap = resolvedSnapshotsMap.get( artifactVersionlessKey );
-
-        if ( versionsMap != null )
-        {
-            return versionsMap.getDevelopment();
-        }
-        else
-        {
-            return null;
-        }
+        return releaseDescriptor.getDependencyDevelopmentVersion( artifactVersionlessKey );
     }
 }
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 bbc64f0..d4a7725 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
@@ -20,8 +20,6 @@ package org.apache.maven.shared.release.phase;
  */
 
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.model.Model;
@@ -30,7 +28,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.scm.ScmTranslator;
 import org.apache.maven.shared.release.util.ReleaseUtil;
@@ -239,31 +236,21 @@ public class RewritePomsForReleasePhase
     }
 
     @Override
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                         List<MavenProject> reactorProjects, boolean simulate )
+    protected String getOriginalVersion( ReleaseDescriptor releaseDescriptor, String projectKey, boolean simulate )
     {
-        return releaseDescriptor.getOriginalVersions( reactorProjects );
+        return releaseDescriptor.getProjectOriginalVersion( projectKey );
     }
 
     @Override
-    protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
+    protected String getNextVersion( ReleaseDescriptor releaseDescriptor, String key )
     {
-        return releaseDescriptor.getReleaseVersions();
+        return releaseDescriptor.getProjectReleaseVersion( key );
     }
 
     @Override
     protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
-                                                 Map<String, DependencyVersions> resolvedSnapshotsMap )
+                                                 ReleaseDescriptor releaseDescriptor )
     {
-        DependencyVersions versionsMap = resolvedSnapshotsMap.get( artifactVersionlessKey );
-
-        if ( versionsMap != null )
-        {
-            return versionsMap.getRelease();
-        }
-        else
-        {
-            return null;
-        }
+        return releaseDescriptor.getDependencyReleaseVersion( artifactVersionlessKey );
     }
 }
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index 3c36c6a..885b469 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -543,9 +543,14 @@
     /**
      * Field resolvedSnapshotDependencies.
      */
-    private java.util.Map<String, DependencyVersions> resolvedSnapshotDependencies;
+    private java.util.Map<String, ReleaseStageVersions> resolvedSnapshotDependencies;
 
     /**
+     * Field projectVersions
+     */
+    private java.util.Map<String, ReleaseStageVersions> projectVersions;
+    
+    /**
      * Field releaseVersions.
      */
     private java.util.Map<String, String> releaseVersions;
@@ -565,7 +570,7 @@
      * 
      * @return Map
      */
-    public java.util.Map<String, DependencyVersions> getResolvedSnapshotDependencies()
+    public java.util.Map<String, ReleaseStageVersions> getResolvedSnapshotDependencies()
     {
         if ( this.resolvedSnapshotDependencies == null )
         {
@@ -573,24 +578,24 @@
         }
 
         return this.resolvedSnapshotDependencies;
-    } //-- java.util.Map<String, DependencyVersions> getResolvedSnapshotDependencies()
+    } //-- java.util.Map<String, ReleaseStageVersions> getResolvedSnapshotDependencies()
     
     /**
      * Set a map of resolved snapshot dependencies versions.
      * 
      * @param resolvedSnapshotDependencies
      */
-    public void setResolvedSnapshotDependencies( java.util.Map<String, DependencyVersions> resolvedSnapshotDependencies )
+    public void setResolvedSnapshotDependencies( java.util.Map<String, ReleaseStageVersions> resolvedSnapshotDependencies )
     {
         this.resolvedSnapshotDependencies = resolvedSnapshotDependencies;
-    } //-- void setResolvedSnapshotDependencies( java.util.Map<String, DependencyVersions> )
+    } //-- void setResolvedSnapshotDependencies( java.util.Map<String, ReleaseStageVersions> )
 
     /**
      * Method getReleaseVersions.
      * 
      * @return Map
      */
-    public java.util.Map<String, String> getReleaseVersions()
+    java.util.Map<String, String> getReleaseVersions()
     {
         if ( this.releaseVersions == null )
         {
@@ -599,6 +604,11 @@
 
         return this.releaseVersions;
     } //-- java.util.Map<String, String> getReleaseVersions()
+    
+    public String getProjectReleaseVersion( String projectKey )
+    {
+      return getReleaseVersions().get( projectKey );
+    }
 
     /**
      * Method addReleaseVersion.
@@ -616,7 +626,7 @@
      * 
      * @return Map
      */
-    public java.util.Map<String, String> getDevelopmentVersions()
+    java.util.Map<String, String> getDevelopmentVersions()
     {
         if ( this.developmentVersions == null )
         {
@@ -626,6 +636,11 @@
         return this.developmentVersions;
     } //-- java.util.Map<String, String> getDevelopmentVersions()
 
+    public String getProjectDevelopmentVersion( String projectKey )
+    {
+      return this.getDevelopmentVersions().get( projectKey );
+    }
+
     /**
      * Method addDevelopmentVersion.
      * 
@@ -678,7 +693,7 @@
             assert !resolvedSnapshotDependencies.containsKey( artifactName );
         }
 
-        DependencyVersions versionsMap = new DependencyVersions();
+        ReleaseStageVersions versionsMap = new ReleaseStageVersions();
 
         versionsMap.setDevelopment( developmentVersion );
         versionsMap.setRelease( releaseVersion );
@@ -704,7 +719,7 @@
     /**
      * A map of projects to original versions before any transformation.
      */
-    private java.util.Map originalVersions;
+    private java.util.Map<String, String> originalVersions;
 
     /**
      * Retrieve the original version map, before transformation, keyed by project's versionless identifier.
@@ -713,7 +728,7 @@
      *
      * @return the map of project IDs to versions.
      */
-    public synchronized java.util.Map<String, String> getOriginalVersions( java.util.List<org.apache.maven.project.MavenProject> reactorProjects )
+    public synchronized java.util.Map<String, String> getOriginalVersions( java.util.Collection<org.apache.maven.project.MavenProject> reactorProjects )
     {
         if ( originalVersions == null )
         {
@@ -726,6 +741,11 @@
         }
         return originalVersions;
     }
+    
+    public String getProjectOriginalVersion( String projectId )
+    {
+      return originalVersions.get( projectId ); 
+    }
 
     /**
      * Retrieve the release version for the resolved snapshot dependency.
@@ -733,9 +753,9 @@
      */
     public String getDependencyDevelopmentVersion( String artifactConflictId )
     {
-        if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
+        if ( resolvedSnapshotDependencies != null && resolvedSnapshotDependencies.containsKey( artifactConflictId ) )
         {
-            DependencyVersions versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
+            ReleaseStageVersions versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
             return versionMap.getDevelopment();
         }
         return null;
@@ -747,14 +767,29 @@
      */
     public String getDependencyReleaseVersion( String artifactConflictId )
     {
-        if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
+        if ( resolvedSnapshotDependencies != null && resolvedSnapshotDependencies.containsKey( artifactConflictId ) )
         {
-            DependencyVersions versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
+            ReleaseStageVersions versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
             return versionMap.getRelease();
         }
         return null;
     }
 
+    /**
+     * Retrieve the original version for the resolved snapshot dependency.
+     *
+     */
+    public String getDependencyOriginalVersion( String artifactConflictId )
+    {
+        if ( resolvedSnapshotDependencies != null && resolvedSnapshotDependencies.containsKey( artifactConflictId ) )
+        {
+            ReleaseStageVersions versionMap = resolvedSnapshotDependencies.get( artifactConflictId );
+            return versionMap.getOriginal();
+        }
+        return null;
+    }
+
+
     public boolean equals( Object obj )
     {
         if ( this == obj )
@@ -1056,7 +1091,7 @@
       </codeSegments>
     </class>
     <class>
-      <name>DependencyVersions</name>
+      <name>ReleaseStageVersions</name>
       <fields>
         <field>
           <name>original</name>
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
index 19e2f7f..540044b 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
@@ -163,15 +163,15 @@ public class PropertiesReleaseDescriptorStoreTest
         file.delete();
         assertFalse( "Check file doesn't exist", file.exists() );
 
-        ReleaseDescriptor config = new ReleaseDescriptor();
+        ReleaseDescriptorBuilder config = new ReleaseDescriptorBuilder();
         config.setCompletedPhase( "completed-phase-write" );
         config.setScmSourceUrl( "url-write" );
 
-        store.write( config, file );
+        store.write( config.build(), file );
 
         ReleaseDescriptor rereadDescriptor = store.read( file );
 
-        assertEquals( "compare configuration", config, rereadDescriptor );
+        assertEquals( "compare configuration", config.build(), rereadDescriptor );
     }
 
     public void testWriteToNewFileDottedIds()
@@ -181,7 +181,7 @@ public class PropertiesReleaseDescriptorStoreTest
         file.delete();
         assertFalse( "Check file doesn't exist", file.exists() );
 
-        ReleaseDescriptor config = new ReleaseDescriptor();
+        ReleaseDescriptorBuilder config = new ReleaseDescriptorBuilder();
         config.setCompletedPhase( "completed-phase-write" );
         config.setScmSourceUrl( "url-write" );
 
@@ -196,11 +196,11 @@ public class PropertiesReleaseDescriptorStoreTest
         scm.setUrl( "url" );
         config.addOriginalScmInfo( "group.id:artifact.id", scm );
 
-        store.write( config, file );
+        store.write( config.build(), file );
 
         ReleaseDescriptor rereadDescriptor = store.read( file );
 
-        assertEquals( "compare configuration", config, rereadDescriptor );
+        assertEquals( "compare configuration", config.build(), rereadDescriptor );
     }
 
     public void testWriteToNewFileNullMappedScm()
@@ -210,23 +210,23 @@ public class PropertiesReleaseDescriptorStoreTest
         file.delete();
         assertFalse( "Check file doesn't exist", file.exists() );
 
-        ReleaseDescriptor config = new ReleaseDescriptor();
-        config.setCompletedPhase( "completed-phase-write" );
-        config.setScmSourceUrl( "url-write" );
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        builder.setCompletedPhase( "completed-phase-write" );
+        builder.setScmSourceUrl( "url-write" );
 
-        config.addReleaseVersion( "group.id:artifact.id", "1.1" );
-        config.addDevelopmentVersion( "group.id:artifact.id", "1.2-SNAPSHOT" );
+        builder.addReleaseVersion( "group.id:artifact.id", "1.1" );
+        builder.addDevelopmentVersion( "group.id:artifact.id", "1.2-SNAPSHOT" );
 
-        config.addOriginalScmInfo( "group.id:artifact.id", null );
+        builder.addOriginalScmInfo( "group.id:artifact.id", null );
 
-        store.write( config, file );
+        store.write( builder.build(), file );
 
         ReleaseDescriptor rereadDescriptor = store.read( file );
 
         assertNull( "check null scm is mapped correctly",
                     rereadDescriptor.getOriginalScmInfo().get( "group.id:artifact.id" ) );
 
-        assertEquals( "compare configuration", config, rereadDescriptor );
+        assertEquals( "compare configuration", builder.build(), rereadDescriptor );
     }
 
     public void testOverwriteFile()
@@ -281,25 +281,25 @@ public class PropertiesReleaseDescriptorStoreTest
 
     private ReleaseDescriptor createReleaseConfigurationForWriting()
     {
-        ReleaseDescriptor config = new ReleaseDescriptor();
-        config.setCompletedPhase( "completed-phase-write" );
-        config.setCommitByProject( true );
-        config.setScmSourceUrl( "url-write" );
-        config.setScmId( "id-write" );
-        config.setScmUsername( "username-write" );
-        config.setScmPassword( "password-write" );
-        config.setScmPrivateKey( "private-key-write" );
-        config.setScmPrivateKeyPassPhrase( "passphrase-write" );
-        config.setScmTagBase( "tag-base-write" );
-        config.setScmBranchBase( "branch-base-write" );
-        config.setScmReleaseLabel( "tag-write" );
-        config.setAdditionalArguments( "additional-args-write" );
-        config.setPreparationGoals( "preparation-goals-write" );
-        config.setCompletionGoals( "completion-goals-write" );
-        config.setPomFileName( "pom-file-name-write" );
-
-        config.addReleaseVersion( "groupId:artifactId", "1.0" );
-        config.addDevelopmentVersion( "groupId:artifactId", "1.1-SNAPSHOT" );
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        builder.setCompletedPhase( "completed-phase-write" );
+        builder.setCommitByProject( true );
+        builder.setScmSourceUrl( "url-write" );
+        builder.setScmId( "id-write" );
+        builder.setScmUsername( "username-write" );
+        builder.setScmPassword( "password-write" );
+        builder.setScmPrivateKey( "private-key-write" );
+        builder.setScmPrivateKeyPassPhrase( "passphrase-write" );
+        builder.setScmTagBase( "tag-base-write" );
+        builder.setScmBranchBase( "branch-base-write" );
+        builder.setScmReleaseLabel( "tag-write" );
+        builder.setAdditionalArguments( "additional-args-write" );
+        builder.setPreparationGoals( "preparation-goals-write" );
+        builder.setCompletionGoals( "completion-goals-write" );
+        builder.setPomFileName( "pom-file-name-write" );
+
+        builder.addReleaseVersion( "groupId:artifactId", "1.0" );
+        builder.addDevelopmentVersion( "groupId:artifactId", "1.1-SNAPSHOT" );
 
         IdentifiedScm scm = new IdentifiedScm();
         scm.setId( "id-write" );
@@ -307,14 +307,14 @@ public class PropertiesReleaseDescriptorStoreTest
         scm.setDeveloperConnection( "developerConnection-write" );
         scm.setUrl( "url-write" );
         scm.setTag( "tag-write" );
-        config.addOriginalScmInfo( "groupId:artifactId", scm );
+        builder.addOriginalScmInfo( "groupId:artifactId", scm );
 
         scm = new IdentifiedScm();
         scm.setConnection( "connection-write" );
         // omit optional elements
-        config.addOriginalScmInfo( "groupId:subproject1", scm );
+        builder.addOriginalScmInfo( "groupId:subproject1", scm );
 
-        return config;
+        return builder.build();
     }
 
     private static void assertDefaultReleaseConfiguration( ReleaseDescriptor config )
@@ -349,7 +349,7 @@ public class PropertiesReleaseDescriptorStoreTest
     public ReleaseDescriptor createMergeConfiguration()
         throws IOException
     {
-        ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+        ReleaseDescriptorBuilder releaseDescriptor = new ReleaseDescriptorBuilder();
 
         releaseDescriptor.setScmSourceUrl( "scm-url" );
         releaseDescriptor.setScmUsername( "username" );
@@ -357,7 +357,7 @@ public class PropertiesReleaseDescriptorStoreTest
         releaseDescriptor.setWorkingDirectory( AbstractReleaseTestCase.getPath( getTestFile( "target/test-working-directory" ) ) );
         // Not setting non-override setting completedPhase
 
-        return releaseDescriptor;
+        return releaseDescriptor.build();
     }
 
     private void assertAndAdjustScmPassword( ReleaseDescriptor expected, ReleaseDescriptor original )
@@ -394,49 +394,49 @@ public class PropertiesReleaseDescriptorStoreTest
 
     private ReleaseDescriptor createExpectedReleaseConfiguration()
     {
-        ReleaseDescriptor expected = new ReleaseDescriptor();
-        expected.setCompletedPhase( "step1" );
-        expected.setCommitByProject( true );
-        expected.setScmId( "scm-id" );
-        expected.setScmSourceUrl( "scm-url" );
-        expected.setScmUsername( "username" );
-        expected.setScmPassword( "password" );
-        expected.setScmPrivateKey( "private-key" );
-        expected.setScmPrivateKeyPassPhrase( "passphrase" );
-        expected.setScmTagBase( "tagBase" );
-        expected.setScmTagNameFormat( "expectedTagNameFormat" );
-        expected.setScmBranchBase( "branchBase" );
-        expected.setScmReleaseLabel( "tag" );
-        expected.setAdditionalArguments( "additional-arguments" );
-        expected.setPreparationGoals( "preparation-goals" );
-        expected.setCompletionGoals( "completion-goals" );
-        expected.setPomFileName( "pom-file-name" );
-        expected.setWorkingDirectory( null );
-        expected.setGenerateReleasePoms( false );
-        expected.setScmUseEditMode( false );
-        expected.setInteractive( true );
-        expected.setAddSchema( false );
-        expected.addReleaseVersion( "groupId:artifactId1", "2.0" );
-        expected.addReleaseVersion( "groupId:artifactId2", "3.0" );
-        expected.addDevelopmentVersion( "groupId:artifactId1", "2.1-SNAPSHOT" );
-        expected.addDevelopmentVersion( "groupId:artifactId2", "3.0.1-SNAPSHOT" );
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        builder.setCompletedPhase( "step1" );
+        builder.setCommitByProject( true );
+        builder.setScmId( "scm-id" );
+        builder.setScmSourceUrl( "scm-url" );
+        builder.setScmUsername( "username" );
+        builder.setScmPassword( "password" );
+        builder.setScmPrivateKey( "private-key" );
+        builder.setScmPrivateKeyPassPhrase( "passphrase" );
+        builder.setScmTagBase( "tagBase" );
+        builder.setScmTagNameFormat( "expectedTagNameFormat" );
+        builder.setScmBranchBase( "branchBase" );
+        builder.setScmReleaseLabel( "tag" );
+        builder.setAdditionalArguments( "additional-arguments" );
+        builder.setPreparationGoals( "preparation-goals" );
+        builder.setCompletionGoals( "completion-goals" );
+        builder.setPomFileName( "pom-file-name" );
+        builder.setWorkingDirectory( null );
+        builder.setGenerateReleasePoms( false );
+        builder.setScmUseEditMode( false );
+        builder.setInteractive( true );
+        builder.setAddSchema( false );
+        builder.addReleaseVersion( "groupId:artifactId1", "2.0" );
+        builder.addReleaseVersion( "groupId:artifactId2", "3.0" );
+        builder.addDevelopmentVersion( "groupId:artifactId1", "2.1-SNAPSHOT" );
+        builder.addDevelopmentVersion( "groupId:artifactId2", "3.0.1-SNAPSHOT" );
         IdentifiedScm scm = new IdentifiedScm();
         scm.setId( "id" );
         scm.setConnection( "connection" );
         scm.setDeveloperConnection( "developerConnection" );
         scm.setUrl( "url" );
         scm.setTag( "tag" );
-        expected.addOriginalScmInfo( "groupId:artifactId1", scm );
+        builder.addOriginalScmInfo( "groupId:artifactId1", scm );
         scm = new IdentifiedScm();
         scm.setId( null );
         scm.setConnection( "connection2" );
         scm.setUrl( "url2" );
         scm.setTag( null );
         scm.setDeveloperConnection( null );
-        expected.addOriginalScmInfo( "groupId:artifactId2", scm );
-        expected.mapResolvedSnapshotDependencies( "external:artifactId", "1.0", "1.1-SNAPSHOT" );
+        builder.addOriginalScmInfo( "groupId:artifactId2", scm );
+        builder.build().mapResolvedSnapshotDependencies( "external:artifactId", "1.0", "1.1-SNAPSHOT" );
 
-        return expected;
+        return builder.build();
     }
 
 }
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 02758b4..70ec285 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
@@ -259,9 +259,12 @@ public class ReleaseUtilsTest
         String dependencyKey = ArtifactUtils.versionlessKey( "com.groupId", "artifactId" );
         properties.put( "dependency." + dependencyKey  + ".release", "1.3" );
         properties.put( "dependency." + dependencyKey + ".development", "1.3-SNAPSHOT" );
-        ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
+        
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties, builder );
+        ReleaseDescriptor descriptor = builder.build();
 
-        DependencyVersions versionMap = descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
+        ReleaseStageVersions versionMap = descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
         assertEquals( "1.3", versionMap.getRelease() );
         assertEquals( "1.3-SNAPSHOT", versionMap.getDevelopment() );
     }
@@ -274,9 +277,12 @@ public class ReleaseUtilsTest
         properties.put( "dependency." + relDependencyKey  + ".release", "1.3" );
         String devDependencyKey = ArtifactUtils.versionlessKey( "com.development.magic", "dependency" );
         properties.put( "dependency." + devDependencyKey + ".development", "1.3-SNAPSHOT" );
-        ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
+        
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties, builder );
+        ReleaseDescriptor descriptor = builder.build();
 
-        DependencyVersions versionMap = descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
+        ReleaseStageVersions versionMap = descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
         assertEquals( "1.3", versionMap.getRelease() );
 
         versionMap = descriptor.getResolvedSnapshotDependencies().get( devDependencyKey );
@@ -288,7 +294,7 @@ public class ReleaseUtilsTest
     {
         Properties properties = new Properties();
         properties.setProperty( "dependency.locations.enabled", "false" );
-        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties, new ReleaseDescriptorBuilder() );
     }
 
     private static ReleaseDescriptor copyReleaseDescriptor( ReleaseDescriptor originalReleaseDescriptor )
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
index 2deaf8b..96eadcd 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractReleaseTestCase.java
@@ -57,6 +57,7 @@ import org.apache.maven.project.ProjectBuildingResult;
 import org.apache.maven.project.ProjectSorter;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
 import org.apache.maven.shared.release.PlexusJUnit4TestCase;
+import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
 import org.apache.maven.shared.release.util.ReleaseUtil;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 import org.sonatype.aether.repository.WorkspaceReader;
@@ -102,6 +103,16 @@ public abstract class AbstractReleaseTestCase
     {
         return createReactorProjects( path, path, subpath );
     }
+    
+    protected ReleaseDescriptorBuilder createReleaseDescriptorBuilder( List<MavenProject> reactorProjects )
+    {
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        for ( MavenProject project : reactorProjects )
+        {
+            builder.putOriginalVersion( project.getGroupId() + ':' + project.getArtifactId(), project.getVersion() );
+        }
+        return builder;
+    }
 
     /**
      *
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
index eeca5e2..151f510 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
@@ -746,6 +746,12 @@ public abstract class AbstractRewritingReleasePhaseTestCase
     {
         ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
         MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects );
+        
+        for ( MavenProject project : reactorProjects )
+        {
+            builder.putOriginalVersion( project.getGroupId() + ':' + project.getArtifactId(), project.getVersion() );
+        }
+        
         if ( rootProject.getScm() == null )
         {
             builder.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo/trunk" );
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 16779b2..2fea1df 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
@@ -37,8 +37,8 @@ import java.util.Objects;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
-import org.apache.maven.shared.release.config.DependencyVersions;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
+import org.apache.maven.shared.release.config.ReleaseStageVersions;
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
@@ -93,8 +93,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "no-snapshot-range-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "1.1", "1.2-SNAPSHOT" ) ) );
 
@@ -112,8 +112,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotDependenciesInProjectOnly()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -127,8 +127,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotReleasePluginNonInteractive()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
         builder.setInteractive( false );
 
         try
@@ -161,8 +161,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompterWithSnapshotReleasePlugin( NO, NO ) );
 
@@ -198,8 +198,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createYesMockPrompter() );
 
@@ -215,8 +215,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createYesMockPrompter() );
 
@@ -232,8 +232,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompterWithSnapshotReleasePlugin( "donkey", NO ) );
 
@@ -269,8 +269,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "snapshot-release-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         Prompter mockPrompter = mock( Prompter.class );
         when( mockPrompter.prompt( anyString(), eq( YES_NO_ARRAY ),
@@ -311,8 +311,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-differing-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -345,8 +345,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotManagedDependenciesInProjectOnly()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-managed-snapshot-dependency" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -360,9 +360,9 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotUnusedInternalManagedDependency()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "unused-internal-managed-snapshot-dependency" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -376,9 +376,9 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotUnusedExternalManagedDependency()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "unused-external-managed-snapshot-dependency" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -392,8 +392,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotExternalManagedDependency()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-managed-snapshot-dependency" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         builder.setInteractive( false );
 
@@ -424,8 +424,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotDependenciesOutsideProjectOnlyNonInteractive()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         builder.setInteractive( false );
 
@@ -456,8 +456,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testRangeSnapshotDependenciesOutsideProjectOnlyNonInteractive()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-range-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         builder.setInteractive( false );
 
@@ -491,8 +491,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "1.0", "1.1-SNAPSHOT" ),
                                                new VersionPair( "1.0", "1.0" ) ) );
@@ -500,13 +500,13 @@ public class CheckDependencySnapshotsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
  
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.1-SNAPSHOT", versionsMap.getDevelopment() );
         assertEquals( "1.0", versionsMap.getRelease() );
 
-        builder = new ReleaseDescriptorBuilder();
+        builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "1.0", "1.1-SNAPSHOT" ) ) );
 
@@ -520,8 +520,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "0.9", "1.0-SNAPSHOT" ),
                                                new VersionPair( "1.0", "1.0-SNAPSHOT" ) ) );
@@ -529,7 +529,7 @@ public class CheckDependencySnapshotsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0-SNAPSHOT", versionsMap.getDevelopment() );
@@ -543,15 +543,15 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "1.0", "1.0" ) ) );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.getDevelopment() );
@@ -565,15 +565,15 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createMockPrompter( YES, "0", new VersionPair( "1.0", "1.0" ) ) );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.getDevelopment() );
@@ -587,8 +587,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-all" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         Prompter mockPrompter =
             createMockPrompter( YES, "0",
@@ -599,7 +599,7 @@ public class CheckDependencySnapshotsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0", versionsMap.getDevelopment() );
@@ -614,9 +614,9 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "multimodule-external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         VersionPair pair = new VersionPair( "1.0", "1.1-SNAPSHOT" );
         VersionPair defaultPair = new VersionPair( "1.0", "1.0" );
@@ -626,7 +626,7 @@ public class CheckDependencySnapshotsPhaseTest
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
-        Map<String, DependencyVersions> resolvedDependencies = builder.build().getResolvedSnapshotDependencies();
+        Map<String, ReleaseStageVersions> resolvedDependencies = builder.build().getResolvedSnapshotDependencies();
 
         assertNotNull( resolvedDependencies );
         assertEquals( 2, resolvedDependencies.size() );
@@ -634,7 +634,7 @@ public class CheckDependencySnapshotsPhaseTest
         assertTrue( resolvedDependencies.containsKey( "external:artifactId" ) );
         assertTrue( resolvedDependencies.containsKey( "external:artifactId2" ) );
 
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "external:artifactId" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.1-SNAPSHOT", versionsMap.getDevelopment() );
@@ -654,9 +654,9 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "internal-and-external-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -704,8 +704,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotReportPluginsInProjectOnly()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-snapshot-report-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -722,8 +722,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-report-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -759,9 +759,9 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "internal-and-external-snapshot-report-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -809,8 +809,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotPluginsInProjectOnly()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-snapshot-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -824,8 +824,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotManagedPluginInProjectOnly()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-managed-snapshot-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -839,8 +839,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotUnusedInternalManagedPlugin()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "unused-internal-managed-snapshot-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -854,8 +854,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotUnusedExternalManagedPlugin()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "unused-external-managed-snapshot-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -872,8 +872,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-managed-snapshot-plugin" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -909,8 +909,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -946,8 +946,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-and-external-snapshot-plugins" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -983,8 +983,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-parent/child" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -1020,8 +1020,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-parent/child" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         Prompter mockPrompter = createMockPrompter( YES, DEFAULT_CHOICE, new VersionPair( "1.0-test", "1.0-test" ),
                                                     new VersionPair( "1.0", "1.0-test" ) );
@@ -1030,7 +1030,7 @@ public class CheckDependencySnapshotsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // validate
-        DependencyVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "groupId:parent-external" );
+        ReleaseStageVersions versionsMap = builder.build().getResolvedSnapshotDependencies().get( "groupId:parent-external" );
 
         assertNotNull( versionsMap );
         assertEquals( "1.0-test", versionsMap.getDevelopment() );
@@ -1059,8 +1059,8 @@ public class CheckDependencySnapshotsPhaseTest
         CheckDependencySnapshotsPhase phase =
             (CheckDependencySnapshotsPhase) lookup( ReleasePhase.class, "check-dependency-snapshots" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "external-snapshot-extension" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.setPrompter( createNoMockPrompter() );
 
@@ -1093,8 +1093,8 @@ public class CheckDependencySnapshotsPhaseTest
     public void testSnapshotInternalExtension()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects = createDescriptorFromProjects( "internal-snapshot-extension" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
@@ -1123,9 +1123,9 @@ public class CheckDependencySnapshotsPhaseTest
     public void testAllowTimestampedSnapshots()
         throws Exception
     {
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();;
         List<MavenProject> reactorProjects =
             createDescriptorFromProjects( "external-timestamped-snapshot-dependencies" );
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( reactorProjects );
 
         builder.setInteractive( false );
 
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionPhaseIT.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionPhaseIT.java
index 9920544..64b2366 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionPhaseIT.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionPhaseIT.java
@@ -59,6 +59,6 @@ public class MapDevelopmentVersionPhaseIT
         List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
         mapVersionsPhase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
-        assertEquals( "1.0", builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+        assertEquals( "1.0", builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 }
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
index 96642c1..2ffffae 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
@@ -32,9 +32,7 @@ import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
@@ -109,8 +107,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
 
         verify( mockPrompter ).prompt( startsWith( "What is the release version for \"" + project.getName() + "\"?" ),
                                        eq( "1.0" ) );
@@ -136,8 +134,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
         verify( mockPrompter ).prompt( startsWith( "What is the release version for \"" + project.getName() + "\"?" ),
                                        eq( "1.0" ) );
     }
@@ -163,8 +161,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "1.0.0",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -173,8 +171,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "1.0.0",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
         verify( mockPrompter,
                 times( 2 ) ).prompt( startsWith( "What is the release version for \"" + project.getName() + "\"?" ),
                                      eq( "1.0" ) );
@@ -203,8 +201,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -213,8 +211,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
 
         verify( mockPrompter,
                 times( 2 ) ).prompt( startsWith( "What is the release version for \"" + project.getName() + "\"?" ),
@@ -242,8 +240,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -253,8 +251,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "2.0",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
     }
 
     @Test
@@ -273,8 +271,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "1.0" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
     }
 
     @Test
@@ -293,8 +291,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check mapped versions", "1.0" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
     }
 
     @Test
@@ -317,8 +315,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2.0-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -327,8 +325,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2.0-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         verify( mockPrompter, times( 2 ) ).prompt( startsWith( "What is the new development version for \""
             + project.getName() + "\"?" ), eq( "1.1-SNAPSHOT" ) );
@@ -356,8 +354,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "1.0",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -367,8 +365,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.0" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "1.0" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -389,8 +387,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "1.1-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -400,8 +398,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "1.1-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     /**
@@ -425,8 +423,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -437,8 +435,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -507,8 +505,8 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2.0-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         // prepare
         builder = new ReleaseDescriptorBuilder();
@@ -517,8 +515,8 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check mapped versions", Collections.singletonMap( "groupId:artifactId", "2.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertEquals( "Check mapped versions", "2.0-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
 
         verify( mockPrompter, times( 2 ) ).prompt( startsWith( "What is the new development version for \""
             + project.getName() + "\"?" ), eq( "1.1-SNAPSHOT" ) );
@@ -578,9 +576,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -600,9 +598,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -623,9 +621,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -646,9 +644,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -668,9 +666,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -690,9 +688,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -711,9 +709,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -732,9 +730,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -754,9 +752,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -776,9 +774,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.1.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.1.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -797,9 +795,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -818,9 +816,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -840,9 +838,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -862,9 +860,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -884,9 +882,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions",  "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -906,9 +904,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -928,10 +926,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -951,10 +949,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "1.2" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -974,10 +972,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -997,10 +995,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1021,9 +1019,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1044,9 +1042,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1067,9 +1065,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1090,9 +1088,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1113,10 +1111,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1137,10 +1135,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1166,10 +1164,10 @@ public class MapVersionsPhaseTest
          * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
          * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
          */
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1195,10 +1193,10 @@ public class MapVersionsPhaseTest
          * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
          * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
          */
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "1.2" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1222,10 +1220,10 @@ public class MapVersionsPhaseTest
         // updateBranchVersions is set to true, so suggest the next snapshot version
         // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "1.3-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1249,10 +1247,10 @@ public class MapVersionsPhaseTest
         // updateBranchVersions is set to true, so suggest the next snapshot version
         // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.3-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.3-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1274,10 +1272,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "2.1-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1299,10 +1297,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "2.1-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1323,10 +1321,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "2.1-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1347,10 +1345,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "2.1-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1439,10 +1437,10 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "2.1-SNAPSHOT" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1473,10 +1471,10 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:(,2.4) > 1.2-SNAPSHOT (yes, one step back!)
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         verify( mockPrompter ).prompt( startsWith( "What is the branch version for" ), eq( "1.3-SNAPSHOT" ) );
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "2.1-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "2.1-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1560,10 +1558,10 @@ public class MapVersionsPhaseTest
          * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
          * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
          */
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions",  "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1587,10 +1585,10 @@ public class MapVersionsPhaseTest
          * This is true for trunk, but when branching from a tag I would expect the next SNAPSHOT version. For now keep
          * '1.2' instead of '1.3-SNAPSHOT' until further investigation.
          */
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1610,9 +1608,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -1632,9 +1630,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -1654,9 +1652,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -1678,9 +1676,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -1699,10 +1697,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1721,10 +1719,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1744,9 +1742,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1766,9 +1764,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "1.2-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "1.2-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
     }
 
     @Test
@@ -1791,10 +1789,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2",
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1817,10 +1815,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "1.2" ),
-                      builder.build().getReleaseVersions() );
+        assertEquals( "Check release versions", "1.2" ,
+                      builder.build().getProjectReleaseVersion("groupId:artifactId") );
         assertNull( "Check development versions",
-                    builder.build().getDevelopmentVersions().get( "groupId:artifactId" ) );
+                    builder.build().getProjectDevelopmentVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1890,11 +1888,10 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        Map<String, String> developmentVersions = new HashMap<>();
-        developmentVersions.put( "groupId:artifactId", "1.3-SNAPSHOT" );
-        developmentVersions.put( "groupId:module1", "2.0" );
-        assertEquals( "Check development versions", developmentVersions, builder.build().getDevelopmentVersions() );
-        assertEquals( "Check release versions", 0, builder.build().getReleaseVersions().size() );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT", builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertEquals( "Check development versions", "2.0" , builder.build().getProjectDevelopmentVersion("groupId:module1") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:module1") );
     }
 
     @Test
@@ -1916,11 +1913,10 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        Map<String, String> developmentVersions = new HashMap<>();
-        developmentVersions.put( "groupId:artifactId", "1.3-SNAPSHOT" );
-        developmentVersions.put( "groupId:module1", "2.0" );
-        assertEquals( "Check development versions", developmentVersions, builder.build().getDevelopmentVersions() );
-        assertEquals( "Check release versions", 0, builder.build().getReleaseVersions().size() );
+        assertEquals( "Check development versions", "1.3-SNAPSHOT", builder.build().getProjectDevelopmentVersion( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "2.0", builder.build().getProjectDevelopmentVersion("groupId:module1") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:module1") );
     }
 
     @Test
@@ -1942,9 +1938,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "3.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "3.1-SNAPSHOT" ,
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion("groupId:artifactId" ) );
     }
 
     @Test
@@ -1966,9 +1962,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "3.1-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "3.1-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -1990,9 +1986,9 @@ public class MapVersionsPhaseTest
         phase.execute( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "3.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "3.0-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     @Test
@@ -2014,9 +2010,9 @@ public class MapVersionsPhaseTest
         phase.simulate( builder.build(), new DefaultReleaseEnvironment(), reactorProjects );
 
         // verify
-        assertEquals( "Check development versions", Collections.singletonMap( "groupId:artifactId", "3.0-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertNull( "Check release versions", builder.build().getReleaseVersions().get( "groupId:artifactId" ) );
+        assertEquals( "Check development versions", "3.0-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertNull( "Check release versions", builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     // MRELEASE-511
@@ -2041,10 +2037,10 @@ public class MapVersionsPhaseTest
 
         // verify
         assertEquals( "Check development versions",
-                      Collections.singletonMap( "groupId:artifactId", "MYB_200909-SNAPSHOT" ),
-                      builder.build().getDevelopmentVersions() );
-        assertEquals( "Check release versions", Collections.singletonMap( "groupId:artifactId", "PPX" ),
-                      builder.build().getReleaseVersions() );
+                      "MYB_200909-SNAPSHOT",
+                      builder.build().getProjectDevelopmentVersion("groupId:artifactId") );
+        assertEquals( "Check release versions", "PPX",
+                      builder.build().getProjectReleaseVersion( "groupId:artifactId" ) );
     }
 
     // MRELEASE-269
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
index d926ef5..7dda662 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractReleaseMojo.java
@@ -22,8 +22,8 @@ package org.apache.maven.plugins.release;
 import java.io.File;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map.Entry;
 
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugins.annotations.Component;
@@ -31,7 +31,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.shared.release.ReleaseManager;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
@@ -154,13 +153,19 @@ public abstract class AbstractReleaseMojo
     protected ReleaseDescriptorBuilder createReleaseDescriptor()
     {
         ReleaseDescriptorBuilder descriptor = new ReleaseDescriptorBuilder();
-
+        
         descriptor.setInteractive( settings.isInteractiveMode() );
 
         descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
 
         descriptor.setPomFileName( pomFileName );
 
+        for ( MavenProject project : reactorProjects )
+        {
+            String versionlessKey = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+            descriptor.putOriginalVersion( versionlessKey, project.getVersion() );
+        }
+
         List<String> profileIds = session.getRequest().getActiveProfiles();
         String additionalProfiles = getAdditionalProfiles();
 
@@ -272,26 +277,4 @@ public abstract class AbstractReleaseMojo
             arguments = argument;
         }
     }
-
-    /**
-     * This method takes some of the release configuration picked up from the command line system properties and copies
-     * it into the release config object.
-     *
-     * @param config The release configuration to merge the system properties into, must not be <code>null</code>.
-     * @param sysPropertiesConfig The configuration from the system properties to merge in, must not be
-     *            <code>null</code>.
-     */
-    protected void mergeCommandLineConfig( ReleaseDescriptorBuilder config, ReleaseDescriptor sysPropertiesConfig )
-    {
-        // If the user specifies versions, these should override the existing versions
-        for ( Entry<String, String> entry : sysPropertiesConfig.getReleaseVersions().entrySet() )
-        {
-            config.addReleaseVersion( entry.getKey(), entry.getValue() );
-        }
-
-        for ( Entry<String, String> entry : sysPropertiesConfig.getDevelopmentVersions().entrySet() )
-        {
-            config.addDevelopmentVersion( entry.getKey(), entry.getValue() );
-        }
-    }
 }
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
index d99beae..4215598 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
@@ -28,7 +28,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.shared.release.ReleaseBranchRequest;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
 import org.apache.maven.shared.release.config.ReleaseUtils;
 
@@ -218,7 +217,7 @@ public class BranchReleaseMojo
     {
         super.execute();
 
-        ReleaseDescriptorBuilder config = createReleaseDescriptor();
+        final ReleaseDescriptorBuilder config = createReleaseDescriptor();
         config.setAddSchema( addSchema );
         config.setScmUseEditMode( useEditMode );
         config.setUpdateDependencies( updateDependencies );
@@ -237,9 +236,20 @@ public class BranchReleaseMojo
         config.setProjectNamingPolicyId( projectBranchNamingPolicyId );
 
         // Create a config containing values from the session properties (ie command line properties with cli).
-        ReleaseDescriptor sysPropertiesConfig
-                = ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties() );
-        mergeCommandLineConfig( config, sysPropertiesConfig );
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties(), new ReleaseDescriptorBuilder()
+        {
+            public ReleaseDescriptorBuilder addDevelopmentVersion( String key, String value )
+            {
+                config.addDevelopmentVersion( key, value );
+                return this;
+            }
+
+            public ReleaseDescriptorBuilder addReleaseVersion( String key, String value )
+            {
+                config.addReleaseVersion( key, value );
+                return this;
+            };
+        } );
 
         if ( checkModificationExcludeList != null )
         {
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index d6f23c9..a49f985 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -28,7 +28,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleasePrepareRequest;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
 import org.apache.maven.shared.release.config.ReleaseUtils;
 
@@ -260,7 +259,7 @@ public class PrepareReleaseMojo
         // above
         super.execute();
 
-        ReleaseDescriptorBuilder config = createReleaseDescriptor();
+        final ReleaseDescriptorBuilder config = createReleaseDescriptor();
         config.setAddSchema( addSchema );
         config.setGenerateReleasePoms( generateReleasePoms );
         config.setScmUseEditMode( useEditMode );
@@ -291,9 +290,20 @@ public class PrepareReleaseMojo
         }
 
         // Create a config containing values from the session properties (ie command line properties with cli).
-        ReleaseDescriptor sysPropertiesConfig =
-            ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties() );
-        mergeCommandLineConfig( config, sysPropertiesConfig );
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties(), new ReleaseDescriptorBuilder()
+        {
+            public ReleaseDescriptorBuilder addDevelopmentVersion( String key, String value )
+            {
+                config.addDevelopmentVersion( key, value );
+                return this;
+            }
+
+            public ReleaseDescriptorBuilder addReleaseVersion( String key, String value )
+            {
+                config.addReleaseVersion( key, value );
+                return this;
+            };
+        } );
         
         ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest();
         prepareRequest.setReleaseDescriptor( config.build() );
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 f4a1398..4c540bd 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
@@ -27,7 +27,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleaseUpdateVersionsRequest;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
 import org.apache.maven.shared.release.config.ReleaseUtils;
 
@@ -99,7 +98,7 @@ public class UpdateVersionsMojo
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
-        ReleaseDescriptorBuilder config = createReleaseDescriptor();
+        final ReleaseDescriptorBuilder config = createReleaseDescriptor();
         config.setAddSchema( addSchema );
         config.setAutoVersionSubmodules( autoVersionSubmodules );
         config.setDefaultDevelopmentVersion( developmentVersion );
@@ -111,9 +110,20 @@ public class UpdateVersionsMojo
                                    project.getScm() );
 
         // Create a config containing values from the session properties (ie command line properties with cli).
-        ReleaseDescriptor sysPropertiesConfig =
-            ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties() );
-        mergeCommandLineConfig( config, sysPropertiesConfig );
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( session.getUserProperties(), new ReleaseDescriptorBuilder()
+        {
+            public ReleaseDescriptorBuilder addDevelopmentVersion( String key, String value )
+            {
+                config.addDevelopmentVersion( key, value );
+                return this;
+            }
+
+            public ReleaseDescriptorBuilder addReleaseVersion( String key, String value )
+            {
+                config.addReleaseVersion( key, value );
+                return this;
+            };
+        } );
 
         try
         {
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PerformReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PerformReleaseMojoTest.java
index 5aa34f7..ca26b2c 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PerformReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PerformReleaseMojoTest.java
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.File;
 import java.util.Arrays;
+import java.util.List;
 
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.DistributionManagement;
@@ -58,7 +59,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -75,7 +76,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
         verifyNoMoreInteractions( mock );
     }
@@ -85,7 +86,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-flat-structure.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -103,7 +104,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
         verifyNoMoreInteractions( mock );
     }
@@ -120,7 +121,7 @@ public class PerformReleaseMojoTest
         MavenProject project = (MavenProject) getVariableValueFromObject( mojo, "project" );
         setVariableValueToObject( mojo, "session", newMavenSession( project ) );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -137,7 +138,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
         verifyNoMoreInteractions( mock );
     }
@@ -163,7 +164,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -190,7 +191,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
@@ -201,7 +202,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -230,7 +231,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
@@ -241,7 +242,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-scm.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -259,7 +260,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
@@ -270,7 +271,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -297,7 +298,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
@@ -308,7 +309,7 @@ public class PerformReleaseMojoTest
     {
         PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-args.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -335,7 +336,7 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
@@ -346,7 +347,7 @@ public class PerformReleaseMojoTest
     {
 	    PerformReleaseMojo mojo = getMojoWithProjectSite( "perform-with-multiline-goals.xml" );
 
-        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder( mojo );
         builder.setWorkingDirectory( workingDirectory.getAbsolutePath() );
         File checkoutDirectory = getTestFile( "target/checkout" );
         builder.setCheckoutDirectory( checkoutDirectory.getAbsolutePath() );
@@ -363,12 +364,26 @@ public class PerformReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment()  );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
 
         verifyNoMoreInteractions( mock );
     }
 
+    private ReleaseDescriptorBuilder createReleaseDescriptorBuilder( PerformReleaseMojo mojo ) throws Exception
+    {
+        ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
+        
+        @SuppressWarnings( "unchecked" )
+        List<MavenProject> reactorProjects = (List<MavenProject>) getVariableValueFromObject( mojo, "reactorProjects" );
+        
+        for ( MavenProject project : reactorProjects )
+        {
+            builder.putOriginalVersion( project.getGroupId() + ':' + project.getArtifactId(), project.getVersion() );
+        }
+        
+        return builder;
+    }
 
     protected void setUp()
         throws Exception
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
index 0ee8604..cea9250 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java
@@ -22,7 +22,7 @@ package org.apache.maven.plugins.release;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assert.assertThat;
 
 import static org.mockito.Matchers.isA;
@@ -91,7 +91,7 @@ public class PrepareReleaseMojoTest
         
         assertThat( prepareRequest.getValue().getReleaseDescriptor(), is( builder.build() ) );
         assertThat( prepareRequest.getValue().getReleaseEnvironment(), is(instanceOf( ReleaseEnvironment.class ) ) );
-        assertThat( prepareRequest.getValue().getReactorProjects(), is( nullValue() ) );
+        assertThat( prepareRequest.getValue().getReactorProjects(), is( notNullValue() ) );
         assertThat( prepareRequest.getValue().getResume(), is( true ) );
         assertThat( prepareRequest.getValue().getDryRun(), is( false ) );
     }
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
index e4a4feb..4884554 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
@@ -72,7 +72,7 @@ public class StageReleaseMojoTest
         verify( mock ).perform( argument.capture() );
         assertEquals( builder.build(), argument.getValue().getReleaseDescriptor() );
         assertNotNull( argument.getValue().getReleaseEnvironment() );
-        assertNull( argument.getValue().getReactorProjects() );
+        assertNotNull( argument.getValue().getReactorProjects() );
         assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
         verifyNoMoreInteractions( mock );
     }
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/FlatMultiModuleMavenProjectStub.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/FlatMultiModuleMavenProjectStub.java
index 99ee9e2..7617d41 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/FlatMultiModuleMavenProjectStub.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/FlatMultiModuleMavenProjectStub.java
@@ -82,5 +82,22 @@ public class FlatMultiModuleMavenProjectStub
         
         return scm;
     }
-
+    
+    @Override
+    public String getGroupId()
+    {
+        return "GROUPID";
+    }
+    
+    @Override
+    public String getArtifactId()
+    {
+        return "ARTIFACTID";
+    }
+    
+    @Override
+    public String getVersion()
+    {
+        return "VERSION";
+    }
 }
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/MavenProjectStub.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/MavenProjectStub.java
index 44f654f..63eefa4 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/MavenProjectStub.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/stubs/MavenProjectStub.java
@@ -54,4 +54,22 @@ public class MavenProjectStub
     {
         return getModel().getDistributionManagement();
     }
+    
+    @Override
+    public String getGroupId()
+    {
+        return "GROUPID";
+    }
+    
+    @Override
+    public String getArtifactId()
+    {
+        return "ARTIFACTID";
+    }
+    
+    @Override
+    public String getVersion()
+    {
+        return "VERSION";
+    }
 }
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-args.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-args.xml
index 1ea3faa..14af0dc 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-args.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-args.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
           <useReleaseProfile>true</useReleaseProfile>
 		  <goals>deploy site-deploy</goals>		  
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-flat-structure.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-flat-structure.xml
index 074acfe..32e25fc 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-flat-structure.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-flat-structure.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.FlatMultiModuleMavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.FlatMultiModuleMavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
           <useReleaseProfile>true</useReleaseProfile>
           <connectionUrl>scm:svn:file://localhost/target/svnroot/flat-multi-module/trunk/root-project</connectionUrl>
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-multiline-goals.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-multiline-goals.xml
index ad13c48..f544639 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-multiline-goals.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-multiline-goals.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
           <useReleaseProfile>true</useReleaseProfile>
  		  <goals>
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-scm.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-scm.xml
index 02849c9..cb8a866 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform-with-scm.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform-with-scm.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
           <useReleaseProfile>true</useReleaseProfile>
           <connectionUrl>scm-url</connectionUrl>
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform-without-site.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform-without-site.xml
index c4d826a..be9fcbb 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform-without-site.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform-without-site.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
 		  <goals>deploy</goals>
           <useReleaseProfile>true</useReleaseProfile>
diff --git a/maven-release-plugin/src/test/resources/mojos/perform/perform.xml b/maven-release-plugin/src/test/resources/mojos/perform/perform.xml
index 87b529f..0580f00 100644
--- a/maven-release-plugin/src/test/resources/mojos/perform/perform.xml
+++ b/maven-release-plugin/src/test/resources/mojos/perform/perform.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
 		  <goals>deploy site-deploy</goals>
           <useReleaseProfile>true</useReleaseProfile>
diff --git a/maven-release-plugin/src/test/resources/mojos/prepare/prepare.xml b/maven-release-plugin/src/test/resources/mojos/prepare/prepare.xml
index bec7b49..623ff2b 100644
--- a/maven-release-plugin/src/test/resources/mojos/prepare/prepare.xml
+++ b/maven-release-plugin/src/test/resources/mojos/prepare/prepare.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugin.testing.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <resume>true</resume>
         </configuration>
       </plugin>
diff --git a/maven-release-plugin/src/test/resources/mojos/stage/stage.xml b/maven-release-plugin/src/test/resources/mojos/stage/stage.xml
index a8f5ea0..d1ac583 100644
--- a/maven-release-plugin/src/test/resources/mojos/stage/stage.xml
+++ b/maven-release-plugin/src/test/resources/mojos/stage/stage.xml
@@ -26,6 +26,9 @@
         <configuration>
           <settings implementation="org.apache.maven.settings.Settings"/>
           <project implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          <reactorProjects>
+            <reactorProject implementation="org.apache.maven.plugins.release.stubs.MavenProjectStub"/>
+          </reactorProjects>
           <workingDirectory>${basedir}/target/checkout</workingDirectory>
           <stagingRepository>staging</stagingRepository>
 		  <goals>deploy site-deploy</goals>

-- 
To stop receiving notification emails like this one, please contact
rfscholte@apache.org.