we only need a single big function to manage offloading