Some code simplifications.
diff --git a/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java b/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
index f127879..b92cd34 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
@@ -51,7 +51,6 @@
 import org.apache.sandesha2.util.FaultManager;
 import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.RMMsgCreator;
-import org.apache.sandesha2.util.SOAPAbstractFactory;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SpecSpecificConstants;
 import org.apache.sandesha2.util.WSRMMessageSender;
@@ -163,7 +162,7 @@
 			ackMsgCtx.setMessageID(SandeshaUtil.getUUID());
 		
 		//adding the SOAP Envelope
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(msgContext.getEnvelope()));
+		SOAPFactory factory = (SOAPFactory)msgContext.getEnvelope().getOMFactory();
 		SOAPEnvelope envelope = factory.getDefaultEnvelope();
 		try {
 			ackMsgCtx.setEnvelope(envelope);
diff --git a/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java b/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
index 1608c75..d9ad4a7 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
@@ -53,7 +53,6 @@
 import org.apache.sandesha2.util.FaultManager;
 import org.apache.sandesha2.util.LoggingControl;
 import org.apache.sandesha2.util.MsgInitializer;
-import org.apache.sandesha2.util.SOAPAbstractFactory;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SpecSpecificConstants;
 import org.apache.sandesha2.workers.SandeshaThread;
@@ -369,15 +368,7 @@
 	private static void addMessagePendingHeader(MessageContext returnMessage, String namespace) {
 		MessagePending messagePending = new MessagePending();
 		messagePending.setPending(true);
-		if (returnMessage.getEnvelope().getHeader() == null) {
-			int SOAPVersion = Sandesha2Constants.SOAPVersion.v1_1;
-			if (!returnMessage.isSOAP11())
-				SOAPVersion = Sandesha2Constants.SOAPVersion.v1_2;
-			//The header might not be there because of the persistence code if it doesn't exist we need to add one
-			SOAPAbstractFactory.getSOAPFactory(
-					SOAPVersion).createSOAPHeader(returnMessage.getEnvelope());
-		}
-		messagePending.toHeader(returnMessage.getEnvelope().getHeader());
+		messagePending.toHeader(returnMessage.getEnvelope().getOrCreateHeader());
 	}
 
 	public boolean processOutMessage(RMMsgContext rmMsgCtx, Transaction transaction) {
diff --git a/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java b/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
index 45e74b4..4f329f5 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
@@ -201,7 +201,7 @@
 
 		ackMsgCtx.setMessageID(SandeshaUtil.getUUID());
 
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(referenceMsg.getEnvelope()));
+		SOAPFactory factory = (SOAPFactory)referenceMsg.getEnvelope().getOMFactory();
 
 		// Setting new envelope
 		SOAPEnvelope envelope = factory.getDefaultEnvelope();
diff --git a/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java b/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java
index dcbb7c9..4c23d81 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java
@@ -454,7 +454,7 @@
 		MessageContext outMessage = MessageContextBuilder.createOutMessageContext (requestMsg.getMessageContext());
 		RMMsgContext responseRMMsg = new RMMsgContext(outMessage);
 		
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(requestMsg.getSOAPEnvelope()));
+		SOAPFactory factory = (SOAPFactory)requestMsg.getSOAPEnvelope().getOMFactory();
 
 		String namespace = requestMsg.getRMNamespaceValue();
 		responseRMMsg.setRMNamespaceValue(namespace);
diff --git a/modules/core/src/main/java/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java b/modules/core/src/main/java/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
index 66029b1..367c0a2 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
@@ -148,8 +148,7 @@
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.soapEnvNotSet));
 
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
-				.getSOAPVersion(faultMsgEnvelope));
+		SOAPFactory factory = (SOAPFactory)faultMsgEnvelope.getOMFactory();
 
 		SOAPFault fault = faultMsgEnvelope.getBody().getFault();
 
@@ -182,8 +181,7 @@
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.soapEnvNotSet));
 
-		SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
-				.getSOAPVersion(faultEnvelope));
+		SOAPFactory factory = (SOAPFactory)faultEnvelope.getOMFactory();
 
 		SOAPFault fault = faultEnvelope.getBody().getFault();
 		if (fault == null)
diff --git a/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java b/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
index 27821dd..de5a18d 100644
--- a/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
+++ b/modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java
@@ -430,8 +430,7 @@
 			operationContext.addMessageContext(newMessageContext);
 
 			// adding a blank envelope
-			SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(referenceMessage
-					.getEnvelope()));
+			SOAPFactory factory = (SOAPFactory)referenceMessage.getEnvelope().getOMFactory();
 			newMessageContext.setEnvelope(factory.getDefaultEnvelope());
 
 			newMessageContext.setTransportIn(referenceMessage.getTransportIn());