triggers implementation