improved decorator API