Revised class diagrams.

Using Singleton pattern for state as well and interface instead abstract
class when needed.