more mobile-friendly, better error handling