except on actual atoms in dispatch
re arrange typecheck
only initialize classes once
namespace atoms by changing __module__ - is that right?