 gdf_error scatter_column(column_type const * const __restrict__ input_column,
                          size_type const num_rows,
                          size_type const * const __restrict__ row_output_locations,
-                         column_type * const __restrict__ output_column)
+                         column_type * const __restrict__ output_column,
+                         cudaStream_t stream = 0)
 {
 
   gdf_error gdf_status{GDF_SUCCESS};
 
-  thrust::scatter(thrust::cuda::par,
+  thrust::scatter(thrust::cuda::par.on(stream),
                   input_column,
                   input_column + num_rows,
                   row_output_locations,

          gdf_status = scatter_column<column_type>(input, 
                                                   num_rows,
                                                   row_output_locations, 
                                                   output);
          break;
        }
      case 4:

          gdf_status = scatter_column<column_type>(input, 
                                                   num_rows,
                                                   row_output_locations, 
                                                   output,
                                                   column_streams[i]);
          break;
        }
      case 8:
