outline of necessary functions