Resolves #9.
Resolves #2.
Resolves #3.
Resolves #4.
Resolves #8 and resolves #11.
Resolves #12.
Resolves #7 and resolves #8.