resolves #1
resolves #2
resolves #3