use promises rather than callbacks on all network stuff