add only_once decorator