diff --git a/test/java/src/TestClient.java b/test/java/src/TestClient.java
index cbcd802..686920c 100644
--- a/test/java/src/TestClient.java
+++ b/test/java/src/TestClient.java
@@ -1,11 +1,11 @@
 package com.facebook.thrift.test;
 
-import ThriftTest.*;
-import com.facebook.thrift.types.*;
+// Generated code
+import thrift.test.*;
+
 import com.facebook.thrift.transport.TSocket;
 import com.facebook.thrift.transport.TTransportException;
 import com.facebook.thrift.protocol.TBinaryProtocol;
-import com.facebook.thrift.protocol.TString;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -39,8 +39,8 @@
         new TSocket(host, port);
       TBinaryProtocol binaryProtocol =
         new TBinaryProtocol();
-      ThriftTestClient testClient =
-        new ThriftTestClient(tSocket, binaryProtocol);
+      ThriftTest.Client testClient =
+        new ThriftTest.Client(tSocket, binaryProtocol);
 
       for (int test = 0; test < numTests; ++test) {
 
@@ -69,154 +69,154 @@
          * STRING TEST
          */
         System.out.print("testString(\"Test\")");
-        TString s = testClient.testString(new TString("Test"));
-        System.out.print(" = \"" + s.value + "\"\n");
-   
+        String s = testClient.testString("Test");
+        System.out.print(" = \"" + s + "\"\n");
+
         /**
          * BYTE TEST
          */
         System.out.print("testByte(1)");
-        UInt8 u8 = testClient.testByte(new UInt8((short)1));
-        System.out.print(" = " + u8.get() + "\n");
+        byte i8 = testClient.testByte((byte)1);
+        System.out.print(" = " + i8 + "\n");
   
         /**
          * I32 TEST
          */
         System.out.print("testI32(-1)");
-        Int32 i32 = testClient.testI32(new Int32(-1));
-        System.out.print(" = " + i32.get() + "\n");
+        int i32 = testClient.testI32(-1);
+        System.out.print(" = " + i32 + "\n");
 
         /**
          * I64 TEST
          */
         System.out.print("testI64(-34359738368)");
-        Int64 i64 = testClient.testI64(new Int64(-34359738368L));
-        System.out.print(" = " + i64.get() + "\n");
+        long i64 = testClient.testI64(-34359738368L);
+        System.out.print(" = " + i64 + "\n");
 
         /**
          * STRUCT TEST
          */
         System.out.print("testStruct({\"Zero\", 1, -3, -5})");
         Xtruct out = new Xtruct();
-        out.string_thing.value = "Zero";
-        out.byte_thing.set((short)1);
-        out.i32_thing.set(-3);
-        out.i64_thing.set(-5);
+        out.string_thing = "Zero";
+        out.byte_thing = (byte) 1;
+        out.i32_thing = -3;
+        out.i64_thing = -5;
         Xtruct in = testClient.testStruct(out);
         System.out.print(" = {" +
-                         "\"" + in.string_thing.value + "\", " +
-                         in.byte_thing.get() + ", " +
-                         in.i32_thing.get() + ", " +
-                         in.i64_thing.get() + "}\n");
+                         "\"" + in.string_thing + "\", " +
+                         in.byte_thing + ", " +
+                         in.i32_thing + ", " +
+                         in.i64_thing + "}\n");
 
         /**
          * NESTED STRUCT TEST
          */
         System.out.print("testNest({1, {\"Zero\", 1, -3, -5}), 5}");
         Xtruct2 out2 = new Xtruct2();
-        out2.byte_thing.set((short)1);
+        out2.byte_thing = (short)1;
         out2.struct_thing = out;
-        out2.i32_thing.set(5);
+        out2.i32_thing = 5;
         Xtruct2 in2 = testClient.testNest(out2);
         in = in2.struct_thing;
         System.out.print(" = {" +
-                         in2.byte_thing.get() + ", {" +
-                         "\"" + in.string_thing.value + "\", " +
-                         in.byte_thing.get() + ", " +
-                         in.i32_thing.get() + ", " +
-                         in.i64_thing.get() + "}, " +
-                         in2.i32_thing.get() + "}\n");
+                         in2.byte_thing + ", {" +
+                         "\"" + in.string_thing + "\", " +
+                         in.byte_thing + ", " +
+                         in.i32_thing + ", " +
+                         in.i64_thing + "}, " +
+                         in2.i32_thing + "}\n");
 
         /**
          * MAP TEST
          */
