Yea - I personally find labeling a variable as @transient and then serializing it differently in readObject confusing. To properly implement Externalizable, you also need to add a no arg constructor to this.