cleaned up public interface