requires upstream