much cleaner api handling