-        HashMap<Int32,Int32> mapout = new HashMap<Int32,Int32>();
+        HashMap<Integer,Integer> mapout = new HashMap<Integer,Integer>();
         for (int i = 0; i < 5; ++i) {
-          mapout.put(new Int32(i), new Int32(i-10));
+          mapout.put(i, i-10);
         }
         System.out.print("testMap({");
         boolean first = true;
-        for (Int32 key : mapout.keySet()) {
+        for (int key : mapout.keySet()) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(key.get() + " => " + mapout.get(key).get());
+          System.out.print(key + " => " + mapout.get(key));
         }
         System.out.print("})");
-        HashMap<Int32,Int32> mapin = testClient.testMap(mapout);
+        HashMap<Integer,Integer> mapin = testClient.testMap(mapout);
         System.out.print(" = {");
         first = true;
-        for (Int32 key : mapin.keySet()) {
+        for (int key : mapin.keySet()) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(key.get() + " => " + mapout.get(key).get());
+          System.out.print(key + " => " + mapout.get(key));
         }
         System.out.print("}\n");
 
         /**
          * SET TEST
          */
-        HashSet<Int32> setout = new HashSet<Int32>();
+        HashSet<Integer> setout = new HashSet<Integer>();
         for (int i = -2; i < 3; ++i) {
-          setout.add(new Int32(i));
+          setout.add(i);
         }
         System.out.print("testSet({");
         first = true;
-        for (Int32 elem : setout) {
+        for (int elem : setout) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(elem.get());
+          System.out.print(elem);
         }
         System.out.print("})");
-        HashSet<Int32> setin = testClient.testSet(setout);
+        HashSet<Integer> setin = testClient.testSet(setout);
         System.out.print(" = {");
         first = true;
-        for (Int32 elem : setin) {
+        for (int elem : setin) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(elem.get());
+          System.out.print(elem);
         }
         System.out.print("}\n");
 
         /**
          * LIST TEST
          */
-        ArrayList<Int32> listout = new ArrayList<Int32>();
+        ArrayList<Integer> listout = new ArrayList<Integer>();
         for (int i = -2; i < 3; ++i) {
-          listout.add(new Int32(i));
+          listout.add(i);
         }
         System.out.print("testList({");
         first = true;
-        for (Int32 elem : listout) {
+        for (int elem : listout) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(elem.get());
+          System.out.print(elem);
         }
         System.out.print("})");
-        ArrayList<Int32> listin = testClient.testList(listout);
+        ArrayList<Integer> listin = testClient.testList(listout);
         System.out.print(" = {");
         first = true;
