 		real3 *ptB,
 		real *contactDepth,
 		int2 *ids) {
-//#pragma omp parallel for schedule(guided)
+#pragma omp parallel for schedule(guided)
 
 	for (uint index = 0; index < total_possible_contacts; index++) {
 		function_MPR_Store(

			depth = dot(v4, n);

			// If the boundary is thin enough or the origin is outside the support plane for the newly discovered vertex, then we can terminate
			if (delta <= 1e-8 || depth < 0.0 || phase2 > max_iterations) {
				//cout << "ITERS MAX" << delta << " " << depth << " " << phase2 << endl;
				if (hit) {
					//cout << "HIT" << endl;

	if (type == TRIANGLEMESH) {
		return GetSupportPoint_Triangle(A, B, C, n);
	} else if (type == SPHERE) {
		localSupport = GetSupportPoint_Sphere(B, quatRotateMatT(n, (R)));
	} else if (type == ELLIPSOID) {
		localSupport = GetSupportPoint_Ellipsoid(B, quatRotateMatT(n, (R)));
	} else if (type == BOX) {
		localSupport = GetSupportPoint_Box(B, quatRotateMatT(n, (R)));
	} else if (type == CYLINDER) {
		localSupport = GetSupportPoint_Cylinder(B, quatRotateMatT(n, (R)));
	} else if (type == RECT) {
		localSupport = GetSupportPoint_Plane(B, quatRotateMatT(n, (R)));
	} else if (type == CONE) {
		localSupport = GetSupportPoint_Cone(B, quatRotateMatT(n, (R)));
	}

	return quatRotateMat(localSupport, R) + A; //globalSupport
}

__device__ __host__ real dist_line(real3 &P, real3 &x0, real3 &b, real3 &witness) {
