Index: maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
===================================================================
--- maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java	(revision 1061334)
+++ maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java	(working copy)
@@ -25,7 +25,9 @@
 import java.util.Set;
 
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.lifecycle.*;
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.plugin.MojoExecution;
@@ -45,6 +47,11 @@
         return new MavenExecutionPlan( null, new DefaultLifecycles() );
     }
 
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+    {
+        return new MavenExecutionPlan( null, new DefaultLifecycles() );
+    }
+
     public void execute( MavenSession session )
     {
     }
Index: maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
===================================================================
--- maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java	(revision 1061334)
+++ maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java	(working copy)
@@ -111,7 +111,8 @@
         // Maybe do something ?
     }
 
-    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks,
+                                                      boolean setup )
         throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
         PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
         NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
@@ -131,6 +132,21 @@
         return createExecutionPlan( project, me );
     }
 
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+        throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+        PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+        NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+    {
+        return calculateExecutionPlan( session, project, tasks, true );
+    }
+
+    public void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+        throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+        MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+        LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+    {
+    }
+
     public static MavenExecutionPlan getProjectAExceutionPlan()
         throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
         PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
Index: maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
===================================================================
--- maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java	(revision 1061334)
+++ maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java	(working copy)
@@ -46,6 +46,11 @@
         return new MavenExecutionPlan( null, null );
     }
 
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+    {
+        return new MavenExecutionPlan( null, null );
+    }
+    
     public void execute( MavenSession session )
     {
     }
Index: maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java	(working copy)
@@ -71,6 +71,12 @@
         PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
         PluginVersionResolutionException;
 
+    MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+        throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+        MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+        PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+        PluginVersionResolutionException;
+
     void execute( MavenSession session );
 
     // used by the site plugin 3.x
Index: maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java	(working copy)
@@ -128,14 +128,14 @@
     // Used by m2eclipse
 
     @SuppressWarnings( { "UnusedDeclaration" } )
-    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
         PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
         PluginVersionResolutionException
     {
 
-        List<TaskSegment> taskSegments = lifecycleTaskSegmentCalculator.calculateTaskSegments( session );
+        List<TaskSegment> taskSegments = lifecycleTaskSegmentCalculator.calculateTaskSegments( session, tasks );
 
         TaskSegment mergedSegment = new TaskSegment( false );
 
@@ -145,9 +145,18 @@
         }
 
         return lifecycleExecutionPlanCalculator.calculateExecutionPlan( session, session.getCurrentProject(),
-                                                                        mergedSegment.getTasks() );
+                                                                        mergedSegment.getTasks(), setup );
     }
 
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+        throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+        MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+        PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+        PluginVersionResolutionException
+    {
+        return calculateExecutionPlan( session, true, tasks );
+    }
+
     // Site 3.x
     public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
         throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
Index: maven-core/src/main/java/org/apache/maven/lifecycle/DefaultSchedules.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/DefaultSchedules.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/DefaultSchedules.java	(working copy)
@@ -54,7 +54,7 @@
         List<ExecutionPlanItem> result = new ArrayList<ExecutionPlanItem>();
         for ( MojoExecution mojoExecution : executions )
         {
-            String lifeCyclePhase = mojoExecution.getMojoDescriptor().getPhase();
+            String lifeCyclePhase = mojoExecution.getLifecyclePhase();
             final Scheduling scheduling = getScheduling( "default" );
             Schedule schedule = null;
             if ( scheduling != null )
Index: maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java	(working copy)
@@ -48,11 +48,20 @@
         PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
         NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException;
 
+    MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks,
+                                               boolean setup )
+        throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+        PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+        NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException;
+
     void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
         throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
         PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
         LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException;
 
+    void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+        throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+        MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+        LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException;
 
-
 }
Index: maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java	(working copy)
@@ -65,7 +65,7 @@
     {
     }
 
