add get_surface function