Simple implementation
Resolves #2
Resolves #3
Resolves #4
Resolves #5