diff --git a/gazelle-proxy-ejb/pom.xml b/gazelle-proxy-ejb/pom.xml
index 109eeba1f5e064d335040712454f6013056ff170..da50488cea365150d40054a82a04893fb78b2956 100644
--- a/gazelle-proxy-ejb/pom.xml
+++ b/gazelle-proxy-ejb/pom.xml
@@ -80,6 +80,10 @@
 			<groupId>net.ihe.gazelle.simulators.tls</groupId>
 			<artifactId>TLSSimulator-pki-jar</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>net.ihe.gazelle.simulators.tls</groupId>
+			<artifactId>TLSSimulator-test-jar</artifactId>
+		</dependency>
 
 		<dependency>
 			<groupId>commons-io</groupId>
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java
index 4e15686e79df172e4522dbebe4a804be4c293c1f..d9499d669ccc7c5f921b3c19679e423c3b4eaa4d 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java
@@ -31,8 +31,9 @@ import javax.ejb.Remove;
 import javax.faces.model.SelectItem;
 
 import net.ihe.gazelle.proxy.action.dao.ProxyDAO;
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 import net.ihe.gazelle.proxy.netty.protocols.tls.TlsCredentials;
 import net.ihe.gazelle.simulators.tls.model.Certificate;
@@ -132,9 +133,9 @@ public class ChannelManagerBean implements Serializable {
 	}
 
 	private String createAndStartChannel(String name, Integer localPort, String remoteAddress, Integer remotePort,
-			ChannelType channelType, TlsConfig tlsConfig, Object config) {
+			ChannelType channelType, ConnectionConfig connectionConfig, Object config) {
 		try {
-			proxyBean.startChannel(name, localPort, remoteAddress, remotePort, channelType, tlsConfig, config);
+			proxyBean.startChannel(name, localPort, remoteAddress, remotePort, channelType, connectionConfig, config);
 			FacesMessages.instance().add(StatusMessage.Severity.INFO, "Channel successfully created");
 			return "/home.xhtml";
 		} catch (Throwable e) {
@@ -253,7 +254,7 @@ public class ChannelManagerBean implements Serializable {
 		return result.toArray(new SelectItem[result.size()]);
 	}
 
-	private TlsConfig getTlsConfig() {
+	private ConnectionConfig getTlsConfig() {
 		TlsCredentials clientCredentials = null;
 		if (pki) {
 			try {
@@ -348,12 +349,12 @@ public class ChannelManagerBean implements Serializable {
 
 	public void startChannel() {
 		if (identity.hasRole("admin_role")) {
-			TlsConfig tlsConfig = null;
+			ConnectionConfig connectionConfig = null;
 			if (secured) {
-				tlsConfig = getTlsConfig();
+				connectionConfig = getTlsConfig();
 			}
 			createAndStartChannel("", getProxyPort(), getResponderIP(), getResponderPort(), getMessageType(),
-					tlsConfig, null);
+					connectionConfig, null);
 		} else {
 			FacesMessages.instance().add("Wrong role");
 		}
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java
index d7a334f04ebd949e1338c1bae0f6f08c54fbc3d2..9decd6674b18f58c121a3d94d6e3d649afd18cde 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java
@@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import net.ihe.gazelle.proxy.action.dao.ProxyDAO;
-import net.ihe.gazelle.proxy.enums.ChannelType;
+import net.ihe.gazelle.proxy.model.ChannelType;
 import net.ihe.gazelle.proxy.model.message.AbstractMessage;
 import net.ihe.gazelle.proxy.model.message.DicomMessage;
 import net.ihe.gazelle.proxy.model.message.HL7Message;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java
index 1f60b3e0d9f8830c2218cb4de010a610c870e5e7..71474fd817cdb5c4ca538e7ce48ec1bca67a46b4 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java
@@ -16,8 +16,8 @@ import net.ihe.gazelle.common.filter.HibernateDataModel;
 import net.ihe.gazelle.proxy.action.dao.ProxyDAO;
 import net.ihe.gazelle.proxy.dao.MessageFilterStandard;
 import net.ihe.gazelle.proxy.dao.MessageFilterStep;
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
+import net.ihe.gazelle.proxy.model.ChannelType;
 import net.ihe.gazelle.proxy.model.message.AbstractMessage;
 import net.ihe.gazelle.proxy.model.message.DicomMessage;
 import net.ihe.gazelle.proxy.model.message.HL7Message;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java
index b2e905af96d697dd973eee595b757ce34b07986d..4a52ae4edbbcd0fa9f4ed36582deba4aa86b6c9e 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java
@@ -11,18 +11,18 @@ import java.util.List;
 import javax.persistence.EntityManager;
 
 import net.ihe.gazelle.proxy.action.dao.ProxyDAO;
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.listeners.DicomEventListener;
 import net.ihe.gazelle.proxy.listeners.HL7EventListener;
 import net.ihe.gazelle.proxy.listeners.HttpEventListener;
 import net.ihe.gazelle.proxy.listeners.SyslogEventListener;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.Proxy;
 import net.ihe.gazelle.proxy.netty.protocols.dicom.DicomProxy;
 import net.ihe.gazelle.proxy.netty.protocols.hl7.HL7Proxy;
 import net.ihe.gazelle.proxy.netty.protocols.http.HttpProxy;
 import net.ihe.gazelle.proxy.netty.protocols.syslog.SyslogProxy;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 import net.ihe.gazelle.proxy.util.HibernateUtilProxy;
 import net.ihe.gazelle.proxy.util.Preferences;
 
@@ -99,7 +99,7 @@ public class ProxyBean implements ProxyLocal {
 	}
 
 	public Channel startChannel(String name, Integer localPort, String remoteAddress, Integer remotePort,
-			ChannelType channelType, TlsConfig tlsConfig, Object config) {
+			ChannelType channelType, ConnectionConfig connectionConfig, Object config) {
 		Channel channel = new Channel();
 		channel.setProxyPort(localPort);
 		if (name != null)
@@ -113,7 +113,7 @@ public class ProxyBean implements ProxyLocal {
 		channel.setStartDate(new Date());
 		channel.setStarted(Boolean.TRUE);
 
-		ProxyChannel proxyChannel = createProxyChannel(channel, tlsConfig, config);
+		ProxyChannel proxyChannel = createProxyChannel(channel, connectionConfig, config);
 		proxyChannel.proxy.start();
 		listOfProxies.add(proxyChannel);
 
@@ -128,13 +128,13 @@ public class ProxyBean implements ProxyLocal {
 		return channel;
 	}
 
-	private ProxyChannel createProxyChannel(Channel channel, TlsConfig tlsConfig, Object config) {
+	private ProxyChannel createProxyChannel(Channel channel, ConnectionConfig connectionConfig, Object config) {
 		ProxyChannel proxyChannel = new ProxyChannel();
 		proxyChannel.channel = channel;
 		switch (channel.getChannelType()) {
 		case HL7:
 			proxyChannel.proxy = new HL7Proxy(new HL7EventListener(channel), channel.getProxyPort(),
-					channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig);
+					channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig);
 			break;
 		case DICOM:
 			String path = "/tmp";
@@ -145,15 +145,15 @@ public class ProxyBean implements ProxyLocal {
 			}
 			path = null;
 			proxyChannel.proxy = new DicomProxy(new DicomEventListener(channel), channel.getProxyPort(),
-					channel.getRemoteAddress(), channel.getRemotePort(), path, tlsConfig);
+					channel.getRemoteAddress(), channel.getRemotePort(), path, connectionConfig);
 			break;
 		case HTTP:
 			proxyChannel.proxy = new HttpProxy(new HttpEventListener(channel), channel.getProxyPort(),
-					channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig);
+					channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig);
 			break;
 		case SYSLOG:
 			proxyChannel.proxy = new SyslogProxy(new SyslogEventListener(channel), channel.getProxyPort(),
-					channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig);
+					channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig);
 			break;
 		default:
 			throw new IllegalStateException();
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java
index 8f5008ed7848715494ef6a5b9962c153aa4475ba..916e388aa4e9a92202600a8950e739e808a558a0 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java
@@ -2,15 +2,15 @@ package net.ihe.gazelle.proxy.action;
 
 import javax.ejb.Local;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.model.Channel;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
+import net.ihe.gazelle.proxy.model.ChannelType;
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 
 @Local
 public interface ProxyLocal {
 
 	public Channel startChannel(String name, Integer localPort, String remoteAddress, Integer remotePort,
-			ChannelType channelType, TlsConfig tlsConfig, Object config);
+			ChannelType channelType, ConnectionConfig tlsConfig, Object config);
 
 	public void stopChannel(Integer localPort);
 
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java
index 5b3a07035e1c7597a9da48b22f2f8fb61fb188dd..a4d4cda899508c527f29a9a4aa64ffd2c7fbcc73 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java
@@ -4,8 +4,8 @@ import java.util.Date;
 
 import net.ihe.gazelle.common.filter.hql.HQLQueryBuilder;
 import net.ihe.gazelle.common.filter.hql.HQLRestrictions;
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
+import net.ihe.gazelle.proxy.model.ChannelType;
 import net.ihe.gazelle.proxy.model.message.AbstractMessage;
 
 import org.apache.commons.lang.StringUtils;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java
index 63ba17db95758ca68d8cea354b50b4dc98e94577..c5bbf42f4d8551ccbaa5b05a5da8f0a10ce9bdf0 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java
@@ -27,7 +27,6 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 
 import org.hibernate.validator.NotNull;
 import org.hibernate.validator.Range;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java
similarity index 97%
rename from gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java
rename to gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java
index ae4bc8a7e46ed797c799279c9d18aa25e313343f..fd3fdff40b92f6af256ea11ea47601bb0aa5a5bf 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package net.ihe.gazelle.proxy.enums;
+package net.ihe.gazelle.proxy.model;
 
 import net.ihe.gazelle.proxy.model.message.AbstractMessage;
 import net.ihe.gazelle.proxy.model.message.DicomMessage;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
index ceb27b936226a6d66e074490be9bddd5c90ec6d0..0044939ddcb8f8261550ae79133a21f331e6da8d 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
@@ -37,9 +37,9 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
 
 import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
 import org.apache.commons.httpclient.methods.multipart.PartSource;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java
index 93948750ee7ec79a554fe356c30a137d2f587906..7b0684437096f4585781391ab0855a05b3185b6e 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java
@@ -36,9 +36,9 @@ import javax.persistence.EntityManager;
 import javax.persistence.FetchType;
 import javax.persistence.Transient;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
 import net.ihe.gazelle.proxy.model.CommandFieldValues;
 import net.ihe.gazelle.proxy.model.DicomUIDValues;
 import net.ihe.gazelle.proxy.model.LabelKeywordDescriptionClass;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java
index 87dc592e27022f7f337a6437ee7320b065d5ac11..5fe67c422db9f26b1a6be8249dcfe29419fe72d3 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java
@@ -17,9 +17,9 @@ package net.ihe.gazelle.proxy.model.message;
 
 import javax.persistence.Entity;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
 
 import org.jboss.seam.annotations.Name;
 
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java
index 3c6a7e47f3253527c666887d011e8fc7fffaaba6..59e921def20ea5bfed2d4586e3d5a1f32c9a33f2 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java
@@ -6,9 +6,9 @@ import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.OneToOne;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.jboss.seam.annotations.Name;
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java
index cfff86689ab8181cdbad17624c17e88f34e949e1..fafd1373ca1f85b077aca73262890d4c54c4ec43 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java
@@ -17,9 +17,9 @@ package net.ihe.gazelle.proxy.model.message;
 
 import javax.persistence.Entity;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
 import net.ihe.gazelle.proxy.enums.ProxySide;
 import net.ihe.gazelle.proxy.model.Channel;
+import net.ihe.gazelle.proxy.model.ChannelType;
 
 import org.jboss.seam.annotations.Name;
 
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java
index 4eb4c79dcc10fb832372b27856fca985d44d8401..0b2c21d9677078a5874d5ca2bc8a0cd53769f8ae 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java
@@ -10,7 +10,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 
-import net.ihe.gazelle.proxy.enums.ChannelType;
+import net.ihe.gazelle.proxy.model.ChannelType;
 
 @Entity
 @Table(name = "tm_configuration", schema = "public")
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java
index 91e94d31a307b442d426ecc653eb1f34c2bd4ed8..461d08cfc4b6b0196838c0a68b5faf79035e3c79 100644
--- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java
@@ -12,7 +12,7 @@ import javax.persistence.EntityManager;
 
 import net.ihe.gazelle.proxy.action.ProxyLocal;
 import net.ihe.gazelle.proxy.action.dao.ProxyDAO;
-import net.ihe.gazelle.proxy.enums.ChannelType;
+import net.ihe.gazelle.proxy.model.ChannelType;
 import net.ihe.gazelle.proxy.model.tm.Configuration;
 import net.ihe.gazelle.proxy.model.tm.Step;
 import net.ihe.gazelle.proxy.model.tm.TestInstance;
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java
index ac7db83d17b3010791d6dfe2024fef152b288591..b91660ee15be8252fd72407550c0144248e564d9 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java
@@ -131,7 +131,7 @@ public class App {
 	// return new HttpsTLSConfig(serverCredentials, clientCredentials);
 	// }
 
-	private static TlsConfig createTLSConfig() throws FileNotFoundException {
+	private static ConnectionConfig createTLSConfig() throws FileNotFoundException {
 		InputStream fis = new FileInputStream("/usr/local/jboss/sts.jks");
 		TlsCredentials serverCredentials = new TlsCredentials(fis, "gazelle".toCharArray(), "tomcat",
 				"gazelle".toCharArray());
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..c152c4d83c3ec4b49dd0da97ef363826cb035c7a
--- /dev/null
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java
@@ -0,0 +1,13 @@
+package net.ihe.gazelle.proxy.netty;
+
+import java.util.List;
+
+import org.jboss.netty.channel.ChannelHandler;
+
+public interface ConnectionConfig {
+
+	List<ChannelHandler> getRequestConnectionHandlers();
+
+	List<ChannelHandler> getResponseConnectionHandlers();
+
+}
\ No newline at end of file
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java
index 119cc8cbd778daf2797dd81d1be50e4e4b36e983..1048150af17526b4809937678452924f1847e089 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java
@@ -4,8 +4,6 @@ import java.net.InetSocketAddress;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
-
 import org.jboss.netty.bootstrap.ServerBootstrap;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
@@ -17,19 +15,20 @@ public abstract class Proxy<REQU, RESP> {
 	private Channel serverChannel;
 	protected ProxyConfig<REQU, RESP> proxyConfig;
 
-	public Proxy(ProxyEventListener<REQU, RESP> eventListener, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
+	public Proxy(ProxyEventListener<REQU, RESP> eventListener, int localPort, String remoteHost, int remotePort,
+			ConnectionConfig connectionConfig) {
 		super();
 
 		ExecutorService executor = Executors.newCachedThreadPool();
 		// Set up the client socket factory (for connecting to remote host).
 		ClientSocketChannelFactory cf = new NioClientSocketChannelFactory(executor, executor);
 
-		this.proxyConfig = getProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+		this.proxyConfig = getProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 		this.serverChannel = null;
 	}
 
 	protected abstract ProxyConfig<REQU, RESP> getProxyConfig(ProxyEventListener<REQU, RESP> eventListener,
-			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig);
+			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, ConnectionConfig tlsConfig);
 
 	public void start() {
 		if (serverChannel != null) {
@@ -54,4 +53,11 @@ public abstract class Proxy<REQU, RESP> {
 		serverChannel = null;
 	}
 
+	public boolean isOpen() {
+		if (serverChannel == null && serverChannel.isOpen()) {
+			return true;
+		}
+		return false;
+	}
+
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java
index bd3a42eeb7be4ceda667da694fb83d7adc346287..e263a507d94c40aad4c16e8cef1291060b3f0af5 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java
@@ -3,7 +3,6 @@ package net.ihe.gazelle.proxy.netty;
 import java.util.List;
 
 import net.ihe.gazelle.proxy.netty.channel.ProxySide;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelFactory;
@@ -32,9 +31,5 @@ public interface ProxyConfig<REQU, RESP> {
 	public int getRemotePort();
 
 	public int getLocalPort();
-	
-	public void initContexts(TlsConfig tlsConfig);
-	
-	public void setTLS(boolean isTLS);
 
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java
index 0aa3512aa77676946be8dfa1efbcdee3fae6f7ff..f5578282dbaeb52e903b229e7408ac896fea8169 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java
@@ -1,76 +1,46 @@
 package net.ihe.gazelle.proxy.netty;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.TrustManager;
-
 import net.ihe.gazelle.proxy.netty.channel.ServerPipelineFactory;
-import net.ihe.gazelle.proxy.netty.protocols.tls.AlwaysTrustManager;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsCredentials;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsKeyManager;
 
 import org.jboss.netty.channel.ChannelFactory;
 import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
-import org.jboss.netty.handler.ssl.SslHandler;
 
 public abstract class ProxyConfigAbstract<REQU, RESP> implements ProxyConfig<REQU, RESP> {
 
-	private static final String PROTOCOL = "TLS";
-	private static final TrustManager[] ALWAYS_TRUST_MANAGER = new TrustManager[] { new AlwaysTrustManager() };
-
 	protected ProxyEventListener<REQU, RESP> eventListener;
 	protected ClientSocketChannelFactory cf;
 	protected int localPort;
 	protected String remoteHost;
 	protected int remotePort;
-
-	// TLS configuration
-	protected boolean isTLS;
-
-	private SSLContext serverContext = null;
-	private SSLContext clientContext = null;
-
-	// end TLS configuration
+	private ConnectionConfig connectionConfig;
 
 	public ProxyConfigAbstract(ProxyEventListener<REQU, RESP> eventListener, ClientSocketChannelFactory cf,
-			int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
+			int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
 		super();
 		this.eventListener = eventListener;
 		this.cf = cf;
 		this.localPort = localPort;
 		this.remoteHost = remoteHost;
 		this.remotePort = remotePort;
-		if (tlsConfig != null) {
-			isTLS = true;
-			initContexts(tlsConfig);
-		} else {
-			isTLS = false;
-		}
+		this.connectionConfig = connectionConfig;
 	}
 
 	public List<ChannelHandler> getRequestConnectionHandlers() {
-		if (isTLS) {
-			SSLEngine engine = serverContext.createSSLEngine();
-			engine.setUseClientMode(false);
-			return Collections.singletonList(getChannelHandler(engine));
+		if (connectionConfig != null) {
+			return connectionConfig.getRequestConnectionHandlers();
 		} else {
 			return new ArrayList<ChannelHandler>(0);
 		}
 	}
 
 	public List<ChannelHandler> getResponseConnectionHandlers() {
-		if (isTLS) {
-			SSLEngine engine = clientContext.createSSLEngine();
-			engine.setUseClientMode(true);
-			return Collections.singletonList(getChannelHandler(engine));
+		if (connectionConfig != null) {
+			return connectionConfig.getResponseConnectionHandlers();
 		} else {
 			return new ArrayList<ChannelHandler>(0);
 		}
@@ -96,46 +66,4 @@ public abstract class ProxyConfigAbstract<REQU, RESP> implements ProxyConfig<REQ
 		return localPort;
 	}
 
-	// TLS stuff
-
-	public boolean isTLS() {
-		return isTLS;
-	}
-
-	public void setTLS(boolean isTLS) {
-		this.isTLS = isTLS;
-	}
-
-	public void initContexts(TlsConfig tlsConfig) {
-		clientContext = createContext(tlsConfig.getClientCredentials());
-		serverContext = createContext(tlsConfig.getServerCredentials());
-	}
-
-	private SSLContext createContext(TlsCredentials credentials) {
-		SSLContext context = null;
-		try {
-			context = SSLContext.getInstance(PROTOCOL);
-			if (credentials == null) {
-				context.init(null, ALWAYS_TRUST_MANAGER, null);
-			} else {
-				KeyManager keyManager = getKeyManager(credentials);
-				KeyManager[] keyManagers = new KeyManager[] { keyManager };
-				context.init(keyManagers, ALWAYS_TRUST_MANAGER, null);
-			}
-		} catch (Exception e) {
-			throw new Error("Failed to initialize the SSLContext", e);
-		}
-		return context;
-	}
-
-	private KeyManager getKeyManager(TlsCredentials clientCredentials) {
-		return new TlsKeyManager(clientCredentials);
-	}
-
-	private ChannelHandler getChannelHandler(SSLEngine engine) {
-		SslHandler sslHandler = new SslHandler(engine);
-		sslHandler.setEnableRenegotiation(true);
-		return sslHandler;
-	}
-
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java
index 0082bdb9709b6611bd4ef2338961257f4114ec9b..5e063323318224d6e65312eb087e9f609a6ca0da 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java
@@ -1,26 +1,26 @@
 package net.ihe.gazelle.proxy.netty.protocols.dicom;
 
 import jp.digitalsensation.ihej.transactionmonitor.dicom.messageexchange.DimseMessage;
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.Proxy;
 import net.ihe.gazelle.proxy.netty.ProxyConfig;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
 
 public class DicomProxy extends Proxy<DimseMessage, DimseMessage> {
 
 	public DicomProxy(ProxyEventListener<DimseMessage, DimseMessage> eventListener, int localPort, String remoteHost,
-			int remotePort, String storageFolder, TlsConfig tlsConfig) {
-		super(eventListener, localPort, remoteHost, remotePort, tlsConfig);
+			int remotePort, String storageFolder, ConnectionConfig connectionConfig) {
+		super(eventListener, localPort, remoteHost, remotePort, connectionConfig);
 		((DicomProxyConfig) proxyConfig).setStorageFolder(storageFolder);
 	}
 
 	@Override
 	protected ProxyConfig<DimseMessage, DimseMessage> getProxyConfig(
 			ProxyEventListener<DimseMessage, DimseMessage> eventListener, ClientSocketChannelFactory cf, int localPort,
-			String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		return new DicomProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		return new DicomProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java
index eef87b9103ece333a1599bc3915c28e58c6c4179..3895b18434dfc70652e940fb71516b8259500e52 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java
@@ -4,10 +4,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 import jp.digitalsensation.ihej.transactionmonitor.dicom.messageexchange.DimseMessage;
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
 import net.ihe.gazelle.proxy.netty.channel.ProxySide;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandler;
@@ -18,8 +18,8 @@ public class DicomProxyConfig extends ProxyConfigAbstract<DimseMessage, DimseMes
 	private String storageFolder;
 
 	public DicomProxyConfig(ProxyEventListener<DimseMessage, DimseMessage> eventListener,
-			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	public String getStorageFolder() {
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java
index abf3fd5bdeaae2c199e166da390708b534f87a26..53079bf6a03295a2ecd3f86eac33257c678d854c 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java
@@ -1,23 +1,24 @@
 package net.ihe.gazelle.proxy.netty.protocols.hl7;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.Proxy;
 import net.ihe.gazelle.proxy.netty.ProxyConfig;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
 
 public class HL7Proxy extends Proxy<String, String> {
 
 	public HL7Proxy(ProxyEventListener<String, String> eventListener, int localPort, String remoteHost, int remotePort,
-			TlsConfig tlsConfig) {
-		super(eventListener, localPort, remoteHost, remotePort, tlsConfig);
+			ConnectionConfig connectionConfig) {
+		super(eventListener, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	@Override
 	protected ProxyConfig<String, String> getProxyConfig(ProxyEventListener<String, String> eventListener,
-			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		return new HL7ProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort,
+			ConnectionConfig connectionConfig) {
+		return new HL7ProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java
index 80ca214a63aaca5578d922402df02c7cf6d84e9a..3bef6069f047735145bf929d350a093caf9ee9d5 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java
@@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.hl7;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
 import net.ihe.gazelle.proxy.netty.channel.ProxySide;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandler;
@@ -15,8 +15,8 @@ import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
 public class HL7ProxyConfig extends ProxyConfigAbstract<String, String> {
 
 	public HL7ProxyConfig(ProxyEventListener<String, String> eventListener, ClientSocketChannelFactory cf,
-			int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	public List<ChannelHandler> getRequestDecoderChannels() {
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java
index d848dae73c90ae46335d458477d67efeaa67e113..4b34116f4c0293489d3f26fdeca925914804702d 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java
@@ -1,9 +1,9 @@
 package net.ihe.gazelle.proxy.netty.protocols.http;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.Proxy;
 import net.ihe.gazelle.proxy.netty.ProxyConfig;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
 import org.jboss.netty.handler.codec.http.HttpRequest;
@@ -12,15 +12,15 @@ import org.jboss.netty.handler.codec.http.HttpResponse;
 public class HttpProxy extends Proxy<HttpRequest, HttpResponse> {
 
 	public HttpProxy(ProxyEventListener<HttpRequest, HttpResponse> proxyEvent, int localPort, String remoteHost,
-			int remotePort, TlsConfig tlsConfig) {
-		super(proxyEvent, localPort, remoteHost, remotePort, tlsConfig);
+			int remotePort, ConnectionConfig connectionConfig) {
+		super(proxyEvent, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	@Override
 	protected ProxyConfig<HttpRequest, HttpResponse> getProxyConfig(
 			ProxyEventListener<HttpRequest, HttpResponse> eventListener, ClientSocketChannelFactory cf, int localPort,
-			String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		return new HttpProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		return new HttpProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java
index 8e3cd26d964e022ae314f0b6790f81b7fef033ca..1095a4cab4a0e84f4c92a38ca290bf320e4e500d 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java
@@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.http;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
 import net.ihe.gazelle.proxy.netty.channel.ProxySide;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandler;
@@ -21,8 +21,8 @@ import org.jboss.netty.handler.codec.http.HttpResponseDecoder;
 public class HttpProxyConfig extends ProxyConfigAbstract<HttpRequest, HttpResponse> {
 
 	public HttpProxyConfig(ProxyEventListener<HttpRequest, HttpResponse> eventListener, ClientSocketChannelFactory cf,
-			int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	public List<ChannelHandler> getRequestDecoderChannels() {
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java
index 057385790b162c9842a44a43c7486e31409a6b43..96724451d2de1dded6c05abe9364a05a086fd344 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java
@@ -1,23 +1,24 @@
 package net.ihe.gazelle.proxy.netty.protocols.syslog;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.Proxy;
 import net.ihe.gazelle.proxy.netty.ProxyConfig;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.channel.socket.ClientSocketChannelFactory;
 
 public class SyslogProxy extends Proxy<String, String> {
 
 	public SyslogProxy(ProxyEventListener<String, String> eventListener, int localPort, String remoteHost,
-			int remotePort, TlsConfig tlsConfig) {
-		super(eventListener, localPort, remoteHost, remotePort, tlsConfig);
+			int remotePort, ConnectionConfig connectionConfig) {
+		super(eventListener, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	@Override
 	protected ProxyConfig<String, String> getProxyConfig(ProxyEventListener<String, String> eventListener,
-			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		return new SyslogProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort,
+			ConnectionConfig connectionConfig) {
+		return new SyslogProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 }
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java
index 8f06a5abdd61fec63b2b0726b70bf9d2368cfce1..5bfae11956c92b01f58b28099e5ac43142bbcd0f 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java
@@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.syslog;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
 import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract;
 import net.ihe.gazelle.proxy.netty.ProxyEventListener;
 import net.ihe.gazelle.proxy.netty.channel.ProxySide;
-import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig;
 
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
@@ -19,8 +19,8 @@ import org.jboss.netty.util.CharsetUtil;
 public class SyslogProxyConfig extends ProxyConfigAbstract<String, String> {
 
 	public SyslogProxyConfig(ProxyEventListener<String, String> eventListener, ClientSocketChannelFactory cf,
-			int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) {
-		super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig);
+			int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) {
+		super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig);
 	}
 
 	public List<ChannelHandler> getRequestDecoderChannels() {
diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java
index 63a825d2a190b9cb7b6eeab5072c1d61f380f8e4..e88dfecbffd81d51a091593a690fae90ce5a965e 100644
--- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java
+++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java
@@ -1,22 +1,86 @@
 package net.ihe.gazelle.proxy.netty.protocols.tls;
 
-public class TlsConfig {
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
-	private TlsCredentials serverCredentials;
-	private TlsCredentials clientCredentials;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.TrustManager;
+
+import net.ihe.gazelle.proxy.netty.ConnectionConfig;
+
+import org.jboss.netty.channel.ChannelHandler;
+import org.jboss.netty.handler.ssl.SslHandler;
+
+public class TlsConfig implements ConnectionConfig {
+
+	private static final String PROTOCOL = "TLS";
+	private static final TrustManager[] ALWAYS_TRUST_MANAGER = new TrustManager[] { new AlwaysTrustManager() };
+
+	private SSLContext clientContext;
+	private SSLContext serverContext;
 
 	public TlsConfig(TlsCredentials serverCredentials, TlsCredentials clientCredentials) {
 		super();
-		this.serverCredentials = serverCredentials;
-		this.clientCredentials = clientCredentials;
+		if (clientCredentials != null) {
+			clientContext = createContext(clientCredentials);
+		} else {
+			clientContext = null;
+		}
+		if (serverCredentials != null) {
+			serverContext = createContext(serverCredentials);
+		} else {
+			serverContext = null;
+		}
+	}
+
+	public List<ChannelHandler> getRequestConnectionHandlers() {
+		if (serverContext != null) {
+			SSLEngine engine = serverContext.createSSLEngine();
+			engine.setUseClientMode(false);
+			return Collections.singletonList(getChannelHandler(engine));
+		} else {
+			return new ArrayList<ChannelHandler>(0);
+		}
+	}
+
+	public List<ChannelHandler> getResponseConnectionHandlers() {
+		if (clientContext != null) {
+			SSLEngine engine = clientContext.createSSLEngine();
+			engine.setUseClientMode(true);
+			return Collections.singletonList(getChannelHandler(engine));
+		} else {
+			return new ArrayList<ChannelHandler>(0);
+		}
+	}
+
+	private SSLContext createContext(TlsCredentials credentials) {
+		SSLContext context = null;
+		try {
+			context = SSLContext.getInstance(PROTOCOL);
+			if (credentials == null) {
+				context.init(null, ALWAYS_TRUST_MANAGER, null);
+			} else {
+				KeyManager keyManager = getKeyManager(credentials);
+				KeyManager[] keyManagers = new KeyManager[] { keyManager };
+				context.init(keyManagers, ALWAYS_TRUST_MANAGER, null);
+			}
+		} catch (Exception e) {
+			throw new Error("Failed to initialize the SSLContext", e);
+		}
+		return context;
 	}
 
-	public TlsCredentials getServerCredentials() {
-		return serverCredentials;
+	private KeyManager getKeyManager(TlsCredentials clientCredentials) {
+		return new TlsKeyManager(clientCredentials);
 	}
 
-	public TlsCredentials getClientCredentials() {
-		return clientCredentials;
+	private ChannelHandler getChannelHandler(SSLEngine engine) {
+		SslHandler sslHandler = new SslHandler(engine);
+		sslHandler.setEnableRenegotiation(true);
+		return sslHandler;
 	}
 
 }
diff --git a/pom.xml b/pom.xml
index 5011c648ba4721b5fc88cb9cd208b17ff14a5257..8db4de868f50483cc55bae83e2eecf8954d2c344 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,13 @@
 			<dependency>
 				<groupId>net.ihe.gazelle.simulators.tls</groupId>
 				<artifactId>TLSSimulator-pki-jar</artifactId>
-				<version>1.4</version>
+				<version>1.13</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>net.ihe.gazelle.simulators.tls</groupId>
+				<artifactId>TLSSimulator-test-jar</artifactId>
+				<version>1.13</version>
 				<type>jar</type>
 			</dependency>