             // Get Value in the computed (U,V) and multiply by the corresponding weigth.
             // indAlpha is the ABSOLUTE number of projection in the projection array (NOT the current number of projection set!)
             
-            voxelColumn[colIdx]+=tex2DLayered(tex, v ,
+            voxelColumn[colIdx]+=tex3D<float>(tex, v ,
                     u ,
-                    indAlpha)*weigth;
+                    indAlpha+0.5f)*weigth;
         }  // END iterating through column of voxels
         
     }  // END iterating through multiple projections

    bool proj_fit_in_memory=false;
    unsigned int splits=1;
    Geometry * geoArray;
    
    // Does everything fit in the GPU?
    if(mem_image+mem_proj*nalpha<mem_GPU_global)
        // We only need to split if we have extra GPUs
        fits_in_memory=true;
    // We know we need to split, but:
    // Do all projections fit on the GPU (with some slack for the image)??
    else if(mem_proj*nalpha+mem_image_slice <mem_GPU_global)
         proj_fit_in_memory=true;
    // They do not fit in memory. We need to split both projections and images. Its OK, well survive.
    else 
    {
    }
    
    
    /*
     * Allocate texture memory on the device
     */
     CreateTexture(deviceCount,&projections[linear_idx_start],geoArray[sp],d_cuArrTex,nalpham,texImg);

    
    // Allocate result image memory
    size_t num_bytes = geo.nVoxelX*geo.nVoxelY*geo.nVoxelZ * sizeof(float);
    float* dimage;
    cudaMalloc((void**)&dimage, num_bytes);
    cudaMemset(dimage,0,num_bytes);
    cudaCheckErrors("cudaMalloc fail");
    
    // If we are going to time

    int divx,divy,divz;
    
    // RB: Use the optimal (in their tests) block size from paper by Zinsser and Keck (16 in x and 32 in y).

{
    
    
    
    // Prepare for MultiGPU
    int deviceCount = 0;
    cudaGetDeviceCount(&deviceCount);