-        for (Int32 elem : listin) {
+        for (int elem : listin) {
           if (first) {
             first = false;
           } else {
             System.out.print(", ");
           }
-          System.out.print(elem.get());
+          System.out.print(elem);
         }
         System.out.print("}\n");
 
@@ -224,44 +224,44 @@
          * ENUM TEST
          */
         System.out.print("testEnum(ONE)");
-        Int32 ret = testClient.testEnum(Numberz.ONE);
-        System.out.print(" = " + ret.get() + "\n");
+        int ret = testClient.testEnum(Numberz.ONE);
+        System.out.print(" = " + ret + "\n");
 
         System.out.print("testEnum(TWO)");
         ret = testClient.testEnum(Numberz.TWO);
-        System.out.print(" = " + ret.get() + "\n");
+        System.out.print(" = " + ret + "\n");
 
         System.out.print("testEnum(THREE)");
         ret = testClient.testEnum(Numberz.THREE);
-        System.out.print(" = " + ret.get() + "\n");
+        System.out.print(" = " + ret + "\n");
 
         System.out.print("testEnum(FIVE)");
         ret = testClient.testEnum(Numberz.FIVE);
-        System.out.print(" = " + ret.get() + "\n");
+        System.out.print(" = " + ret + "\n");
 
         System.out.print("testEnum(EIGHT)");
         ret = testClient.testEnum(Numberz.EIGHT);
-        System.out.print(" = " + ret.get() + "\n");
+        System.out.print(" = " + ret + "\n");
 
         /**
          * TYPEDEF TEST
          */
         System.out.print("testTypedef(309858235082523)");
-        Int64 uid = testClient.testTypedef(new Int64(309858235082523L));
-        System.out.print(" = " + uid.get() + "\n");
+        long uid = testClient.testTypedef(309858235082523L);
+        System.out.print(" = " + uid + "\n");
 
         /**
          * NESTED MAP TEST
          */
         System.out.print("testMapMap(1)");
-        HashMap<Int32,HashMap<Int32,Int32>> mm =
-          testClient.testMapMap(new Int32(1));
+        HashMap<Integer,HashMap<Integer,Integer>> mm =
+          testClient.testMapMap(1);
         System.out.print(" = {");
-        for (Int32 key : mm.keySet()) {
-          System.out.print(key.get() + " => {");
-          HashMap<Int32,Int32> m2 = mm.get(key);
-          for (Int32 k2 : m2.keySet()) {
-            System.out.print(k2.get() + " => " + m2.get(k2).get() + ", ");
+        for (int key : mm.keySet()) {
+          System.out.print(key + " => {");
+          HashMap<Integer,Integer> m2 = mm.get(key);
+          for (int k2 : m2.keySet()) {
+            System.out.print(k2 + " => " + m2.get(k2) + ", ");
           }
           System.out.print("}, ");
         }
@@ -271,29 +271,29 @@
          * INSANITY TEST
          */
         Insanity insane = new Insanity();
-        insane.userMap.put(Numberz.FIVE, new Int64(5000));
+        insane.userMap.put(Numberz.FIVE, (long)5000);
         Xtruct truck = new Xtruct();
-        truck.string_thing.value = "Truck";
-        truck.byte_thing.set((short)8);
-        truck.i32_thing.set(8);
-        truck.i64_thing.set(8);
+        truck.string_thing = "Truck";
+        truck.byte_thing = (byte)8;
+        truck.i32_thing = 8;
+        truck.i64_thing = 8;
         insane.xtructs.add(truck);
         System.out.print("testInsanity()");
-        HashMap<Int64,HashMap<Int32,Insanity>> whoa =
+        HashMap<Long,HashMap<Integer,Insanity>> whoa =
           testClient.testInsanity(insane);
         System.out.print(" = {");
-        for (Int64 key : whoa.keySet()) {
-          HashMap<Int32,Insanity> val = whoa.get(key);
-          System.out.print(key.get() + " => {");
+        for (long key : whoa.keySet()) {
+          HashMap<Integer,Insanity> val = whoa.get(key);
+          System.out.print(key + " => {");
 
-          for (Int32 k2 : val.keySet()) {
+          for (int k2 : val.keySet()) {
             Insanity v2 = val.get(k2);
-            System.out.print(k2.get() + " => {");
-            HashMap<Int32, Int64> userMap = v2.userMap;
+            System.out.print(k2 + " => {");
+            HashMap<Integer, Long> userMap = v2.userMap;
             System.out.print("{");
-            for (Int32 k3 : userMap.keySet()) {
-              System.out.print(k3.get() + " => " +
-                               userMap.get(k3).get() + ", ");
+            for (int k3 : userMap.keySet()) {
+              System.out.print(k3 + " => " +
+                               userMap.get(k3) + ", ");
             }
             System.out.print("}, ");
 
@@ -301,10 +301,10 @@
             System.out.print("{");
             for (Xtruct x : xtructs) {
               System.out.print("{" +
-                               "\"" + x.string_thing.value + "\", " +
-                               x.byte_thing.get() + ", " +
-                               x.i32_thing.get() + ", "+
-                               x.i64_thing.get() + "}, ");
+                               "\"" + x.string_thing + "\", " +
+                               x.byte_thing + ", " +
+                               x.i32_thing + ", "+
+                               x.i64_thing + "}, ");
             }
             System.out.print("}");
 
