Added customization options, and abstracted the token class via a protocol so custom classes can be substituted.