diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index ce86e3b936..66e39ba424 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -161,6 +161,19 @@
org.codehaus.plexusplexus-component-metadata
+
+ org.sonatype.plugins
+ sisu-maven-plugin
+ 1.1
+
+
+
+ main-index
+ test-index
+
+
+
+ org.codehaus.modellomodello-maven-plugin
diff --git a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
index 41c7dc2906..a30a47ecf0 100644
--- a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
+++ b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
@@ -139,6 +139,7 @@ private void importMavenApi( Map imports )
imports.put( "org.apache.maven.configuration", coreRealm );
imports.put( "org.apache.maven.exception", coreRealm );
imports.put( "org.apache.maven.execution", coreRealm );
+ imports.put( "org.apache.maven.execution.scope", coreRealm );
imports.put( "org.apache.maven.lifecycle", coreRealm );
imports.put( "org.apache.maven.model", coreRealm );
imports.put( "org.apache.maven.monitor", coreRealm );
diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionListener.java b/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionListener.java
new file mode 100644
index 0000000000..7a9c84b4a7
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionListener.java
@@ -0,0 +1,48 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Helper interface that allows mojo execution scoped components to be notified before execution start and after
+ * execution completion. The main purpose of this interface is to allow mojo execution scoped components perform setup
+ * before and cleanup after mojo execution.
+ *
+ * TODO decide if Mojo should be passed as parameter of callback methods
+ *
+ * @author igor
+ * @since 3.1.2
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface MojoExecutionListener
+{
+ // TODO decide if this is needed
+ // public void beforeExecution() throws MojoExecutionException;
+
+ public void afterMojoExecutionSuccess()
+ throws MojoExecutionException;
+
+ // TODO decide if this is needed.
+ // public void afterExecutionFailure(Throwable t) throws MojoExecutionException;
+
+ public void afterMojoExecutionAlways()
+ throws MojoExecutionException;
+}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java b/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
new file mode 100644
index 0000000000..c53297cb88
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
@@ -0,0 +1,42 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.ScopeAnnotation;
+
+/**
+ * Indicates that annotated component should be instantiated before mojo execution starts and discarded after mojo
+ * execution completes.
+ *
+ * @author igor
+ * @since 3.1.2
+ */
+@Target( { TYPE } )
+@Retention( RUNTIME )
+@ScopeAnnotation
+public @interface MojoExecutionScoped
+{
+}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionModule.java b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionModule.java
new file mode 100644
index 0000000000..65ba1817e1
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionModule.java
@@ -0,0 +1,45 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Named;
+
+import org.apache.maven.execution.scope.MojoExecutionScoped;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import com.google.inject.name.Names;
+
+@Named
+public class MojoExecutionModule
+ implements Module
+{
+
+ public void configure( Binder binder )
+ {
+ final MojoExecutionScope executionScope = new MojoExecutionScope();
+
+ // tell Guice about the scope
+ binder.bindScope( MojoExecutionScoped.class, executionScope );
+
+ // make our scope instance injectable
+ binder.bind( MojoExecutionScope.class ).annotatedWith( Names.named( MojoExecutionScope.SCOPE_NAME ) ).toInstance( executionScope );
+ }
+}
diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
new file mode 100644
index 0000000000..3d021fdd80
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
@@ -0,0 +1,200 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.scope.MojoExecutionListener;
+import org.apache.maven.execution.scope.MojoExecutionScoped;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import com.google.common.collect.Maps;
+import com.google.inject.AbstractModule;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import com.google.inject.util.Providers;
+
+public class MojoExecutionScope
+ implements Scope
+{
+ public static final String SCOPE_NAME = "mojoExecution";
+
+ private static final Provider