diff --git a/components/dotnet-executable/src/main/java/npanday/executable/impl/NetExecutableFactoryImpl.java b/components/dotnet-executable/src/main/java/npanday/executable/impl/NetExecutableFactoryImpl.java
index b6da25f..cc475fe 100644
--- a/components/dotnet-executable/src/main/java/npanday/executable/impl/NetExecutableFactoryImpl.java
+++ b/components/dotnet-executable/src/main/java/npanday/executable/impl/NetExecutableFactoryImpl.java
@@ -90,7 +90,7 @@
         if ( netHome != null )
         {
             getLogger().info( "NPANDAY-066-014: Found executable path in pom: Path = " + netHome.getAbsolutePath() );
-            executableConfig.getExecutionPaths().add( netHome.getAbsolutePath() );
+            executablePaths.add( netHome.getAbsolutePath() );
         }
 
 
diff --git a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/AbstractWixMojo.java b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/AbstractWixMojo.java
index 14a840e..cb5a491 100644
--- a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/AbstractWixMojo.java
+++ b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/AbstractWixMojo.java
@@ -19,20 +19,51 @@
  * under the License.
  */
 
-import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.DefaultExecutor;
-import org.apache.commons.exec.ExecuteException;
+import npanday.PlatformUnsupportedException;
+import npanday.executable.ExecutableRequirement;
+import npanday.executable.ExecutionException;
+import npanday.executable.NetExecutable;
+
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 
+import com.google.common.collect.Lists;
+
 import java.io.File;
