diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java b/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
index eafea0c..a06a0ac 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
@@ -273,10 +273,13 @@
 
             boolean encrDataFound = false;
             for (WSSecurityEngineResult result : list) {
-                ArrayList dataRefURIs = (ArrayList) result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
-                if (dataRefURIs != null && dataRefURIs.size() != 0) {
-                    encrDataFound = true;
-                }
+            	Object resultElement = result.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
+            	if (resultElement instanceof ArrayList) {
+	                ArrayList dataRefURIs = (ArrayList) resultElement;
+	                if (dataRefURIs != null && dataRefURIs.size() != 0) {
+	                    encrDataFound = true;
+	                }
+            	}
             }
             //TODO check whether the encrptedDataFound is an UsernameToken
             if(encrDataFound && !isUsernameTokenPresent(data)) {
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java b/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
index e240c48..8881b7c 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
@@ -26,6 +26,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.rahas.Token;
 import org.apache.rahas.TokenStorage;
+import org.apache.rahas.TrustException;
 import org.apache.rampart.policy.RampartPolicyData;
 import org.apache.rampart.policy.model.KerberosConfig;
 import org.apache.rampart.policy.model.RampartConfig;
@@ -243,34 +244,19 @@
 
 		Crypto signatureCrypto = RampartUtil.getSignatureCrypto(rpd.getRampartConfig(), 
                 msgCtx.getAxisService().getClassLoader());
-                TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(rmd.getTokenStorage(), RampartUtil.getPasswordCB(rmd));
-                if(rpd.isSymmetricBinding()) {
-                    //Here we have to create the CB handler to get the tokens from the 
-                    //token storage
-                    log.debug("Processing security header using SymetricBinding");
-                    requestData.setEncodePasswords(true);
-                    requestData.setCallbackHandler(tokenCallbackHandler);
-                    requestData.setSigVerCrypto(signatureCrypto);
-                    requestData.setActor(actorValue);
-                    requestData.setDecCrypto(RampartUtil.getEncryptionCrypto(rpd.getRampartConfig(), msgCtx.getAxisService().getClassLoader()));
+        TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(rmd.getTokenStorage(), RampartUtil.getPasswordCB(rmd));
+                
+        Crypto decCrypto = RampartUtil.getEncryptionCrypto(rpd.getRampartConfig(), msgCtx.getAxisService().getClassLoader());
+        WSHandlerResult result = processSecurityHeaderWithRSA15(engine, rmd, engine.getWssConfig(), actorValue,
+                tokenCallbackHandler, signatureCrypto, decCrypto);
+        results = result.getResults();
 
-                    WSHandlerResult result = engine.processSecurityHeader(rmd.getDocument(), requestData); 
-                    results = result.getResults();
-            // Removcryption tokens if this is the initiator and if initiator is receiving a message
-
-                    if (rmd.isInitiator() && (msgCtx.getFLOW() == MessageContext.IN_FLOW ||
-                            msgCtx.getFLOW() == MessageContext.IN_FAULT_FLOW)) {
-                        tokenCallbackHandler.removeEncryptedToken();
-                    }
-
-                } else {
-
-                    log.debug("Processing security header in normal path");
-                    Crypto decCrypto = RampartUtil.getEncryptionCrypto(rpd.getRampartConfig(), msgCtx.getAxisService().getClassLoader());
-                    WSHandlerResult result = processSecurityHeaderWithRSA15(engine, rmd, engine.getWssConfig(), actorValue,
-                        tokenCallbackHandler, signatureCrypto, decCrypto);
-                    results = result.getResults();
-		}
+        if(rpd.isSymmetricBinding()) {
+            if (rmd.isInitiator() && (msgCtx.getFLOW() == MessageContext.IN_FLOW ||
+                msgCtx.getFLOW() == MessageContext.IN_FAULT_FLOW)) {
+            tokenCallbackHandler.removeEncryptedToken();
+            }   
+        }
 
 		if(dotDebug){
 			t1 = System.currentTimeMillis();
@@ -408,12 +394,13 @@
                 throws WSSecurityException {
     
         RequestData data = new RequestData();
-        data.setWssConfig(config);
+        data.setEncodePasswords(false);
         data.setActor(actor);
         data.setDecCrypto(decCrypto);
         data.setSigVerCrypto(sigCrypto);
         data.setCallbackHandler(cb);
-        data.setAllowRSA15KeyTransportAlgorithm(true);
+        data.setAllowRSA15KeyTransportAlgorithm(true); // backward compatibility
+        data.setValidateSamlSubjectConfirmation(false); // backward compatibility
 
         return engine.processSecurityHeader(rmd.getDocument(), data);
     }
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
index e96be0a..274a933 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
@@ -790,6 +790,7 @@
 
         List<WSHandlerResult> results
                 = (List<WSHandlerResult>)rmd.getMsgContext().getProperty(WSHandlerConstants.RECV_RESULTS);
+
         /*
          * loop over all results gathered by all handlers in the chain. For each
          * handler result get the various actions. After that loop we have all
@@ -799,9 +800,17 @@
         for (Object result : results) {
             WSHandlerResult wshResult = (WSHandlerResult) result;
 
-            signatureActions.addAll(wshResult.getActionResults().get(WSConstants.SIGN));
-            signatureActions.addAll(wshResult.getActionResults().get(WSConstants.ST_SIGNED));
-            signatureActions.addAll(wshResult.getActionResults().get(WSConstants.UT_SIGN));
+            if (null != wshResult.getActionResults()) {
+            	if (null != wshResult.getActionResults().get(WSConstants.SIGN)) {
+            		signatureActions.addAll(wshResult.getActionResults().get(WSConstants.SIGN));
+            	}
+            	if (null != wshResult.getActionResults().get(WSConstants.ST_SIGNED)) {
+            		signatureActions.addAll(wshResult.getActionResults().get(WSConstants.ST_SIGNED));
+            	}
+            	if (null != wshResult.getActionResults().get(WSConstants.UT_SIGN)) {
+            		signatureActions.addAll(wshResult.getActionResults().get(WSConstants.UT_SIGN));
+            	}
+            }
         }
         
         // prepare a SignatureConfirmation token
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
index 3ad8d0a..b36ef39 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
@@ -720,7 +720,8 @@
             
             // Set the SHA1 value of the encrypted key, this is used when the encrypted
             // key is referenced via a key identifier of type EncryptedKeySHA1
-            tempTok.setSHA1(getSHA1(encrKey.getEncryptedKeySHA1().getBytes()));
+            //tempTok.setSHA1(getSHA1(encrKey.getEncryptedKeySHA1().getBytes()));
+            tempTok.setSHA1(encrKey.getEncryptedKeySHA1());
             
             rmd.getTokenStorage().add(tempTok);
             
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
index f082a01..3b8d0a4 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartReceiver.java
@@ -40,8 +40,11 @@
 import org.apache.wss4j.dom.handler.WSHandlerResult;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.namespace.QName;
 
@@ -109,7 +112,7 @@
             results = new ArrayList<WSHandlerResult>();
             msgContext.setProperty(WSHandlerConstants.RECV_RESULTS, results);
         }
-        WSHandlerResult rResult = new WSHandlerResult("", wsResult, null);
+        WSHandlerResult rResult = new WSHandlerResult("", wsResult, filterActionResults(wsResult));
         results.add(0, rResult);
         
         SOAPHeader header = null;
@@ -141,7 +144,23 @@
         return InvocationResponse.CONTINUE;        
 
     }
-
+    
+    private  Map<Integer, List<WSSecurityEngineResult>> filterActionResults( List<WSSecurityEngineResult> results) {
+    	Map<Integer, List<WSSecurityEngineResult>> actionResultsMap = new HashMap();
+    	
+        for (WSSecurityEngineResult result : results) {
+            Integer resultTag = (Integer)result.get(WSSecurityEngineResult.TAG_ACTION);
+            if (null != resultTag) {
+            	List<WSSecurityEngineResult> actionResults = actionResultsMap.get(resultTag);
+            	if (null == actionResults) {
+            		actionResults = new ArrayList<>();
+            		actionResultsMap.put(resultTag, actionResults);
+            	}
+            	actionResults.add(result);
+            }
+        }
+    	return actionResultsMap;
+    }
     
     public HandlerDescription getHandlerDesc() {
         return this.handlerDesc;
diff --git a/modules/rampart-extensions/jpam-callback-handler/src/main/java/org/apache/rampart/extensions/jpam/JPAMCallbackHandler.java b/modules/rampart-extensions/jpam-callback-handler/src/main/java/org/apache/rampart/extensions/jpam/JPAMCallbackHandler.java
index f42ca7b..268adb7 100644
--- a/modules/rampart-extensions/jpam-callback-handler/src/main/java/org/apache/rampart/extensions/jpam/JPAMCallbackHandler.java
+++ b/modules/rampart-extensions/jpam-callback-handler/src/main/java/org/apache/rampart/extensions/jpam/JPAMCallbackHandler.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -32,7 +32,7 @@
         for (int i = 0; i < callbacks.length; i++) {
             // When the server side need to authenticate the user
             WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[i];
-            if (pwcb.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
+            if (pwcb.getUsage() == WSPasswordCallback.UNKNOWN) {
                 Pam pam = new Pam();
                 PamReturnValue ret = pam.authenticate(pwcb.getIdentifer(), pwcb
                         .getPassword());
diff --git a/modules/rampart-samples/policy/build.xml b/modules/rampart-samples/policy/build.xml
index e9f6dea..ec42927 100644
--- a/modules/rampart-samples/policy/build.xml
+++ b/modules/rampart-samples/policy/build.xml
@@ -202,7 +202,7 @@
                     <arg value="${service.repos.dir}/sample@{sample.number}"/>
                     <arg value="-p${server.port}"/>
                     <classpath refid="runtime.classpath"/>
-                    <jvmarg line="-Djava.endorsed.dirs=${endorsed.dir} ${vmargs}"/>
+                    <jvmarg line="${vmargs}"/>
             </java>
 
 	   </sequential>
@@ -266,7 +266,7 @@
                     <arg value="${service.repos.dir}/sample@{sample.number}"/>
                     <arg value="-p${server.port}"/>
                     <classpath refid="runtime.classpath"/>
-                    <jvmarg line="-Djava.endorsed.dirs=${endorsed.dir} ${vmargs}"/>
+                    <jvmarg line="${vmargs}"/>
             </java>
 
        </sequential>
diff --git a/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/Client.java b/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/Client.java
index 2bc3ecb..0d68d76 100644
--- a/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/Client.java
+++ b/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/Client.java
@@ -16,6 +16,7 @@
 
 package org.apache.rampart.tomcat.sample;
 
+import java.io.FileInputStream;
 import java.util.Iterator;
 import java.util.List;
 
@@ -23,7 +24,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -61,7 +63,7 @@
     }
 
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         OMElement elem = builder.getDocumentElement();
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
diff --git a/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/PWCBHandler.java b/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/PWCBHandler.java
index 79b71a6..3cf5d47 100644
--- a/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample-tomcat/src/org/apache/rampart/tomcat/sample/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.tomcat.sample;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -32,7 +32,7 @@
             
             //When the server side need to authenticate the user
             WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            if (pwcb.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
+            if (pwcb.getUsage() == WSPasswordCallback.UNKNOWN) {
                 if(pwcb.getIdentifier().equals("alice") && pwcb.getPassword().equals("bobPW")) {
                     return;
                 } else {
diff --git a/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/PWCBHandler.java b/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/PWCBHandler.java
index 9840924..f3e6640 100644
--- a/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample01;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -32,7 +32,7 @@
             
             //When the server side need to authenticate the user
             WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            if (pwcb.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
+            if (pwcb.getUsage() == WSPasswordCallback.UNKNOWN) {
                 if(pwcb.getIdentifier().equals("alice") && pwcb.getPassword().equals("bobPW")) {
                     return;
                 } else {
diff --git a/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/PWCBHandler.java b/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/PWCBHandler.java
index 782017f..bca1341 100644
--- a/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample02;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/PWCBHandler.java b/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/PWCBHandler.java
index c6d6d30..7426fa7 100644
--- a/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample03;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java b/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java
index 2820d3d..ee1d439 100644
--- a/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample04;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
index abaf622..a40f96b 100644
--- a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
+++ b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
@@ -36,7 +36,7 @@
 import org.apache.rahas.client.STSClient;
 import org.apache.rampart.RampartMessageData;
 import org.apache.ws.secpolicy.SP11Constants;
-import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml.common.xml.SAMLConstants;
 
 import java.io.FileInputStream;
 import java.net.URL;
diff --git a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/PWCBHandler.java b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/PWCBHandler.java
index ecabc8f..349842b 100644
--- a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample05;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
index 16b9446..0471f76 100755
--- a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
+++ b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
@@ -34,7 +34,7 @@
 import org.apache.rahas.TrustUtil;
 import org.apache.rampart.RampartMessageData;
 import org.apache.ws.secpolicy.SP11Constants;
-import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml.common.xml.SAMLConstants;
 
 import java.io.FileInputStream;
 
diff --git a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/PWCBHandler.java b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/PWCBHandler.java
index 8a54093..61416b4 100755
--- a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample06;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/PWCBHandler.java b/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/PWCBHandler.java
index c44e63e..5a58387 100644
--- a/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample07;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
index e3372cf..c98a001 100644
--- a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
+++ b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
@@ -30,7 +30,7 @@
 import org.apache.rahas.TrustUtil;
 import org.apache.rahas.client.STSClient;
 import org.apache.ws.secpolicy.SP11Constants;
-import org.opensaml.common.xml.SAMLConstants;
+import org.opensaml.saml.common.xml.SAMLConstants;
 
 import java.io.FileInputStream;
 import java.net.URL;
diff --git a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/PWCBHandler.java b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/PWCBHandler.java
index 4367075..a249527 100644
--- a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/PWCBHandler.java
@@ -16,7 +16,7 @@
 
 package org.apache.rampart.samples.policy.sample08;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java
index 2d62ae1..8a1ef66 100644
--- a/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java
+++ b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java
@@ -18,7 +18,7 @@
  */
 package org.apache.rampart.samples.policy.sample09;
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
diff --git a/modules/rampart-tests/test-resources/PWCallback.java b/modules/rampart-tests/test-resources/PWCallback.java
index 3b259a2..fc4f73d 100644
--- a/modules/rampart-tests/test-resources/PWCallback.java
+++ b/modules/rampart-tests/test-resources/PWCallback.java
@@ -17,7 +17,7 @@
 package org.apache.axis2.security;
 
 
-import org.apache.ws.security.WSPasswordCallback;
+import org.apache.wss4j.common.ext.WSPasswordCallback;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -114,7 +114,7 @@
 
                  */
 
-                if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
+                if (pc.getUsage() == WSPasswordCallback.UNKNOWN) {
 
                 	if(pc.getIdentifier().equals("Ron") && pc.getPassword().equals("noR")) {
 
diff --git a/modules/rampart-trust/pom.xml b/modules/rampart-trust/pom.xml
index ae0ec58..e3f2dcb 100644
--- a/modules/rampart-trust/pom.xml
+++ b/modules/rampart-trust/pom.xml
@@ -93,7 +93,12 @@
             <artifactId>opensaml-soap-impl</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.owasp.esapi</groupId>
+            <groupId>org.owasp.esapi</groupId>            <exclusions>
+            	<exclusion>
+            		<groupId>xerces</groupId>
+            		<artifactId>xercesImpl</artifactId>
+            	</exclusion>
+            </exclusions>
             <artifactId>esapi</artifactId>
             <version>2.5.1.0</version>
         </dependency>
@@ -101,6 +106,12 @@
             <groupId>xalan</groupId>
             <artifactId>xalan</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+            	<exclusion>
+            		<groupId>xml-apis</groupId>
+            		<artifactId>xml-apis</artifactId>
+            	</exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java b/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
index 12fa5eb..ecb7f2a 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
@@ -26,7 +26,7 @@
 import org.apache.wss4j.dom.engine.WSSecurityEngineResult;
 import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.dom.handler.WSHandlerConstants;
-import org.apache.wss4j.dom.handler.WSHandlerResult;;
+import org.apache.wss4j.dom.handler.WSHandlerResult;
 import org.apache.wss4j.common.token.SecurityTokenReference;
 import org.opensaml.saml.saml1.core.Assertion;
 import org.w3c.dom.Document;
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java b/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
index fa8515c..194268a 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/Token.java
@@ -26,6 +26,7 @@
 import java.util.Date;
 import java.util.Properties;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.Instant;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
@@ -177,17 +178,15 @@
             OMElement createdElem =
                 lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS, WSConstants.CREATED_LN));
 
-            LocalDate localDateCreated = LocalDate.parse(createdElem.getText(), DateUtil.getDateTimeFormatter(true));
-            ZonedDateTime createdDateTime = localDateCreated.atStartOfDay(ZoneOffset.UTC);
-            this.created = Date.from(createdDateTime.toInstant());
+            LocalDateTime localDateCreated = LocalDateTime.parse(createdElem.getText(), DateUtil.getDateTimeFormatter(true));
+            this.created = Date.from(localDateCreated.atZone(ZoneOffset.UTC).toInstant());
 
             OMElement expiresElem =
                 lifetimeElem.getFirstChildWithName(new QName(WSConstants.WSU_NS, WSConstants.EXPIRES_LN));
 
-            LocalDate localDateExpires = LocalDate.parse(expiresElem.getText(), DateUtil.getDateTimeFormatter(true));
-            ZonedDateTime expiresDateTime = localDateExpires.atStartOfDay(ZoneOffset.UTC);
-
-            this.expires = Date.from(expiresDateTime.toInstant());
+            LocalDateTime localDateExpires = LocalDateTime.parse(expiresElem.getText(), DateUtil.getDateTimeFormatter(true));
+            this.expires = Date.from(localDateExpires.atZone(ZoneOffset.UTC).toInstant());
+            
         } catch (OMException e) {
             throw new TrustException("lifeTimeProcessingError", new String[]{lifetimeElem.toString()}, e);
         } catch (Exception e) {
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
index 0ca2e1e..d230601 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
@@ -102,7 +102,7 @@
 
         // Creation and expiration times
         Instant creationTime = Instant.now();
-        Instant expirationTime = Instant.ofEpochMilli(creationTime.getEpochSecond() + tokenIssuerConfiguration.getTtl());
+        Instant expirationTime = creationTime.plusMillis(tokenIssuerConfiguration.getTtl());
 
         // Get the document
         Document doc = ((Element) env).getOwnerDocument();
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuer.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuer.java
index 9910585..ddae36f 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuer.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuer.java
@@ -18,6 +18,7 @@
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.util.UIDGenerator;
 import org.apache.axis2.description.Parameter;
 import org.apache.rahas.RahasConstants;
 import org.apache.rahas.RahasData;
@@ -108,6 +109,9 @@
 
             SecurityContextToken sct =
                     new SecurityContextToken(this.getWSCVersion(data.getTokenType()), doc);
+            
+            // It appears WSS4J no longer includes an Id for SecurityContextToken automatically
+            sct.setID(UIDGenerator.generateUID());
 
             OMElement rstrElem;
             if (wstVersion == RahasConstants.VERSION_05_12) {
diff --git a/pom.xml b/pom.xml
index 0cec20e..67c65f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -601,7 +601,7 @@
             <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-jcl</artifactId>
-                <version>2.20.0</version>
+                <version>1.7.36</version>
             </dependency>
             <dependency>
                 <groupId>org.slf4j</groupId>
