Index: maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
===================================================================
--- maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java	(revision 773491)
+++ maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java	(working copy)
@@ -3,6 +3,9 @@
  */
 package org.apache.maven.shared.release.util;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.codehaus.plexus.PlexusTestCase;
 
 /**
@@ -22,5 +25,61 @@
         assertNull( ReleaseUtil.getReleasePom( null ) );
         assertNull( ReleaseUtil.getStandardPom( null ) );
     }
+    
+    public void testGetBaseWorkingDirOfFlatMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "../core" );
+        modules.add( "../webapp" );
 
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS +
+                          "root-project", modules ) );
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS +
+                          "root-project" + ReleaseUtil.FS, modules ) );
+    }
+
+    public void testGetBaseWorkingDirectoryOfRegularMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "core" );
+        modules.add( "webapp" );
+
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module", modules ) );
+        assertEquals( "/working/directory/flat-multi-module",
+                      ReleaseUtil.getBaseWorkingDirectory( "/working/directory/flat-multi-module" + ReleaseUtil.FS,
+                                                           modules ) );
+    }
+
+    public void testGetBaseScmUrlOfFlatMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "../core" );
+        modules.add( "../webapp" );
+
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project",
+                                                 modules ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project/",
+                                                 modules ) );
+    }
+
+    public void testGetBaseScmUrlOfRegularMultiModule()
+        throws Exception
+    {
+        List modules = new ArrayList();
+        modules.add( "core" );
+        modules.add( "webapp" );
+
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", modules ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.getBaseScmUrl( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/", modules ) );
+    }
 }
Index: maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java
===================================================================
--- maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java	(revision 773491)
+++ maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java	(working copy)
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTagParameters;
@@ -35,8 +37,14 @@
 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.apache.maven.shared.release.util.ReleaseUtil;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
 import java.util.List;
 
 /**
@@ -66,10 +74,56 @@
 
         ScmRepository repository;
         ScmProvider provider;
+        
+        String workingDirectory = releaseDescriptor.getWorkingDirectory();
+        String scmSourceUrl = releaseDescriptor.getScmSourceUrl();
+
         try
         {
+            String pomFile = releaseDescriptor.getPomFileName();
+            if ( pomFile == null || "".equals( pomFile.trim() ) )
+            {
+                pomFile = ReleaseUtil.POMv4;
+            }
+
+            String pathToRootPom = workingDirectory + ReleaseUtil.FS + pomFile;
+
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+            Reader in = new FileReader( new File( pathToRootPom ) );
+
+            Model model = reader.read( in );
+            List modules = model.getModules();
+
+            // determine if project is a flat multi-module
+            if ( modules != null && !modules.isEmpty() )
+            {
+                workingDirectory = ReleaseUtil.getBaseWorkingDirectory( workingDirectory, modules );
+                scmSourceUrl = ReleaseUtil.getBaseScmUrl( scmSourceUrl, modules );
+            }
+        }
+        catch ( FileNotFoundException e )
+        {
+            getLogger().warn( "Pom file not found : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+
+        }
+        catch ( IOException e )
+        {
+            getLogger().warn( "IO error occurred while reading pom file : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+        }
+        catch ( XmlPullParserException e )
+        {
+            getLogger().warn( "Error parsing pom file : " + e.getMessage() );
+            getLogger().warn( "Assuming working directory in release descriptor is the base working directory." );
+        }
+        
+        try
+        {              
+            releaseDescriptor.setScmSourceUrl( scmSourceUrl );
+            
             repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
-
+            
             provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
         }
         catch ( ScmRepositoryException e )
@@ -85,7 +139,7 @@
         try
         {
             // TODO: want includes/excludes?
-            ScmFileSet fileSet = new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ) );
+            ScmFileSet fileSet = new ScmFileSet( new File( workingDirectory ) );
             String tagName = releaseDescriptor.getScmReleaseLabel();
             ScmTagParameters scmTagParameters = new ScmTagParameters( releaseDescriptor.getScmCommentPrefix()
                 + " copy for tag " + tagName );
@@ -136,4 +190,5 @@
             throw new ReleaseFailureException( "A release label is required for committing" );
         }
     }
+    
 }
Index: maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
===================================================================
--- maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java	(revision 773491)
+++ maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java	(working copy)
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -37,12 +38,17 @@
 {
     public static final String RELEASE_POMv4 = "release-pom.xml";
 
-    private static final String POMv4 = "pom.xml";
+    public static final String POMv4 = "pom.xml";
 
     /**
      * The line separator to use.
      */
     public static final String LS = System.getProperty( "line.separator" );
