Directives get common functionality by using a shared maker function which applies run-time directives