diff --git a/components/soap/pom.xml b/components/soap/pom.xml
index 597f728..9ae1bee 100644
--- a/components/soap/pom.xml
+++ b/components/soap/pom.xml
@@ -198,5 +198,38 @@
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
         </dependency>
+
+        <!-- BEGIN: for more Authentications mechanisms ins OutboundHandler (SOAP) -->
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-ws-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.security</groupId>
+            <artifactId>wss4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+        <!-- END: for more Authentications mechanisms ins OutboundHandler (SOAP) -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+
+
+
     </dependencies>
 </project>
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/OutboundHandler.java b/components/soap/src/main/java/org/switchyard/component/soap/OutboundHandler.java
index fc04eb9..e9fd5ab 100644
--- a/components/soap/src/main/java/org/switchyard/component/soap/OutboundHandler.java
+++ b/components/soap/src/main/java/org/switchyard/component/soap/OutboundHandler.java
@@ -50,6 +50,9 @@ import org.switchyard.HandlerException;
 import org.switchyard.Message;
 import org.switchyard.Scope;
 import org.switchyard.component.common.composer.MessageComposer;
+import org.switchyard.component.soap.authentication.AuthenticatorSAMLSenderVouches;
+import org.switchyard.component.soap.authentication.AuthenticatorHttpBasic;
+import org.switchyard.component.soap.authentication.AuthenticatorClientCert;
 import org.switchyard.component.soap.composer.SOAPBindingData;
 import org.switchyard.component.soap.composer.SOAPComposition;
 import org.switchyard.component.soap.composer.SOAPFaultInfo;
