private functions
reductions
public interface