todo human-readable toString