Implement Input

Closes #20
Merge pull request #89 from liamcmitchell/implement-input

Input re-implementation