Credits: UML diagram generated with SOL2UML