almost complete with upload