diff --git a/pom.xml b/pom.xml
index 7dd403f..615d7c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@
   <!--
   https://issues.apache.org/jira/browse/MSHARED-625
   -->
-  <version>4.0.0-SNAPSHOT</version>
+  <version>3.0.1-SNAPSHOT</version>
 
   <name>Apache Maven Invoker</name>
   <description>A component to programmatically invoke Maven.</description>
diff --git a/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java b/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
index 782a269..ce19368 100644
--- a/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
@@ -104,6 +104,8 @@
 
     private String builderId;
 
+    private int timeoutInSeconds = NO_TIMEOUT;
+
     public File getBaseDirectory()
     {
         return basedir;
@@ -584,4 +586,16 @@
         return this.builderId;
     }
 
+
+    @Override
+    public int getTimeoutInSeconds()
+    {
+        return timeoutInSeconds;
+    }
+
+    @Override
+    public void setTimeoutInSeconds( int timeoutInSeconds )
+    {
+        this.timeoutInSeconds = timeoutInSeconds;
+    }
 }
diff --git a/src/main/java/org/apache/maven/shared/invoker/DefaultInvoker.java b/src/main/java/org/apache/maven/shared/invoker/DefaultInvoker.java
index 3ef26c3..e58d131 100644
--- a/src/main/java/org/apache/maven/shared/invoker/DefaultInvoker.java
+++ b/src/main/java/org/apache/maven/shared/invoker/DefaultInvoker.java
@@ -39,8 +39,6 @@
 
     public static final String ROLE_HINT = "default";
 
-    private static final int NO_TIMEOUT = 0;
-
     private static final InvokerLogger DEFAULT_LOGGER = new SystemOutLogger();
 
     private static final InvocationOutputHandler DEFAULT_OUTPUT_HANDLER = new SystemOutHandler();
@@ -62,12 +60,6 @@
     private InvocationOutputHandler errorHandler = DEFAULT_OUTPUT_HANDLER;
 
     public InvocationResult execute( InvocationRequest request )
-            throws MavenInvocationException
-    {
-        return this.execute( request , NO_TIMEOUT );
-    }
-
-    public InvocationResult execute( InvocationRequest request, int timeoutInSeconds )
         throws MavenInvocationException
     {
         MavenCommandLineBuilder cliBuilder = new MavenCommandLineBuilder();
@@ -116,7 +108,7 @@
 
         try
         {
-            int exitCode = executeCommandLine( cli, request, timeoutInSeconds );
+            int exitCode = executeCommandLine( cli, request, request.getTimeoutInSeconds() );
 
             result.setExitCode( exitCode );
         }
diff --git a/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java b/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
index 86f21a4..433bf5f 100644
--- a/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
@@ -722,4 +722,17 @@
      */
     String getBuilder();
 
+    int NO_TIMEOUT = 0;
+    /**
+     * @since 3.0.1
+     * @return the timeout in seconds to execute the project
+     */
+    int getTimeoutInSeconds();
+
+    /**
+     * @since 3.0.1
+     * @param timeoutInSeconds the timeout in seconds to execute the project
+     */
+    void setTimeoutInSeconds( int timeoutInSeconds );
+
 }
diff --git a/src/main/java/org/apache/maven/shared/invoker/Invoker.java b/src/main/java/org/apache/maven/shared/invoker/Invoker.java
index 10574f6..580e7b3 100644
--- a/src/main/java/org/apache/maven/shared/invoker/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/invoker/Invoker.java
@@ -48,19 +48,6 @@
         throws MavenInvocationException;
 
     /**
-     * Executes Maven using the parameters specified by the given invocation request. Parameters not specified by the
-     * invocation request will be derived from the state of this invoker instance. In case both the invoker instance and
-     * the invocation request provide a value for a particular option, the value from the invocation request dominates.
-     *
-     * @param request The invocation request to execute, must not be <code>null</code>.
-     * @param timeoutInSeconds If a value > 0 is specified, the goal might be interrupted after the timeout is reached.
-     * @return The result of the Maven invocation, never <code>null</code>.
-     * @throws MavenInvocationException
-     */
-    InvocationResult execute( InvocationRequest request, int timeoutInSeconds )
-            throws MavenInvocationException;
-
-    /**
      * Gets the path to the base directory of the local repository to use for the Maven invocation.
      * 
      * @return The path to the base directory of the local repository or <code>null</code> to use the location from
diff --git a/src/test/java/org/apache/maven/shared/invoker/DefaultInvokerTest.java b/src/test/java/org/apache/maven/shared/invoker/DefaultInvokerTest.java
index 00c4abb..ba51a16 100644
--- a/src/test/java/org/apache/maven/shared/invoker/DefaultInvokerTest.java
+++ b/src/test/java/org/apache/maven/shared/invoker/DefaultInvokerTest.java
@@ -99,6 +99,7 @@
         request.setBaseDirectory( basedir );
         request.setDebug( true );
         request.setGoals( Arrays.asList( "clean", "package" ) );
+        request.setTimeoutInSeconds( 4 );
 
         if ( !System.getProperty( "java.version" ).startsWith( "1." ) )
         {
@@ -108,7 +109,7 @@
             request.setProperties( properties );
         }
 
-        InvocationResult result = invoker.execute( request, 10 );
+        InvocationResult result = invoker.execute( request );
 
         assertEquals( 1, result.getExitCode() );
     }
