diff --git a/gazelle-proxy-ejb/pom.xml b/gazelle-proxy-ejb/pom.xml
index c8b0a1f0fe2571e84a55837824872b04c319d2e3..5b1da27f04473ecc4f39e75d8b974139c4c537e6 100644
--- a/gazelle-proxy-ejb/pom.xml
+++ b/gazelle-proxy-ejb/pom.xml
@@ -113,5 +113,12 @@
 			<groupId>net.ihe.gazelle.simulators.tls</groupId>
 			<artifactId>TLSSimulator-pki-jar</artifactId>
 		</dependency>
+
+		<dependency>
+			<groupId>commons-httpclient</groupId>
+			<artifactId>commons-httpclient</artifactId>
+			<version>3.1</version>
+		</dependency>
+
 	</dependencies>
 </project>
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 960fe5c3c3170c8be90d4d02d69b6212e1079ecd..0c9bef831d317a462dc57cae131d05cc943c78d6 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
@@ -1,5 +1,7 @@
 package net.ihe.gazelle.proxy.action;
 
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.Map;
 
 import javax.faces.context.ExternalContext;
@@ -14,8 +16,16 @@ import net.ihe.gazelle.proxy.model.message.AbstractMessage;
 import net.ihe.gazelle.proxy.model.message.HL7Message;
 import net.ihe.gazelle.proxy.model.message.HTTPMessage;
 import net.ihe.gazelle.proxy.model.message.SyslogMessage;
-
-import org.apache.commons.lang.ArrayUtils;
+import net.ihe.gazelle.proxy.util.Preferences;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.PartSource;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.tika.mime.MediaType;
 import org.jboss.seam.ScopeType;
@@ -104,7 +114,7 @@ public class MessageBean {
 	public void downloadFile(boolean inline) {
 		try {
 			HttpServletResponse response = (HttpServletResponse) extCtx.getResponse();
-			byte[] bytes = ArrayUtils.clone(message.getMessageReceived());
+			byte[] bytes = message.getMessageReceived();
 			ServletOutputStream servletOutputStream = response.getOutputStream();
 			response.setContentType("text/plain");
 			response.setContentLength(bytes.length);
@@ -157,4 +167,38 @@ public class MessageBean {
 		String result = StringEscapeUtils.escapeHtml(source);
 		return "<pre>" + result + "</pre>";
 	}
+
+	public void validate() {
+		// First send the file to EVSClient
+		HttpClient client = new HttpClient();
+		PostMethod filePost = new PostMethod(Preferences.getProperty("evsclient.url") + "upload");
+		PartSource partSource = new ByteArrayPartSource("message", message.getMessageReceived());
+		Part[] parts = { new FilePart("message", partSource) };
+		filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
+		int status = -1;
+		try {
+			status = client.executeMethod(filePost);
+		} catch (Exception e) {
+			status = -1;
+			e.printStackTrace();
+		}
+		// redirect the user to the good page
+		boolean fail = false;
+		if (status == HttpStatus.SC_OK) {
+			try {
+				String fileName = filePost.getResponseBodyAsString();
+				String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
+
+				HttpServletResponse response = (HttpServletResponse) extCtx.getResponse();
+				String url = Preferences.getProperty("evsclient.url") + "validate.seam?filename=" + encodedFileName;
+
+				response.sendRedirect(url);
+			} catch (IOException e) {
+				fail = true;
+				e.printStackTrace();
+			}
+		} else {
+			fail = true;
+		}
+	}
 }
diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6a173a25267e4731e1d1ec33bb090cf2e1df4d3
--- /dev/null
+++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java
@@ -0,0 +1,38 @@
+package net.ihe.gazelle.proxy.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class Preferences {
+
+	private static Properties preferences;
+	private static Object preferencesSync = new Object();
+
+	private Preferences() {
+		super();
+		// private!
+	}
+
+	public static String getProperty(String key) {
+		return getPreferences().getProperty(key);
+	}
+
+	private static Properties getPreferences() {
+		if (preferences == null) {
+			synchronized (preferencesSync) {
+				if (preferences == null) {
+					preferences = new Properties();
+					InputStream preferencesStream = Preferences.class.getResourceAsStream("/prefs.properties");
+					try {
+						preferences.load(preferencesStream);
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+		return preferences;
+	}
+
+}
diff --git a/gazelle-proxy-ejb/src/main/resources/prefs.properties b/gazelle-proxy-ejb/src/main/resources/prefs.properties
new file mode 100644
index 0000000000000000000000000000000000000000..1ee7d86d7620c00839d0de077b1cb1522f10ec66
--- /dev/null
+++ b/gazelle-proxy-ejb/src/main/resources/prefs.properties
@@ -0,0 +1 @@
+evsclient.url=${evsclient.url}
diff --git a/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml b/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml
index 69d084c91881d188bc9fc98bbefc378f8b4ffc29..b5fd8d46ce41cc35b9e7e29ef84de90f40a5be38 100644
--- a/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml
+++ b/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml
@@ -12,12 +12,18 @@
 	<h:commandLink action="#{messageBean.downloadFile(true)}"
 		rendered="#{messageBean.isDownloadable()}" value="View inline"
 		target="_blank" />
+	<br />
+	<rich:spacer height="10" rendered="#{messageBean.isDownloadable()}" />
+	<h:commandLink action="#{messageBean.validate()}"
+		rendered="#{messageBean.isDownloadable()}"
+		value="Validate using EVSClient" target="_blank" />
 
 	<rich:spacer height="10" />
 
-	<div style="font-family: monospace;"><rich:insert
-		rendered="#{messageBean.shouldDisplayMessageContent()}"
-		content="#{messageBean.message.getMessageReceivedAsString()}"
-		highlight="xml" /></div>
+	<div style="font-family: monospace;">
+		<rich:insert rendered="#{messageBean.shouldDisplayMessageContent()}"
+			content="#{messageBean.message.getMessageReceivedAsString()}"
+			highlight="xml" />
+	</div>
 
 </ui:composition>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 5e2c209b7cc257340bf13a5b2f02074c115568a5..3d7cec8c6cdfd7d11ebddeb4e78f16c5822cd169 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,6 +201,7 @@
 			</activation>
 			<properties>
 				<cas.service>http://127.0.0.1:8080/proxy/</cas.service>
+				<evsclient.url>http://127.0.0.1:8080/EVSClient/</evsclient.url>
 				<!-- development mode (disable in production) -->
 				<seam.debug>true</seam.debug>
 
@@ -245,6 +246,7 @@
 
 			<properties>
 				<cas.service>http://gazelle.ihe.net/proxy/</cas.service>
+				<evsclient.url>http://gazelle.ihe.net/EVSClient/</evsclient.url>
 				<!-- development mode (disable in production) -->
 				<seam.debug>false</seam.debug>