         //  - perform a reverse alignment to find the source cell of each alignment
     }
     // add one to the processed chains
-    thrust::transform(
+    nvbio::transform<system_tag>(
+        n_active,
         aln->begin_chains.begin(),
-        aln->begin_chains.begin() + n_active,
         thrust::make_constant_iterator<uint32>( 1u ),
         aln->begin_chains.begin(),
         nvbio::add_functor() );

    uint32 n_active = aln->n_active;

    // build a stencil of the active reads, stencil[i] = (begin_chains[i] != end_chains[i])
    thrust::transform(
        aln->begin_chains.begin(),
        aln->begin_chains.begin() + n_active,
        aln->end_chains.begin(),
        aln->stencil.begin(),
        nvbio::not_equal_functor<uint32>() );

          nvbio::vector<system_tag,sink_type>&  sinks       = aln->sinks;

    // compute the chain query-spans
    for_each<system_tag>(
        n_active,
        thrust::make_counting_iterator<uint32>(0u),
        span_functor(
            command_line_options,
            reads_access,
