Add latest work from @echooocc
This update should address most coding and design issues raised so far.