private short[] findX2(short t1Index, short t2Index, short t3Index){
		short t4Index = mod(t3Index - 1);
//		visualizer.highlightLoose(1, path[x2.fromIndex], path[x2.toIndex]);
//		visualizer.sleep();
		x2Dist = dist(path[t4Index],path[t3Index]);
		float possibleY2Dist = dist(path[t4Index], path[t1Index]);
		boolean foundGoodTour = x1Dist + x2Dist > y1Dist + possibleY2Dist;
		
		//Try to forbid these early stops:
		if(forbidStopAt2){
			foundGoodTour = false; 
		}
		
		if(foundGoodTour){
			if(findFirstOccurence(t2Index, t4Index, path) == t2Index){
				TwoOpt.swap(path, t2Index, t4Index);
			}else{
				TwoOpt.swap(path, t3Index, t1Index); 
			}
			return path; //Found a good 2-swap [SUCCESS]
		}else{
			short[] newPath = findY2(t1Index, t2Index, t3Index, t4Index);
//			visualizer.dehighlight(5);
//			visualizer.sleep();
			if(newPath != null){
//				visualizer.setPath(newPath);
				return newPath; //Next step success
			}
		}
		return null; //This step failed
	}