more efficient blackhole exception handling and lose one layer of indirection with small data constructors