Resolves #8.
Resolves #9.
Resolves #10.
Resolves #11.
Resolves #12.
Resolves #13.
Resolves #14.
Resolves #15.
Resolves #16.
Resolves #17.