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 9e5a0dc..9fa70ab 100644
--- a/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
@@ -71,6 +71,8 @@
     private File userSettings;
 
     private File globalSettings;
+    
+    private File toolchains;
 
     private String globalChecksumPolicy;
 
@@ -322,6 +324,17 @@
         return this;
     }
 
+    public File getToolchainsFile()
+    {
+        return toolchains;
+    }
+    
+    public InvocationRequest setToolchainsFile( File toolchains )
+    {
+        this.toolchains = toolchains;
+        return this;
+    }
+    
     public String getGlobalChecksumPolicy()
     {
         return globalChecksumPolicy;
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 9d0a81a..8a2d434 100644
--- a/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
@@ -250,8 +250,17 @@
      * 
      * @return The path to the global settings for the Maven invocation or <code>null</code> to load the global settings
      *         from the default location.
+     * @since 2.0.12
      */
     File getGlobalSettingsFile();
+    
+    /**
+     * Gets the path to the custom toolchains file
+     * 
+     * @return The path to the custom toolchains file or <code>null</code> to load the toolchains from the default location
+     * @since 2.0.12
+     */
+    File getToolchainsFile();
 
     /**
      * Gets the checksum mode of the Maven invocation.
@@ -514,10 +523,20 @@
      * @param globalSettings The path to the global settings for the Maven invocation, may be <code>null</code> to load
      *            the global settings from the default location.
      * @return This invocation request.
+     * @since 2.0.12
      */
     InvocationRequest setGlobalSettingsFile( File globalSettings );
 
     /**
+     * Sets the alternate path for the user toolchains file
+     * Equivalent of {@code -t} or {@code --toolchains}
+     * 
+     * @param toolchains the alternate path for the user toolchains file
+     * @return This invocation request
+     * @since 2.0.12
+     */
+    InvocationRequest setToolchainsFile( File toolchains );
+    /**
      * Sets the checksum mode of the Maven invocation.
      * 
      * @param globalChecksumPolicy The checksum mode, must be one of {@link #CHECKSUM_POLICY_WARN} and
diff --git a/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java b/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
index 62a81b0..b4be1c0 100644
--- a/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
+++ b/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
@@ -94,6 +94,8 @@
 
         setSettingsLocation( request, cli );
 
+        setToolchainsLocation( request, cli );
+        
         setProperties( request, cli );
 
         setProfiles( request, cli );
@@ -101,7 +103,7 @@
         setGoals( request, cli );
 
         setThreads( request, cli );
-
+        
         return cli;
     }
 
@@ -167,6 +169,28 @@
         }
 
     }
+    
+    protected void setToolchainsLocation( InvocationRequest request, Commandline cli )
+    {
+        File toolchainsFile = request.getToolchainsFile();
+
+        if ( toolchainsFile != null )
+        {
+            try
+            {
+                File canSet = toolchainsFile.getCanonicalFile();
+                toolchainsFile = canSet;
+            }
+            catch ( IOException e )
+            {
+                logger.debug( "Failed to canonicalize toolchains path: " + toolchainsFile.getAbsolutePath()
+                    + ". Using as-is.", e );
+            }
+
+            cli.createArg().setValue( "-t" );
+            cli.createArg().setValue( toolchainsFile.getPath() );
+        }
+    }
 
     protected void setShellEnvironment( InvocationRequest request, Commandline cli )
         throws CommandLineConfigurationException
diff --git a/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java b/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
index 5786b6f..8438e4f 100644
--- a/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
+++ b/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
@@ -839,6 +839,33 @@
         assertArgumentsPresent( cli, args );
     }
 
+    public void testShouldSpecifyCustomToolchainsLocationFromRequest()
+        throws Exception
+    {
+        logTestStart();
+
+        File tmpDir = getTempDir();
+        File base = new File( tmpDir, "invoker-tests" );
+
+        toDelete.add( base );
+
+        File projectDir = new File( base, "custom-toolchains" ).getCanonicalFile();
+
+        projectDir.mkdirs();
+
+        File toolchainsFile = createDummyFile( projectDir, "toolchains.xml" );
+
+        Commandline cli = new Commandline();
+
+        TestCommandLineBuilder tcb = new TestCommandLineBuilder();
+        tcb.setToolchainsLocation( newRequest().setToolchainsFile( toolchainsFile ), cli );
+
+        Set<String> args = new HashSet<String>();
+        args.add( "-t" );
+        args.add( toolchainsFile.getCanonicalPath() );
+
+        assertArgumentsPresent( cli, args );
+    }
     public void testShouldSpecifyCustomPropertyFromRequest()
         throws IOException
     {
