         const float* d_station_y, float freq_hz, float bandwidth_hz,
         float time_int_sec, float gha0_rad, float dec0_rad, float4c* d_vis)
 {
-    dim3 num_threads(128, 1);
+    dim3 num_threads(256, 1);
     int block_size = STATION_BLOCK_SIZE;
     int max_station_blocks = (num_stations + block_size - 1) / block_size;
     dim3 num_blocks(num_stations, max_station_blocks);

                {
                    if ((block*num_sources) + s < num_sources)
                    {
                        vis[iVpq].a.x += Vpq_source[s].a.x;
                        vis[iVpq].a.y += Vpq_source[s].a.y;
                        vis[iVpq].b.x += Vpq_source[s].b.x;
                        vis[iVpq].b.y += Vpq_source[s].b.y;
                        vis[iVpq].c.x += Vpq_source[s].c.x;
                        vis[iVpq].c.y += Vpq_source[s].c.y;
                        vis[iVpq].d.x += Vpq_source[s].d.x;
                        vis[iVpq].d.y += Vpq_source[s].d.y;
                    }
                }
            } /* Accumulate to baseline for the source chunk */

    int p = blockIdx.x;

    /* Pointers into dynamic shared memory */
    float4c* __restrict__ vis_src = smem_f4c;

    /* Loop in blocks of threadDim.x sources over each station pair and
     * accumulate forming visibilities. */
