Please put this class's functions in topo order (I don't care whether it's bottom-up or top-down)