Resolves #45, resolves #46, resolves #47, resolves #48