Do you want this to be checked exception? If so extend it from Exception or subclass of it. If it is unchecked exception (not forced by javac to be caught by callers), then extend it from RuntimeException or subclass of it. Exceptions are serializable objects and so have serialVersionID field. Also, to allow for exception chaining, define a constructor that accepts "cause" (http://java.sun.com/j2se/1.4.2/docs/guide/lang/chained-exceptions.html)