tdd: 1. refactor
tdd: 2. fails
tdd: 2. passes
tdd: 2. refactor