Fixes #174: Fixing singletons for derived classes
Update __str__ to cater for subclasses