add chains of responsibility pattern (good!)