use TypeToken instead of TypeLiteral because it eases serialization