Utilizes some of the well known design patterns like observer, command, etc. Academic project, can be used for learning the design patterns.