         {
             // for odd numbers of chunks, need to copy the last chunk over
             memcpy(b + startl, a + startl, (length - startl)*sizeof(size_t));
-            memcpy(mirror_1_b + startl, mirror_1_a + startl, (length - startl)*sizeof(double));
-            memcpy(mirror_2_b + startl, mirror_2_a + startl, (length - startl)*sizeof(double));
+            memcpy(mirror_b + startl, mirror_a + startl, (length - startl)*sizeof(double));
         }
         else
         {
             // for even numbers of chunks, need to mark past-the-end pointer as endu and do a merge
             endu = length;
-            merge(a + startl, b + startl, mirror_1_a + startl, mirror_1_b + startl, mirror_2_a + startl, mirror_2_b + startl, startu - startl, endu - startu);
+            merge(a + startl, b + startl, mirror_a + startl, mirror_b + startl, startu - startl, endu - startu);
             first = true;
         }
 
         swap(a, b);
-        swap(mirror_1_a, mirror_1_b);
-        swap(mirror_2_a, mirror_2_b);
+        swap(mirror_a, mirror_b);
 
         i = 0;
         startl = 0;

void uexpr_replace_relu_bounds_specialized(expr_t** expr_array, double* lb_array, double* ub_array, const size_t num_out_neurons_last_layer, const size_t num_out_neurons_current_layer)
{
    size_t n = blockIdx.x;
    size_t i = threadIdx.x;

    if(n < num_out_neurons_last_layer)
    {

    output_size[2] = num_filters;

    const size_t num_out_neurons = output_size[0]*output_size[1]*output_size[2];
    fppoly_add_new_layer(fp, num_out_neurons, num_pixels, CONV, RELU);
    expr_t** expr_array = fp->layers[fp->numlayers - 1]->expr_array;

    long int pad_along_height = 0;
