structural changes + add tests + add custom message option