Add needs model

Closes #8