Resolves #18, resolves #19, resolves #1