separate event logic into Sinew object