better file uploads + async