-import java.io.IOException;
 import java.util.List;
 
 public abstract class AbstractWixMojo
     extends AbstractMojo
 {
     /**
+     * The vendor of the framework, the executable is provided by or compatible with.
+     *
+     * @parameter expression="${vendor}"
+     */
+    private String vendor;
+
+    /**
+     * The version of the framework vendor, the executable is provided by or compatible with.
+     *
+     * @parameter expression="${vendorVersion}"
+     */
+    private String vendorVersion;
+
+    /**
+     * The framework version, the executable is compatible with.
+     *
+     * @parameter expression = "${frameworkVersion}"
+     */
+    private String frameworkVersion;
+
+    /**
+     * The configured executable version, from executable-plugins.xml, to be used.
+     *
+     * @parameter expression="${wix.version}" default-value="3.0"
+     */
+    private String executableVersion;
+
+    /**
      * WiX extensions to use
      *
      * @parameter
@@ -59,64 +90,62 @@
      */
     private boolean suppressSchemaValidation;
 
+    /**
+     * @component
+     */
+    private npanday.executable.NetExecutableFactory netExecutableFactory;
+
     public void execute()
         throws MojoExecutionException
     {
         try
         {
-            CommandLine commandLine = new CommandLine( getWixPath( getCommand() ) );
-
+            List<String> commands = Lists.newArrayList();
+                    
             if ( extensions != null )
             {
                 for ( String ext : extensions )
                 {
-                    commandLine.addArgument( "-ext" );
-                    commandLine.addArgument( ext );
+                    commands.add( "-ext" );
+                    commands.add( ext );
                 }
             }
 
             if ( suppressSchemaValidation )
             {
-                commandLine.addArgument( "-ss" );
+                commands.add( "-ss" );
             }
 
             if ( arguments != null )
             {
-                commandLine.addArgument( arguments );
+                commands.add( arguments );
             }
 
-            commandLine.addArguments( getArguments().toArray( new String[0] ) );
-
-            getLog().info( "Executing " + commandLine );
-
-            DefaultExecutor executor = new DefaultExecutor();
-            int exitValue = executor.execute( commandLine );
-            if ( exitValue != 0 )
-            {
-                throw new MojoExecutionException( "Problem executing " + getCommand() + ", return code " + exitValue );
-            }
+            commands.addAll( getArguments() );
+            
+            NetExecutable executor = netExecutableFactory.getExecutable(
+                new ExecutableRequirement(
+                        vendor, vendorVersion, frameworkVersion, getExecutableIdentifier(), executableVersion
+                        ), commands, (wixHome != null) ? new File( wixHome, "bin" ) : null
+                    );
+            executor.execute();
         }
-        catch ( ExecuteException e )
-        {
-            throw new MojoExecutionException( "Problem executing " + getCommand(), e );
+        catch (ExecutionException e) {
+            throw new MojoExecutionException(
+                "Unable to execute '" + getExecutableIdentifier() + "' for vendor " + vendor + " v"
+                    + vendorVersion + " and frameworkVersion = " + frameworkVersion, e
+                );
         }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Problem executing " + getCommand(), e );
+        catch (PlatformUnsupportedException e) {
+            throw new MojoExecutionException(
+                "Unable to execute '" + getExecutableIdentifier() + "' for vendor " + vendor + " v"
+                    + vendorVersion + " and frameworkVersion = " + frameworkVersion, e
+                );
         }
     }
 
-    private String getWixPath( String name )
-    {
-        if ( wixHome != null )
-        {
-            return new File( new File( wixHome, "bin" ), name ).getAbsolutePath();
-        }
-        return name;
-    }
-
-    public abstract String getCommand();
-
+    public abstract String getExecutableIdentifier();
+    
     public abstract List<String> getArguments()
         throws MojoExecutionException;
 }
diff --git a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/CandleMojo.java b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/CandleMojo.java
index c2b61e1..c2f6fde 100644
--- a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/CandleMojo.java
+++ b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/CandleMojo.java
@@ -63,10 +63,15 @@
      */
     private File outputDirectory;
 
+    /**
+     * The executable identifier used to locate the right configurations from executable-plugins.xml. Can't be changed.
+     */
+    private String executableIdentifier = "CANDLE";
+
     @Override
-    public String getCommand()
+    public String getExecutableIdentifier()
     {
-        return "candle";
+        return executableIdentifier;
     }
 
     @Override
diff --git a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/LightMojo.java b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/LightMojo.java
index 775e174..c29ed70 100644
--- a/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/LightMojo.java
+++ b/plugins/wix-maven-plugin/src/main/java/npanday/plugin/wix/LightMojo.java
@@ -72,10 +72,15 @@
      */
     private String[] cultures;
 
+    /**
+     * The executable identifier used to locate the right configurations from executable-plugins.xml. Can't be changed.
+     */
+    private String executableIdentifier = "LIGHT";
+
     @Override
-    public String getCommand()
+    public String getExecutableIdentifier()
     {
-        return "light";
+        return executableIdentifier;
     }
 
     @Override
diff --git a/plugins/wix-maven-plugin/src/main/resources/META-INF/npanday/executable-plugins.xml b/plugins/wix-maven-plugin/src/main/resources/META-INF/npanday/executable-plugins.xml
new file mode 100644
index 0000000..f16554e
--- /dev/null
+++ b/plugins/wix-maven-plugin/src/main/resources/META-INF/npanday/executable-plugins.xml
@@ -0,0 +1,70 @@
+<!--
+  ~ 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.
+  -->
+<executablePlugins xmlns="http://npanday.apache.org/executables/1.5.0">
+
+  <executablePlugin>
+    <profile>CANDLE</profile>
+    <pluginClass>npanday.executable.impl.DefaultNetExecutable</pluginClass>
+
+    <executable>candle</executable>
+    <executableVersion>3.0</executableVersion>
+
+    <vendor>MICROSOFT</vendor>
+
+    <frameworkVersions>
+      <frameworkVersion>2.0.50727</frameworkVersion>
+    </frameworkVersions>
+
+    <probingPaths>
+       <probingPath>%WIX%</probingPath>
+    </probingPaths>
+
+    <platforms>
+      <platform>
+        <operatingSystem>Windows</operatingSystem>
+      </platform>
+    </platforms>
+
+  </executablePlugin>
+
+  <executablePlugin>
+    <profile>LIGHT</profile>
+    <pluginClass>npanday.executable.impl.DefaultNetExecutable</pluginClass>
+
+    <executable>light</executable>
+    <executableVersion>3.0</executableVersion>
+
+    <vendor>MICROSOFT</vendor>
+
+    <frameworkVersions>
+      <frameworkVersion>2.0.50727</frameworkVersion>
+    </frameworkVersions>
+
+    <probingPaths>
+       <probingPath>%WIX%</probingPath>
+    </probingPaths>
+
+    <platforms>
+      <platform>
+        <operatingSystem>Windows</operatingSystem>
+      </platform>
+    </platforms>
+
+  </executablePlugin>
+</executablePlugins>
