Added missing 'virtual' for toString()