rework exceptions - closes #39