diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.classpath b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.classpath
new file mode 100644
index 0000000..ed53773
--- /dev/null
+++ b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="compat-client"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.project b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.project
new file mode 100644
index 0000000..7054f52
--- /dev/null
+++ b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>compat-app</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/edu/uci/ics/hyracks/examples/compat/test/WordCountCompatibilityIT.java b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/edu/uci/ics/hyracks/examples/compat/test/WordCountCompatibilityIT.java
new file mode 100644
index 0000000..a2a8994
--- /dev/null
+++ b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatapp/src/test/java/edu/uci/ics/hyracks/examples/compat/test/WordCountCompatibilityIT.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.examples.compat.test;
+
+import java.io.File;
+
+import org.junit.Test;
+
+import edu.uci.ics.hyracks.examples.compat.client.WordCountCompatibility;
+
+public class WordCountCompatibilityIT {
+    @Test
+    public void runWordCount() throws Exception {
+        WordCountCompatibility.main(new String[] { "-cluster", getClusterConf(), "-jobFiles", getWordCountJobFile(),
+                "-applicationName", "compat" });
+    }
+
+    private String getClusterConf() {
+        return new File("conf/local_cluster.conf").getAbsolutePath();
+    }
+
+    private String getWordCountJobFile() {
+        return new File("job/wordcount/wordcount.job").getAbsolutePath();
+    }
+}
\ No newline at end of file
