Resolves #45, resolves #46, resolves #47