 	__shared__ float dirorders[nrDirs];
 
 	if (threadIdx.x < nrDirs) {
-		const float dir1 = d_v1Dirs[0][threadIdx.x];
-		const float dir2 = d_v1Dirs[1][threadIdx.x];
-		const float dir3 = d_v1Dirs[2][threadIdx.x];
+		const float dir1 = d_v1Dirs[0][threadIdx.x]; // x-component
+		const float dir2 = d_v1Dirs[1][threadIdx.x]; // y-component
+		const float dir3 = d_v1Dirs[2][threadIdx.x]; // t-component
 
 		float dirX = (orderX==0)?1:(orderX==1)?dir1:(orderX==2)?dir1*dir1:dir1*dir1*dir1;
 		float dirY = (orderY==0)?1:(orderY==1)?dir2:(orderY==2)?dir2*dir2:dir2*dir2*dir2;

		cutilSafeCall(cudaFree(d_v1GausBuf));
		d_v1GausBuf = tmp;

		for (int orderT=0; orderT<=3; orderT++) {
			cutilSafeCall(cudaMemcpy(diffV1GausBufT, d_v1GausBuf, sizeof(float)*nrX*nrY*v1GausSize, cudaMemcpyDeviceToDevice));
			if (orderT > 0) diffV1GausBufT = diff(diffV1GausBufT, sizes, orderT,2);

			for (int orderY=0; orderY<=3-orderT; orderY++) {
				int orderX = 3-orderY-orderT;

	}
}

// conv2D is only used in the color model
// odata must be pre-allocated
// the result will end up in idata...
// FIXME: in conv1D the logic was: perform operation on idata and output to odata
// filtlen can not be greater than CONVN_THREAD_SIZE2
void conv2D(float* idata, float* odata, dim3 _sizes, const float* filt, int filtlen) {
	unsigned int* sizes = (unsigned int*)&_sizes;
