Excellent work Dan! May I suggest that for the token specification your look into the ERC223 specification? This specification fixes the issue of an ERC20 token contract not being able to handle incoming transactions of an ERC20 token. For example, implementing token functionality into a contract or people accidentally sending tokens to a contract, and those tokens being irrecoverable,