  * once for every 
  */
 __global__
-void idGetSignals( NearbyPoint*         nPoint,
-                   cv::cuda::PtrStepSzb src,
+void idGetSignals( cv::cuda::PtrStepSzb src,
+                   const int            vCutSize,
+                   const NearbyPoint*   point_buffer,
                    const CutStruct*     cut_buffer,
-                   CutSignals*          signals,
-                   const int            vCutSize )
-{
+                   CutSignals*          sig_buffer )
+{
+    const size_t gridNSample = tagParam.gridNSample;
+    const int i = blockIdx.y;
+    const int j = blockIdx.z;
+    const int idx = j * gridNSample + i;
+
+    const NearbyPoint* nPoint = &point_buffer[idx];
+    identification::CutSignals* signals = &sig_buffer[idx * vCutSize];
+
     int myCutIdx = blockIdx.x * blockDim.y + threadIdx.y;
 
     if( myCutIdx >= vCutSize ) {
         // warps do never loose lockstep because of this
         return; // out of bounds
     }
-
-    // OK
-    // if( threadIdx.x == 0 ) { printf("My index: %d\n", myCutIdx ); }
 
     const CutStruct& myCut     = cut_buffer[myCutIdx];
     CutSignals*      mySignals = &signals[myCutIdx];

              point_buffer );
        POP_CHK_CALL_IFSYNC;

        popart::identification::getSignalsAllNearbyPoints
            <<<grid,block,0,tagStream>>>
            ( _d_plane,
              vCutSize,
              point_buffer,

    nPoint->readable = true;
    ellipse.computeHomographyFromImagedCenter( nPoint->point, nPoint->mHomography );
    nPoint->mHomography.invert( nPoint->mInvHomography );
}

/* All the signals have been computed for the homographies rolled