@@ -83,6 +86,8 @@ public class OutboundHandler extends BaseServiceHandler {
     private Boolean _documentStyle;
     private Feature _feature = new Feature();
 
+    private AuthenticatorSAMLSenderVouches _authenticatorSAMLSenderVouches = null;
+
     /**
      * Constructor.
      * 
@@ -177,17 +182,16 @@ public class OutboundHandler extends BaseServiceHandler {
                 }
                 if (_config.hasAuthentication()) {
                     AuthorizationPolicy policy = new AuthorizationPolicy();
-                    // Set authentication
-                    if (_config.isBasicAuth()) {
-                        policy.setUserName(_config.getBasicAuthConfig().getUser());
-                        policy.setPassword(_config.getBasicAuthConfig().getPassword());
-                        policy.setAuthorizationType("Basic");
-                    } else {
+
+                    configurePolicy(policy, conduit);
+                    
+                    if (!_config.isBasicAuth()) {
                         policy.setUserName(_config.getNtlmAuthConfig().getDomain() + "\\" + _config.getNtlmAuthConfig().getUser());
                         policy.setPassword(_config.getNtlmAuthConfig().getPassword());
                         HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
-                        if (timeout != null) {
-                            httpClientPolicy.setConnectionTimeout(timeout);
+                        
+                        if (_config.getTimeout()  != null) {
+                            httpClientPolicy.setConnectionTimeout(_config.getTimeout());
                         } else {
                             httpClientPolicy.setConnectionTimeout(36000);
                         }
@@ -216,6 +220,70 @@ public class OutboundHandler extends BaseServiceHandler {
         }
     }
 
+    private void configurePolicy(AuthorizationPolicy policy, HTTPConduit conduit) {
+        Map<String, Object> requestContext = _dispatcher.getRequestContext();
+        switch (_config.getEnumAuthType()) {
+            case HTTP_BASIC:
+                policy.setUserName(_config.getBasicAuthConfig().getUser());
+                policy.setPassword(_config.getBasicAuthConfig().getPassword());
+                policy.setAuthorizationType("Basic");
+
+                AuthenticatorHttpBasic.authenticate(requestContext,
+                    _config.getBasicAuthConfig().getUser(),
+                    _config.getBasicAuthConfig().getPassword());
+                break;
+            case HTTP_CLIENT_CERT:
+                String keystoreName = _config.getCertAuthConfig().getKeystoreName();
+                String keystorePassword = _config.getCertAuthConfig().getKeystorePassword();
+                String truststoreName = _config.getCertAuthConfig().getTruststoreName();
+                String truststorePassword = _config.getCertAuthConfig().getTruststorePassword();
+                AuthenticatorClientCert.authenticate(conduit, keystoreName, keystorePassword, truststoreName, truststorePassword);
+                break;
+            case SAML_SenderVouches:
+                // the Username shouln't be configured/hardcoded, because we need security propagation throughout the ESB
+                // I think that can be done as shown in the "security-propagation" quickstart
+                // exchange.getSecurity()..getCallerPrincipal().getName()
+                // so part of the "case SAML_SenderVouches:" has to be moved to the "public void handleMessage(final Exchange exchange)" method of this class, to be able to access the exchange
+
+                //TODO Read these in from switchyard.xml
+                String keystoreFile = "samlKeystore.jks";
+                String keystoreType = "jks";
+                String samlKeystorePassword = "VerySecret123_forKeystore";
+                String samlIssuer = "MyEnvironment";
+                String samlKeyAlias = "myHostKey";
+                String samlPrivateKeyPasswort = "VerySecret123_forPrivateKey";
+
+                _authenticatorSAMLSenderVouches = new AuthenticatorSAMLSenderVouches(keystoreType, keystoreFile, samlKeystorePassword, samlKeyAlias, samlPrivateKeyPasswort, samlIssuer);
+
+                // Make the decision, if a technical user is used for SAML Sender Vocuhes authentication
+                // or if the username assertion is dynamic from the exchange object
+                String usernameAssertion = "technicalDummyUser"; //FIXME: Read in From switchyard.xml
+                //if ( ! DYNAMIC_USERNAME.equalsIgnoreCase(usernameAssertion)) {
+                _authenticatorSAMLSenderVouches.authenticate(requestContext, usernameAssertion);
+                //} else {
+                    // the username has to be filled in with the help of the exchange object in handleMessage(Exchange) ....
+                //}
+                break;
+            case NTLM:
+                //original code for NTLM TODO: refactor to AuthenicatorNTLM.authenticate(...)
+                policy.setUserName(_config.getNtlmAuthConfig().getDomain() + "\\" + _config.getNtlmAuthConfig().getUser());
+                policy.setPassword(_config.getNtlmAuthConfig().getPassword());
+                HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
+                if (_config.getTimeout() != null) {
+                    httpClientPolicy.setConnectionTimeout(_config.getTimeout());
+                } else {
+                    httpClientPolicy.setConnectionTimeout(36000);
+                }
+                httpClientPolicy.setAllowChunking(false);
+                conduit.setClient(httpClientPolicy);
+                conduit.setAuthorization(policy);
+                break;
+            default:
+                throw new IllegalStateException("Wrong Configuration of Authentication Type!");
+        }
+
+    }
+    
     /**
      * Stop lifecycle.
      */
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorBase.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorBase.java
new file mode 100644
index 0000000..c4140bd
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorBase.java
@@ -0,0 +1,59 @@
+package org.switchyard.component.soap.authentication;
+/**
+*
+*/
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+
+import org.apache.cxf.transport.http.HTTPConduit;
+
+/**
+* @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+*/
+public abstract class AuthenticatorBase {
+
+    static {
+        disableServerCertVerificationForLocalhost();
+    }
+    
+   /**
+    * Wir haben keine SSL Zertifikate für unsere "localhost"s. Deshalb würde beim Aufruf /bei der Authentifizierung dem Server nicht vertraut.
+    * Mit diesem Trick kann mnan das umgehen!
+    * Wenn man auf andere rechner als den localhost geht, müssen diese gültige und richtig signierte Zertifikate haben!
+    */
+    protected static void disableServerCertVerificationForLocalhost() {
+        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+            public boolean verify(String hostname, SSLSession session) {
+                // ip address of the service URL(like.23.28.244.244)
+                if (isLocalhost(hostname)) {
+                    return true;
+                }
+                return false;
+            }
+        });
+    }
+
+    protected static boolean isLocalhost(HTTPConduit httpConduit) {
+        boolean result = false;
+        String address = httpConduit.getAddress();
+        try {
+            URL url = new URL(address);
+            String host = url.getHost();
+            if (isLocalhost(host)) {
+                result = true;
+            }
+        } catch (MalformedURLException urle) {
+            return false;
+        }
+        return result;
+    }
+
+    protected static boolean isLocalhost(String hostname) {
+        return "localhost".equalsIgnoreCase(hostname) || "127.0.0.1".equals(hostname);
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorClientCert.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorClientCert.java
new file mode 100644
index 0000000..d088967
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorClientCert.java
@@ -0,0 +1,109 @@
+/**
+ *
+ */
+package org.switchyard.component.soap.authentication;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+
+import org.apache.cxf.configuration.jsse.TLSClientParameters;
+import org.apache.cxf.transport.http.HTTPConduit;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ *
+ */
+public class AuthenticatorClientCert extends AuthenticatorBase {
+    /**
+     * Authenticate the connection.
+     * @param httpConduit the conduit
+     * @param keystoreName the keystore name
+     * @param keystorePassword the keystore password
+     * @param truststoreName the trust store name
+     * @param truststorePassword the trust store password
+     */
+    public static void authenticate(HTTPConduit httpConduit, String keystoreName, String keystorePassword, String truststoreName, String truststorePassword) {
+        KeyManager[] keyManagers = getKeyManagers(keystoreName, keystorePassword);
+
+        TrustManager[] trustManagers = getTrustManagers(truststoreName, truststorePassword);
+
+        TLSClientParameters tlsCP = httpConduit.getTlsClientParameters();
+        if (tlsCP == null) {
+            tlsCP = new TLSClientParameters();
+        }
+       
+        // other TLS/SSL configuration like setting up TrustManagers
+        // if host name doesn't match cn in certificate.... CXF
+        tlsCP.setDisableCNCheck(isLocalhost(httpConduit));
+        tlsCP.setUseHttpsURLConnectionDefaultSslSocketFactory(false);
+        tlsCP.setKeyManagers(keyManagers);
+        tlsCP.setTrustManagers(trustManagers);
+
+        httpConduit.setTlsClientParameters(tlsCP);
+    }
+
+    private static TrustManager[] getTrustManagers(String keystoreName, String keystorePassword) {
+        KeyStore trustStore = getKeystore(keystoreName, keystorePassword);
+ 
+        TrustManager[] trustManagers = null;
+        try {
+            trustManagers = getTrustManagers(trustStore);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return trustManagers;
+    }
+
+    private static KeyManager[] getKeyManagers(String keystoreName, String keystorePassword) {
+        KeyStore keyStore = getKeystore(keystoreName, keystorePassword);
+
+        KeyManager[] keyManagers = null;
+        try {
+            keyManagers = getKeyManagers(keyStore, keystorePassword);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return keyManagers;
+    }
+
+    private static KeyStore getKeystore(String keystoreName, String keystorePassword) {
+        KeyStore keyStore = null;
+        try {
+            InputStream keystoreInput = Thread.currentThread().getContextClassLoader().getResourceAsStream(keystoreName);
+            // Get keyStore
+            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+            // if your store is password protected then declare it (it can be null however)
+            char[] keyPassword = keystorePassword.toCharArray();
+            // load the stream to your store
+            keyStore.load(keystoreInput, keyPassword);
+            keystoreInput.close();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return keyStore;
+    }
+
+    private static KeyManager[] getKeyManagers(KeyStore keyStore, String keyPassword) throws GeneralSecurityException, IOException {
+        String alg = KeyManagerFactory.getDefaultAlgorithm();
+        char[] keyPass = keyPassword != null ? keyPassword.toCharArray() : null;
+        KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
+        fac.init(keyStore, keyPass);
+        return fac.getKeyManagers();
+    }
+
+    private static TrustManager[] getTrustManagers(KeyStore trustStore) throws NoSuchAlgorithmException, KeyStoreException {
+        String alg = KeyManagerFactory.getDefaultAlgorithm();
+        TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
+        fac.init(trustStore);
+        return fac.getTrustManagers();
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorHttpBasic.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorHttpBasic.java
new file mode 100644
index 0000000..77dc6e4
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorHttpBasic.java
@@ -0,0 +1,25 @@
+package org.switchyard.component.soap.authentication;
+
+import java.util.Map;
+
+import javax.xml.ws.BindingProvider;
+
+/**
+ *
+ *
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ *
+ */
+public class AuthenticatorHttpBasic extends AuthenticatorBase {
+
+    /**
+     * Authenticate the connection.
+     * @param requestContext request context
+     * @param username username
+     * @param password password
+     */
+    public static void authenticate(Map<String, Object> requestContext, String username, String password) {
+        requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
+        requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorSAMLSenderVouches.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorSAMLSenderVouches.java
new file mode 100644
index 0000000..eb8b8f0
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/AuthenticatorSAMLSenderVouches.java
@@ -0,0 +1,68 @@
+/**
+ *
+ */
+package org.switchyard.component.soap.authentication;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.cxf.ws.security.SecurityConstants;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ *
+ */
+public class AuthenticatorSAMLSenderVouches extends AuthenticatorBase {
+
+    private String _keystoreType;
+    private String _keystorePassword;
+    private String _samlKeyAlias;
+    private String _keystoreFile;
+
+    private String _samlPrivateKeyPassword;
+    private String _samlIssuer;
+
+    /**
+     * Constructor method.
+     * @param keystoreType keystore type
+     * @param keystoreFile keystore file
+     * @param keystorePassword keystore password
+     * @param samlKeyAlias saml key alias
+     * @param samlPrivateKeyPassword saml private key password
+     * @param samlIssuer saml issuer
+     */
+    public AuthenticatorSAMLSenderVouches(String keystoreType, String keystoreFile, 
+            String keystorePassword, String samlKeyAlias, String samlPrivateKeyPassword, 
+            String samlIssuer) {
+        super();
+        this._keystoreType = keystoreType;
+        this._keystorePassword = keystorePassword;
+        this._samlKeyAlias = samlKeyAlias;
+        this._keystoreFile = keystoreFile;
+        this._samlPrivateKeyPassword = samlPrivateKeyPassword;
+        this._samlIssuer = samlIssuer;
+    }
+
+    /**
+     * Authenticate the connection.
+     * @param requestContext request context
+     * @param usernameAssertion user name assertion
+     */
+    public void authenticate(Map<String, Object> requestContext, String usernameAssertion) {
+        ClientKeystoreCallbackHandler callbackHandler = new ClientKeystoreCallbackHandler(_samlKeyAlias, _samlPrivateKeyPassword);
+        requestContext.put(SecurityConstants.CALLBACK_HANDLER, callbackHandler);
+        requestContext.put(SecurityConstants.SIGNATURE_PROPERTIES, this.createSamlSignatureKeystoreProperties());
+        requestContext.put(SecurityConstants.SAML_CALLBACK_HANDLER, new SamlCallbackHandler(usernameAssertion, _samlIssuer));
+    }
+
+    private Properties createSamlSignatureKeystoreProperties() {
+        Properties resProperties = new Properties();
+        resProperties.put("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
+        resProperties.put("org.apache.ws.security.crypto.merlin.keystore.type", _keystoreType);
+        resProperties.put("org.apache.ws.security.crypto.merlin.keystore.password", _keystorePassword);
+        resProperties.put("org.apache.ws.security.crypto.merlin.keystore.alias", _samlKeyAlias);
+        resProperties.put("org.apache.ws.security.crypto.merlin.keystore.file", _keystoreFile);
+        return resProperties;
+    }
+}
+
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/ClientKeystoreCallbackHandler.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/ClientKeystoreCallbackHandler.java
new file mode 100644
index 0000000..d5fd280
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/ClientKeystoreCallbackHandler.java
@@ -0,0 +1,49 @@
+/**
+ *
+ */
+package org.switchyard.component.soap.authentication;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.apache.ws.security.WSPasswordCallback;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ *
+ */
+public class ClientKeystoreCallbackHandler implements CallbackHandler {
+
+    private String _samlKeyAlias;
+    private String _samlPrivateKeyPassword;
+    
+    /**
+     * Constructor method.
+     * @param samlKeyAlias saml key alias
+     * @param samlPrivateKeyPassword saml private key password
+     */
+    public ClientKeystoreCallbackHandler(String samlKeyAlias, String samlPrivateKeyPassword) {
+        super();
+        _samlKeyAlias = samlKeyAlias;
+        _samlPrivateKeyPassword = samlPrivateKeyPassword;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
+     */
+    @Override
+    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof WSPasswordCallback) {
+                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
+                if (_samlKeyAlias.equals(pc.getIdentifier())) {
+                    pc.setPassword(_samlPrivateKeyPassword);
+                    break;
+                }
+            }
+        }
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/EnumAuthType.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/EnumAuthType.java
new file mode 100644
index 0000000..779a5cd
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/EnumAuthType.java
@@ -0,0 +1,28 @@
+package org.switchyard.component.soap.authentication;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ *
+ */
+public enum EnumAuthType {
+    /**
+     * HTTP Basic.
+     */
+    HTTP_BASIC,
+    /**
+     * HTTP Client Cert.
+     */
+    HTTP_CLIENT_CERT,
+    /**
+     * SAML_SenderVouches.
+     */
+    SAML_SenderVouches,
+    /**
+     * SAML_Holder_Of_Key type.
+     */
+    SAML_Holder_Of_Key,
+    /**
+     * NTLM.
+     */
+    NTLM;
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/authentication/SamlCallbackHandler.java b/components/soap/src/main/java/org/switchyard/component/soap/authentication/SamlCallbackHandler.java
new file mode 100644
index 0000000..97c1c2f
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/authentication/SamlCallbackHandler.java
@@ -0,0 +1,71 @@
+/**
+ *
+ */
+package org.switchyard.component.soap.authentication;
+
+import java.io.IOException;
+import java.util.Collections;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.apache.ws.security.saml.ext.SAMLCallback;
+import org.apache.ws.security.saml.ext.bean.AuthenticationStatementBean;
+import org.apache.ws.security.saml.ext.bean.SubjectBean;
+import org.apache.ws.security.saml.ext.builder.SAML1Constants;
+import org.opensaml.common.SAMLVersion;
+
+/**
+ * A CallbackHandler that sets SAML Assertion (User and Issuer).
+ *
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochenr@users.noreply.github.com">jochenr@users.noreply.github.com</a>&gt;
+ */
+public class SamlCallbackHandler implements CallbackHandler {
+    private String _assertionUserName;
+    private String _samlIssuer;
+
+    /**
+     * Constructor method.
+     * @param assertionUserName assertion user name
+     * @param samlIssuer saml Issuer
+     */
+    public SamlCallbackHandler(String assertionUserName, String samlIssuer) {
+        super();
+        _assertionUserName = assertionUserName;
+        _samlIssuer = samlIssuer;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
+     */
+    @Override
+    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            if (callbacks[i] instanceof SAMLCallback) {
+                SAMLCallback callback = (SAMLCallback) callbacks[i];
+
+                callback.setSamlVersion(SAMLVersion.VERSION_20);
+                callback.setIssuer(_samlIssuer);
+
+                String subjectName = this.getAuthPrincipalName();
+                String subjectQualifier = "";
+                String subjectConfMethod = SAML1Constants.CONF_SENDER_VOUCHES;
+
+                SubjectBean subjectBean = new SubjectBean(subjectName, subjectQualifier, subjectConfMethod);
+                callback.setSubject(subjectBean);
+
+                AuthenticationStatementBean authBean = new AuthenticationStatementBean();
+                authBean.setAuthenticationMethod(SAML1Constants.AUTH_METHOD_UNSPECIFIED);
+                //authBean.setAuthenticationMethod(SAML2Constants.CONF_SENDER_VOUCHES);
+                authBean.setSubject(subjectBean);
+
+                callback.setAuthenticationStatementData(Collections.singletonList(authBean));
+            }
+        }
+    }
+
+    protected String getAuthPrincipalName() {
+        return _assertionUserName;
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/config/model/CertAuthModel.java b/components/soap/src/main/java/org/switchyard/component/soap/config/model/CertAuthModel.java
new file mode 100644
index 0000000..6dd096a
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/config/model/CertAuthModel.java
@@ -0,0 +1,63 @@
+package org.switchyard.component.soap.config.model;
+
+import org.switchyard.config.model.Model;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochen.riedlinger@l-bank.de">jochen.riedlinger@l-bank.de</a>&gt;
+ */
+public interface CertAuthModel extends Model {
+
+    /**
+     * Get the keystore name.
+     * @return keystore name
+     */
+    String getKeystoreName();
+    
+    
+    /**
+     * Set the keystore name.
+     * @param keystoreName keystore name
+     * @return cert auth model
+     */
+    CertAuthModel setKeystoreName(String keystoreName);
+
+    /**
+     * Get the keystore password.
+     * @return the keystore password.
+     */
+    String getKeystorePassword();
+    
+    /**
+     * Set the keystore password.
+     * @param keystorePassword keystore password
+     * @return cert auth model
+     */
+    CertAuthModel setKeystorePassword(String keystorePassword);
+
+    /**
+     * Get the trust store name.
+     * @return trust store name
+     */
+    String getTruststoreName();
+    
+    /**
+     * Set the trust store name.
+     * @param truststoreName trust store name
+     * @return cert auth model
+     */
+    CertAuthModel setTruststoreName(String truststoreName);
+
+    /**
+     * Get the trust store password.
+     * @return trust store password
+     */
+    String getTruststorePassword();
+    
+    /**
+     * Set the trust store password.
+     * @param truststorePassword trust store password
+     * @return cert auth model
+     */
+    CertAuthModel setTruststorePassword(String truststorePassword);
+
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPBindingModel.java b/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPBindingModel.java
index 78eced5..83e72dc 100644
--- a/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPBindingModel.java
+++ b/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPBindingModel.java
@@ -17,6 +17,7 @@ import javax.xml.namespace.QName;
 
 import org.switchyard.common.net.SocketAddr;
 import org.switchyard.component.soap.PortName;
+import org.switchyard.component.soap.authentication.EnumAuthType;
 import org.switchyard.config.Configuration;
 import org.switchyard.config.model.composite.BindingModel;
 
@@ -153,6 +154,33 @@ public interface SOAPBindingModel extends BindingModel {
     public SOAPBindingModel setTimeout(Integer timeout);
 
     /**
+     * Gets the configured Authentication Type.
+     *
+     * @return the configured Authentication Type
+     */
+    public EnumAuthType getEnumAuthType();
+
+    /**
+     * Sets the authentication type.
+     *
+     * @param authType the authentication type
+     */
+    public void setEnumAuthType(EnumAuthType authType);
+
+    /**
+     * Gets the certificate config (for Client Cert and other certificate based mechanisms).
+     * @return the certificate config
+     */
+    public CertAuthModel getCertAuthConfig();
+
+    /**
+     * Sets the certificate config (for Client Cert and other certificate based mechanisms)..
+     * @param config the certificate config
+     * @return this SOAPBindingModel
+     */
+    public SOAPBindingModel setCertAuthConfig(CertAuthModel config);
+
+    /**
      * Gets the basic config.
      * @return the basic config
      */
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPNameValueModel.java b/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPNameValueModel.java
index 9710b7a..38bac59 100644
--- a/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPNameValueModel.java
+++ b/components/soap/src/main/java/org/switchyard/component/soap/config/model/SOAPNameValueModel.java
@@ -27,7 +27,7 @@ public interface SOAPNameValueModel extends Model {
     public enum SOAPName {
         /** Known XML element names. */
 
-        wsdl, wsdlPort, socketAddr, contextPath, endpointAddress, mtom, proxy, user, password, host, port, type, basic, ntlm, domain, timeout;
+        wsdl, wsdlPort, socketAddr, contextPath, endpointAddress, mtom, proxy, user, password, host, port, type, basic, clientcert, samlsendervouches, samlholderofkey, ntlm, domain, timeout;
     }
 
     /**
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1CertAuthModel.java b/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1CertAuthModel.java
new file mode 100644
index 0000000..b92ceda
--- /dev/null
+++ b/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1CertAuthModel.java
@@ -0,0 +1,80 @@
+package org.switchyard.component.soap.config.model.v1;
+
+import org.switchyard.component.soap.config.model.CertAuthModel;
+import org.switchyard.config.Configuration;
+import org.switchyard.config.model.BaseModel;
+
+/**
+ * @author Jochen Riedlinger &lt;<a href="mailto:jochen.riedlinger@l-bank.de">jochen.riedlinger@l-bank.de</a>&gt;
+ *
+ */
+public class V1CertAuthModel extends BaseModel implements CertAuthModel {
+    private String _keystoreName;
+    private String _keystorePassword;
+    private String _truststoreName;
+    private String _truststorePassword;
+
+    protected V1CertAuthModel(Configuration config) {
+        super(config);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getKeystoreName() {
+        return _keystoreName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public CertAuthModel setKeystoreName(String keystoreName) {
+        _keystoreName = keystoreName;
+        return this;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getKeystorePassword() {
+        return _keystorePassword;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public CertAuthModel setKeystorePassword(String keystorePassword) {
+        _keystorePassword = keystorePassword;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getTruststoreName() {
+        return _truststoreName;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public CertAuthModel setTruststoreName(String truststoreName) {
+        _truststoreName = truststoreName;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getTruststorePassword() {
+        return _truststorePassword;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public CertAuthModel setTruststorePassword(String truststorePassword) {
+        _truststorePassword = truststorePassword;
+        return this;
+    }
+}
diff --git a/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1SOAPBindingModel.java b/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1SOAPBindingModel.java
index f426323..0f59c8c 100644
--- a/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1SOAPBindingModel.java
+++ b/components/soap/src/main/java/org/switchyard/component/soap/config/model/v1/V1SOAPBindingModel.java
@@ -22,9 +22,11 @@ import javax.xml.namespace.QName;
 import org.switchyard.common.net.SocketAddr;
 import org.switchyard.component.soap.SOAPMessages;
 import org.switchyard.component.soap.PortName;
+import org.switchyard.component.soap.authentication.EnumAuthType;
+import org.switchyard.component.soap.config.model.BasicAuthModel;
+import org.switchyard.component.soap.config.model.CertAuthModel;
 import org.switchyard.component.soap.config.model.EndpointConfigModel;
 import org.switchyard.component.soap.config.model.InterceptorsModel;
-import org.switchyard.component.soap.config.model.BasicAuthModel;
 import org.switchyard.component.soap.config.model.MtomModel;
 import org.switchyard.component.soap.config.model.NtlmAuthModel;
 import org.switchyard.component.soap.config.model.ProxyModel;
@@ -65,6 +67,8 @@ public class V1SOAPBindingModel extends V1BindingModel implements SOAPBindingMod
     private Configuration _environment;
     private QName _serviceName;
 
+    private EnumAuthType _authType;
+    private CertAuthModel _certAuth;
     private SOAPNameValueModel _wsdl;
     private PortName _port;
     private SocketAddr _socketAddr;
@@ -297,6 +301,47 @@ public class V1SOAPBindingModel extends V1BindingModel implements SOAPBindingMod
     /**
      * {@inheritDoc}
      */
+    public void setEnumAuthType(EnumAuthType authType) {
+        _authType = authType;
+    }
+
+    /**
+     * Get the enum auth type.
+     * @return enum auth type
+     */
+    public EnumAuthType getEnumAuthType() {
+        //TODO read Auth type from config
+        // as temporary workaround for proof of concept:
+
+        if (isBasicAuth()) {
+            return EnumAuthType.HTTP_BASIC;
+        } else {
+            return EnumAuthType.SAML_SenderVouches;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public CertAuthModel getCertAuthConfig() {
+        if (_certAuth == null) {
+            _certAuth = (CertAuthModel)getFirstChildModel(SOAPName.clientcert.name());
+        }
+        return _certAuth;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public SOAPBindingModel setCertAuthConfig(CertAuthModel config) {
+        setChildModel(config);
+        _certAuth = config;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public BasicAuthModel getBasicAuthConfig() {
         if (_basicAuth == null) {
             _basicAuth = (BasicAuthModel)getFirstChildModel(SOAPName.basic.name());
