fully functional but had problems using the name 'toString'