not public to avoid use from other addon
no need to be abstract