add new low-level functions