-    public List<TaskSegment> calculateTaskSegments( MavenSession session )
+    public List<TaskSegment> calculateTaskSegments( MavenSession session, String... tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
         PluginVersionResolutionException, LifecyclePhaseNotFoundException, LifecycleNotFoundException
@@ -73,17 +73,15 @@
 
         MavenProject rootProject = session.getTopLevelProject();
 
-        List<String> tasks = session.getGoals();
-
-        if ( tasks == null || tasks.isEmpty() )
+        if ( tasks == null || tasks.length == 0 )
         {
             if ( !StringUtils.isEmpty( rootProject.getDefaultGoal() ) )
             {
-                tasks = Arrays.asList( StringUtils.split( rootProject.getDefaultGoal() ) );
+                tasks = StringUtils.split( rootProject.getDefaultGoal() );
             }
         }
 
-        return calculateTaskSegments( session, tasks );
+        return calculateTaskSegments( session, Arrays.asList( tasks ) );
     }
 
     public List<TaskSegment> calculateTaskSegments( MavenSession session, List<String> tasks )
Index: maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java	(working copy)
@@ -14,6 +14,16 @@
  */
 package org.apache.maven.lifecycle.internal;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.DefaultLifecycles;
 import org.apache.maven.lifecycle.DefaultSchedules;
@@ -45,18 +55,6 @@
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
 /**
  * @since 3.0
  * @author Benjamin Bentmann
@@ -104,7 +102,7 @@
         this.defaultSchedules = defaultSchedules;
     }
 
-    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks, boolean setup )
         throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
         PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
         NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
@@ -113,42 +111,61 @@
 
         final List<MojoExecution> executions = calculateMojoExecutions( session, project, tasks );
 
-        setupMojoExections( session, project, executions );
+        if ( setup )
+        {
+            setupMojoExecutions( session, project, executions );
+        }
 
         final List<ExecutionPlanItem> planItem = defaultSchedules.createExecutionPlanItem( project, executions );
 
         return new MavenExecutionPlan( planItem, defaultLifeCycles );
     }
 
-    private void setupMojoExections( MavenSession session, MavenProject project, List<MojoExecution> mojoExecutions )
+    public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+        throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+        PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+        NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+    {
+        return calculateExecutionPlan( session, project, tasks, true );
+    }
+
+    private void setupMojoExecutions( MavenSession session, MavenProject project, List<MojoExecution> mojoExecutions )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
         LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
     {
         for ( MojoExecution mojoExecution : mojoExecutions )
         {
-            MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+            setupMojoExecution( session, project, mojoExecution );
+        }
+    }
 
-            if ( mojoDescriptor == null )
-            {
-                mojoDescriptor =
-                    pluginManager.getMojoDescriptor( mojoExecution.getPlugin(), mojoExecution.getGoal(),
-                                                     project.getRemotePluginRepositories(),
-                                                     session.getRepositorySession() );
+    public void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+        throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+        MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+        LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+    {
+        MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
-                mojoExecution.setMojoDescriptor( mojoDescriptor );
-            }
+        if ( mojoDescriptor == null )
+        {
+            mojoDescriptor =
+                pluginManager.getMojoDescriptor( mojoExecution.getPlugin(), mojoExecution.getGoal(),
+                                                 project.getRemotePluginRepositories(),
+                                                 session.getRepositorySession() );
 
-            populateMojoExecutionConfiguration( project, mojoExecution,
-                                                MojoExecution.Source.CLI.equals( mojoExecution.getSource() ) );
+            mojoExecution.setMojoDescriptor( mojoDescriptor );
+        }
 
-            finalizeMojoConfiguration( mojoExecution );
+        populateMojoExecutionConfiguration( project, mojoExecution,
+                                            MojoExecution.Source.CLI.equals( mojoExecution.getSource() ) );
 
-            calculateForkedExecutions( mojoExecution, session, project, new HashSet<MojoDescriptor>() );
-        }
+        finalizeMojoConfiguration( mojoExecution );
+
+        calculateForkedExecutions( mojoExecution, session, project, new HashSet<MojoDescriptor>() );
     }
-
-    private List<MojoExecution> calculateMojoExecutions( MavenSession session, MavenProject project,
+    
+    public List<MojoExecution> calculateMojoExecutions( MavenSession session, MavenProject project,
                                                          List<Object> tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
Index: maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
===================================================================
--- maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java	(revision 1061334)
+++ maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java	(working copy)
@@ -46,7 +46,7 @@
 
 public interface LifecycleTaskSegmentCalculator
 {
-    List<TaskSegment> calculateTaskSegments( MavenSession session )
+    List<TaskSegment> calculateTaskSegments( MavenSession session, String... tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
         PluginVersionResolutionException, LifecyclePhaseNotFoundException, LifecycleNotFoundException;
