             covariate_key_set keys = covariate_chain::encode(ctx, batch, read_index, read_bp_offset, cigar_event_index);
 
             //        printf("locating key %x...\n", key);
-            uint32 insert_idx_M = table.find_insertion_point(keys.M);
-            uint32 insert_idx_I = table.find_insertion_point(keys.I);
-            uint32 insert_idx_D = table.find_insertion_point(keys.D);
 
             //        if (table->exists(insert_idx) && table->table[insert_idx].key == key)
             //            printf("... found at index %d (%x)\n", insert_idx, table->table[insert_idx].key);


                bool ret;

                ret = update(insert_idx_M, keys.M, fractional_error_M);
                if (ret == false)
                {
                    //printf("overflow! rollback at read index %u event index %u\n", read_index, cigar_event_index);

                    // mark for rollback from here
                    last_cigar_event_index = cigar_event_index;
                    return false;
                }

                ret = update(insert_idx_I, keys.I, fractional_error_I);
                if (ret == false)
                {
                    //printf("overflow! rollback at read index %u event index %u\n", read_index, cigar_event_index);

                    rollback(insert_idx_M, keys.M, fractional_error_M);

                    // mark for rollback from here

                    return false;
                }

                uint32 insert_idx_D = table.find_insertion_point(keys.D);
                assert(insert_idx_D < LOCAL_TABLE_SIZE);

                ret = update(insert_idx_D, keys.D, fractional_error_D);
                if (ret == false)
                {
//                    printf("[B %d T %d] overflow! rollback at read index %u event index %u event D insert index %d\n", blockIdx.x, threadIdx.x, read_index, cigar_event_index, insert_idx_D);

//                    printf("[B %d T %d] rolling back I (index %d)\n", blockIdx.x, threadIdx.x, insert_idx_I);
                    rollback(insert_idx_I, keys.I, fractional_error_I);
//                    printf("[B %d T %d] rolling back M (index %d)\n", blockIdx.x, threadIdx.x, insert_idx_M);
                    rollback(insert_idx_M, keys.M, fractional_error_M);

                    // mark for rollback from here