+    
+    /**
+     * The path separator to use.
+     */
+    public static final String FS = System.getProperty( "file.separator" );
 
     private ReleaseUtil()
     {
@@ -138,5 +144,94 @@
         }
         return norm;
     }
-
+    
+    /**
+     * Determines the base working directory with regard to the longest relative path of the modules. 
+     * 
+     * @param workingDirectory The working directory of the project to be released
+     * @param modules The \<modules\> of the project to be released
+     * @return The base working directory of the project
+     */
+    public static String getBaseWorkingDirectory( String workingDirectory, List modules )
+    {
+        int count = getLongestPathCount( modules );
+        workingDirectory = StringUtils.chomp( workingDirectory, FS );
+        
+        while( count > 0 )
+        {   
+            int lastSep = workingDirectory.lastIndexOf( FS );
+            workingDirectory = StringUtils.substring( workingDirectory, 0, lastSep );            
+            count--;
+        }
+        return workingDirectory;
+    }
+    
+    /**
+     * Determines the base scm url with regard to the longest relative path of the modules.
+     * 
+     * @param scmUrl The scm source url of the project to be released which is set in the release descriptor.
+     * @param modules The \<modules\> of the project to be released
+     * @return
+     */
+    public static String getBaseScmUrl( String scmUrl, List modules )
+    {
+        int count = getLongestPathCount( modules );                
+        scmUrl = StringUtils.chomp( scmUrl, "/" );
+        
+        while( count > 0 )
+        {   
+            int lastSep = scmUrl.lastIndexOf( "/" );
+            scmUrl = StringUtils.substring( scmUrl, 0, lastSep );        
+            count--;
+        }
+        return scmUrl;
+    }
+    
+    /**
+     * Returns the common path of the two paths specified.
+     * 
+     * @param path1 The first path
+     * @param path2 The second path
+     * @return The common path of the two paths.
+     */
+    public static String getCommonPath( String path1, String path2 )
+    {
+        if ( path2 == null || path2.equals( "" ) )
+        {
+            return path1;
+        }
+        else
+        {
+            int indexDiff = StringUtils.indexOfDifference( path1, path2 );
+            if( indexDiff != -1 )
+            {
+                return path1.substring( 0, indexDiff );
+            }
+            else
+            {
+                return path1;
+            }
+        }
+    }
+    
+    private static int getLongestPathCount( List modules )
+    {
+        int count = 0;
+        for( Iterator iter = modules.iterator(); iter.hasNext(); )
+        {
+            String module = ( String ) iter.next();
+            module = StringUtils.replace( module, "\\", "/" );
+            
+            // module is a path
+            if( module.indexOf( '/' ) != -1 )
+            {   
+                int tmp = StringUtils.countMatches( module, "/" );
+                if( tmp > count )
+                {
+                    count = tmp;
+                }
+            }                    
+        }
+        return count;
+    }
 }
Index: maven-release-manager/pom.xml
===================================================================
--- maven-release-manager/pom.xml	(revision 773491)
+++ maven-release-manager/pom.xml	(working copy)
@@ -96,9 +96,20 @@
       <version>2.0.9</version>
     </dependency>
     <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.4</version>
+    </dependency>
+    <dependency>
       <groupId>commons-cli</groupId>
       <artifactId>commons-cli</artifactId>
       <version>1.0</version>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <!-- scm dependencies -->

