Split public interface off into its own file for easier testing