diff --git a/lib/java/src/TApplicationException.java b/lib/java/src/TApplicationException.java
new file mode 100644
index 0000000..0890282
--- /dev/null
+++ b/lib/java/src/TApplicationException.java
@@ -0,0 +1,107 @@
+package com.facebook.thrift;
+
+import com.facebook.thrift.protocol.TField;
+import com.facebook.thrift.protocol.TProtocol;
+import com.facebook.thrift.protocol.TProtocolUtil;
+import com.facebook.thrift.protocol.TStruct;
+import com.facebook.thrift.protocol.TType;
+
+/**
+ * Application level exception
+ *
+ * @author Mark Slee <mcslee@facebook.com>
+ */
+public class TApplicationException extends TException {
+
+  public static final int UNKNOWN = 0;
+  public static final int UNKNOWN_METHOD = 1;
+  public static final int INVALID_MESSAGE_TYPE = 2;
+  public static final int WRONG_METHOD_NAME = 3;
+  public static final int BAD_SEQUENCE_ID = 4;
+  public static final int MISSING_RESULT = 5;
+
+  protected int type_ = 0;
+
+  public TApplicationException() {
+    super();
+  }
+
+  public TApplicationException(int type) {
+    super();
+    type_ = type;
+  }
+
+  public TApplicationException(int type, String message) {
+    super(message);
+    type_ = type;
+  }
+
+  public TApplicationException(String message) {
+    super(message);
+  }
+
+  public int getType() {
+    return type_;
+  }
+
+  public static TApplicationException read(TProtocol iprot) throws TException {
+    TField field;
+    TStruct struct = iprot.readStructBegin();
+
+    String message = null;
+    int type = UNKNOWN;
+
+    while (true) {
+      field = iprot.readFieldBegin();
+      if (field.type == TType.STOP) { 
+        break;
+      }
+      switch (field.id) {
+      case 1:
+        if (field.type == TType.STRING) {
+          message = iprot.readString();
+        } else { 
+          TProtocolUtil.skip(iprot, field.type);
+        }
+        break;
+      case 2:
+        if (field.type == TType.I32) {
+          type = iprot.readI32();
+        } else { 
+          TProtocolUtil.skip(iprot, field.type);
+        }
+        break;
+      default:
+        TProtocolUtil.skip(iprot, field.type);
+        break;
+      }
+      iprot.readFieldEnd();
+    }
+    iprot.readStructEnd();
+
+    return new TApplicationException(type, message);
+  }
+
+  public void write(TProtocol oprot) throws TException {
+    TStruct struct = new TStruct("TApplicationException");
+    TField field = new TField();
+    oprot.writeStructBegin(struct);
+    if (getMessage() != null) {
+      field.name = "message";
+      field.type = TType.STRING;
+      field.id = 1;
+      oprot.writeFieldBegin(field);
+      oprot.writeString(getMessage());
+      oprot.writeFieldEnd();
+    }
+    field.name = "type";
+    field.type = TType.I32;
+    field.id = 2;
+    oprot.writeFieldBegin(field);
+    oprot.writeI32(type_);
+    oprot.writeFieldEnd();
+    oprot.writeFieldStop();
+    oprot.writeStructEnd();
+
+  }
+}
diff --git a/lib/java/src/protocol/TMessageType.java b/lib/java/src/protocol/TMessageType.java
index 905f99a..0e0b8fd 100644
--- a/lib/java/src/protocol/TMessageType.java
+++ b/lib/java/src/protocol/TMessageType.java
@@ -8,4 +8,5 @@
 public final class TMessageType {
   public static final byte CALL  = 1;
   public static final byte REPLY = 2;
+  public static final byte EXCEPTION = 3;
 }
