diff --git a/lib/haxe/test/HaxeTests.hxproj b/lib/haxe/test/HaxeTests.hxproj
index 3beed82..7ad2392 100644
--- a/lib/haxe/test/HaxeTests.hxproj
+++ b/lib/haxe/test/HaxeTests.hxproj
@@ -4,11 +4,11 @@
   <output>
     <movie outputType="Application" />
     <movie input="" />
-    <movie path="bin/HaxeTests" />
+    <movie path="bin\HaxeTests" />
     <movie fps="30" />
     <movie width="800" />
     <movie height="600" />
-    <movie version="1" />
+    <movie version="0" />
     <movie minorVersion="0" />
     <movie platform="C++" />
     <movie background="#FFFFFF" />
@@ -17,7 +17,7 @@
   <classpaths>
     <class path="src" />
     <class path="gen-haxe" />
-    <class path="../src" />
+    <class path="..\src" />
   </classpaths>
   <!-- Build options -->
   <build>
@@ -26,11 +26,11 @@
     <option noInlineOnDebug="False" />
     <option mainClass="Main" />
     <option enabledebug="False" />
-    <option additional="" />
+    <option additional="--macro include('org.apache.thrift', true)&#xA;--macro include('thrift', true)" />
   </build>
   <!-- haxelib libraries -->
   <haxelib>
-    <!-- example: <library name="..." /> -->
+    <library name="uuid" />
   </haxelib>
   <!-- Class files to compile (other referenced classes will automatically be included) -->
   <compileTargets>
diff --git a/lib/haxe/test/php.hxml b/lib/haxe/test/php.hxml
index 14f2b2d..9fc23b6 100644
--- a/lib/haxe/test/php.hxml
+++ b/lib/haxe/test/php.hxml
@@ -27,7 +27,7 @@
 
 #PHP target
 -php bin/php/
---php-front Main-debug.php
+#--php-front Main-debug.php
 
 #Add debug information
 -debug
diff --git a/lib/haxe/test/src/MultiplexTest.hx b/lib/haxe/test/src/MultiplexTest.hx
index 3818b66..3e2786d 100644
--- a/lib/haxe/test/src/MultiplexTest.hx
+++ b/lib/haxe/test/src/MultiplexTest.hx
@@ -43,12 +43,12 @@
 import Error;
 
 
-class BenchmarkServiceHandler implements BenchmarkService
+class BenchmarkServiceHandler implements BenchmarkService_service
 {
     public function new() {
     }
 
-    public function fibonacci(n : haxe.Int32) : haxe.Int32 {
+	public function fibonacci(n : haxe.Int32) : haxe.Int32 {
         trace('Benchmark.fibonacci($n)');
         var next : Int;
         var prev   = 0;
@@ -60,12 +60,12 @@
             result = next;
             --n;
         }
-        return result;
+		return result;
     }
 }
 
 
-class AggrServiceHandler implements Aggr
+class AggrServiceHandler implements Aggr_service
 {
     private var values : List<haxe.Int32> = new List<haxe.Int32>();
 
@@ -91,7 +91,7 @@
     private inline static var NAME_AGGR             : String  = "Aggr";
 
 
-    public static override function Run(server : Bool) : Void {
+    public static function Run(server : Bool) : Void {
         if ( server) {
             RunMultiplexServer();
         } else {
@@ -102,13 +102,13 @@
 
 
     // run the multiplex server
-    public static override function RunMultiplexServer() : Void  {
+    public static function RunMultiplexServer() : Void  {
        try
        {
-            var benchHandler : BenchmarkService = new BenchmarkServiceHandler();
+            var benchHandler : BenchmarkService_service = new BenchmarkServiceHandler();
             var benchProcessor : TProcessor = new BenchmarkServiceProcessor( benchHandler);
 
-            var aggrHandler : Aggr = new AggrServiceHandler();
+            var aggrHandler : Aggr_service = new AggrServiceHandler();
             var aggrProcessor : TProcessor = new AggrProcessor( aggrHandler);
 
             var multiplex : TMultiplexedProcessor = new TMultiplexedProcessor();
@@ -137,7 +137,7 @@
 
 
     // run multiplex client against multiplex server
-    public static override function RunMultiplexClient() : Void  {
+    public static function RunMultiplexClient() : Void  {
         try
         {
             var trans : TTransport;
@@ -187,7 +187,7 @@
 
 
     // run non-multiplex client against multiplex server to test default fallback
-    public static override function RunDefaultClient() : Void  {
+    public static function RunDefaultClient() : Void  {
         try
         {
             var trans : TTransport;
diff --git a/lib/haxe/test/src/StreamTest.hx b/lib/haxe/test/src/StreamTest.hx
index 244f1ea..9b8706a 100644
--- a/lib/haxe/test/src/StreamTest.hx
+++ b/lib/haxe/test/src/StreamTest.hx
@@ -48,8 +48,9 @@
 
     public static function WriteData() : Xtruct
     {
+		var config : TConfiguration = new TConfiguration();
         var stream : TStream = new TFileStream( tmpfile, CreateNew);
-        var trans : TTransport = new TStreamTransport( null, stream);
+        var trans : TTransport = new TStreamTransport( null, stream, config);
         var prot = new TJSONProtocol( trans);
 
         var data = MakeTestData();
@@ -61,8 +62,9 @@
 
     public static function ReadData() : Xtruct
     {
+		var config : TConfiguration = new TConfiguration();
         var stream : TStream = new TFileStream( tmpfile, Read);
-        var trans : TTransport = new TStreamTransport( stream, null);
+        var trans : TTransport = new TStreamTransport( stream, null, config);
         var prot = new TJSONProtocol( trans);
 
         var data : Xtruct = new Xtruct();
@@ -72,7 +74,7 @@
         return data;
     }
 
-    public static override function Run(server : Bool) : Void
+    public static function Run(server : Bool) : Void
     {
         try {
             var written = WriteData();
