Rework implementation with initial .cause support
#304
+790
−699
.cause support
#304