add chain of responsibility pattern