#1 public interface is almost done, only implementation is needed